SQL 版本数过高导致数据库 hang 住问题分析
[[toc]]
适用范围
SQL 版本数过高及数据库cursor: mutex X
等待过高,数据库hang住问题分析。
问题概述
月结期间某条 SQL 版本数过高及数据库cursor: mutex X
等待过高,数据库hang住。
问题原因
通过分析 awr 发现数据库的 top 10 event 主要卡在 cursor: mutex X
,
top event 也是对应的卡顿sql,且其版本数达到了1000多,通常情况下SQL版本数量超过 20 就应该关注了。
执行 version_rpt3_25.sql
(https://p.liups.com/o/version_rpt3_25.sql) SQL,
1 | set pages 2000 lines 100 |
结果如下:
![企业微信截图_7dcfbc54-ab32-4a17-beef-156f913d74e5](https://imp.liups.com/pic/images/2023/12/30/1703895285.png)
可以看到 LANGUAGE_MISMATCH 较高,通过文章**Database Hang With ‘cursor: mutex X’ Contention Due To High Version Count Under LANGUAGE_MISMATCH (Doc ID 2542447.1)**进行验证,客户端的 nls_language 不一致,同时检查参数_cursor_obsolete_threshold
设置为 1024。
解决方案
1、修改参数 _cursor_obsolete_threshold
有1024 修改为 100.
2、手动清除父游标:
1 | SQL> select address,hash_value from v$sqlarea where sql_id='1v818hwxjxy58'; |
参考文档
Database Hang With ‘cursor: mutex X’ Contention Due To High Version Count Under LANGUAGE_MISMATCH (Doc ID 2542447.1)
原文作者: liups.com
原文链接: http://liups.cn/posts/2cf18b2c/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议