合 【MOS】诊断 ’library cache: mutex X’ 等待 (Doc ID 2331144.1) Troubleshooting 'library cache: mutex X' Waits. (Doc ID 1357946.1)
Tags: Oracle等待事件Moslibrary cache: mutex X
诊断 ’library cache: mutex X’ 等待 (Doc ID 2331144.1)
Troubleshooting 'library cache: mutex X' Waits. (Doc ID 1357946.1)
适用于:
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
Oracle Database Backup Service - 版本 N/A 和更高版本
本文档所含信息适用于所有平台
用途
本文档旨在说明 library cache: mutex X 等待诊断思路。
排错步骤
我们先要了解什么是 library cache: mutex X?
该机制是用于保护内存结构,在 library cache 中有许多内存结构需要 library cache: mutex X 的保护。
library cache 用来保存解析过的 cursor 相关的内存结构。
等待 library cache: mutex X 与之前版本的 latch:library cache 等待相同。library cache: mutex X 可以被很多因素引起,例如:(包括应用问题,执行计划不能共享导致的高版本的游标等),本质上都是某个进程持有 library cache: mutex X 太长时间,导致后续的进程必须等待该资源。如果在 library cache 的 latch 或者 mutex 上有等待,说明解析时有很大的压力,解析 SQL 的时间变长(由于 library cache 的 latch 或者 mutex 的等待)会使整个数据库的性能下降。
由于引起 library cache: mutex X 的原因多种多样,因此找到引起问题的根本原因很重要,才能使用正确的解决方案。
引起 library cache: mutex X 等待的原因主要有哪些呢?
大量的硬解析:过于频繁的硬解析,会导致该等待。
高版本的游标:当发生 High version count 时,大量的子游标需要检索,从而会引起该等待。
游标失效:游标失效是指,保存在 library cache 中的游标由于不可用,而从 library cache 中删除。游标失效是指某些改变导致内存中的游标不再有效。例如:游标相关对象的统计信息搜集;游标关联表,视图等对象的修改等。发生游标失效会导致接下来的进程需要重新载入该游标。当游标失效过多时,会导致 'library cache: mutex X' 等待。
游标重新载入:游标重新载入是指本来已经存在于 library cache 中,但是当再次查找时已经被移出 library cache(例如:由于内存压力),这时就需要重新解析并且载入该游标。游标重新载入操作不是一件好事,它表明您正在做一件本来不需要做的事情,如果您设置的 library cache 大小适当,是可以避免游标重新载入的。游标重新载入的时候是不可以被进程使用的,这种情况会导致 library cache: mutex X 等待。
已知的 Bug。
12C 及更高版本等待事件命名
12c 以后该等待又被细分为如下:
* library cache: mutex X – 用于保护 handle。
* library cache: bucket mutex X – 用于保护 library cache 中的 hash buckets。
* library cache: dependency mutex X – 用于保护依赖。
如何诊断 library cache: mutex X 等待?
确认是否存在一些改变:
a. 负载是否增长?
b. 是否有应用、操作系统、中间件的改变?该等待的出现的趋势:
a. 确认该等待是否在每天的固定时刻产生?
b. 是否做了一些操作触发该等待?生成问题发生时刻的 AWR 和 ADDM 报告,与基线或者正常时间段的 AWR 和 ADDM 报告比较,是否有负载,参数等的改变和不同。
使用如下脚本生成问题发生时的半小时到一小时区间的 AWR 和 ADDM 报告:
1 2 | SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql SQL> @$ORACLE_HOME/rdbms/admin/addmrpt.sql |