当前位置: 首页 > news >正文

cursor: mutex X 等待事件分析

背景:

v$session中同一个sql语句bhaku1zp2w5v7大量等待cursor: mutex X ,且等待事件较长。

分析:

什么是cursor: mutex X?

任何操作或访问游标的操作都可能需要等待访问共享池中支持游标的结构。在极端争用的情况下,这些等待可能会成为一个重大瓶颈,并可能限制正常活动。从 10.2 开始,一些共享游标操作开始由 Oracle 的 Mutex 功能实现,并且在 11g 中,Librarycache 和 rowcache 组件也使用 Mutex 实现。

等待游标是解析时间等待,涉及将游标加载到共享池中或搜索这些游标。大多数问题的发生是由于:

* 共享池中游标的版本数过多

* 过多的硬/软解析

* 过多的失效/重新加载

* 加载了巨大的对象

* 大小不合适的共享池

* OS/Resource Manager 正在调度的 Off CPU 资源的持有者

* 操作系统内存管理(例如,Linux x86-64 平台上的超大型 SGA,没有实施 Hugepages)

* 代码缺陷

对这些事件的争用通常是另一个问题的征兆 - 表明其他地方存在问题,而不是结构或机制本身的问题。要解决此症状,需要确定并解决根本原因。

v$sqlarea查看游标数,8025个子游标

SQL>  select address,hash_value,version_count from v$sqlarea where sql_id='bhaku1zp2w5v7';ADDRESS          HASH_VALUE VERSION_COUNT
---------------- ---------- -------------
0000000313A24238 3928889191          8025
v$sql_shared_cursor检查游标无法共享原因

绝大部分是由于BIND_EQUIV_FAILURE,绑定值的选择性与用于优化现有子游标的选择性不匹配。

SQL> select * from v$sql_shared_cursor where sql_id='bhaku1zp2w5v7';Y对应BIND_EQUIV_FAILURE,即游标无法共享原因,绑定值的选择性与用于优化现有子游标的选择性不匹配
BIND_EQUIV_FAILURE VARCHAR2(1) (Y|N) The bind value's selectivity does not match that used to optimize the existing child cursorSQL> select count(*) from v$sql_shared_cursor where sql_id='bhaku1zp2w5v7'  and BIND_EQUIV_FAILURE='Y';COUNT(*)
----------7136

匹配 bug 28794230

Bug 28794230  12.2 Cursor Mutex X Due To Sql Not Shared Because Of BIND_EQUIV_FAILURE

版本匹配,12.2.0.1,当前版本12.2.0.1.201020

解决方案

Description
Cursor leak with ACS(Adaptive Cursor Sharing) and CFB(Cardinality FeedBack) 
on short-running query and fix for Bug:23596611.Rediscovery Notes
If a subsecond query with binds exhibits increasing child cursor count on
repeated executions on a release where the fix for Bug:23596611 exists and
disabling adaptive cursor sharing or statistics feedback prevents the cursor leak ,t
hen you may have encountered this bug.You can see  BIND_EQUIV_FAILURE=Y in V$SQL_SHARED_CURSOR.Workaround
Several alternatives:
_optimizer_use_feedback=false
_optimizer_adaptive_cursor_sharing=false
_optimizer_extended_cursor_sharing_rel=none
_fix_control='23596611:OFF'  may also help in some cases

建议:

1.安装28794230 oneoff patch。需要申请窗口实施。

2.设置隐含参数,需要窗口重启实例生效。

_optimizer_use_feedback=false

_optimizer_adaptive_cursor_sharing=false

_optimizer_extended_cursor_sharing_rel=none

3.绑定sql执行计划(最终选用这种方式,变动最小原则)


http://www.mrgr.cn/news/49309.html

相关文章:

  • Pandas | 使用pandas对爱彼迎数据集分析,加深对数据的理解和函数使用
  • 多年口碑:探索自闭症学校多年口碑的发展
  • 结构体 超详解
  • ARP限制网速攻击
  • ES2023新特性你知多少
  • 【代码随想录Day41】动态规划Part10
  • ChatGPT免费使用:人工智能在现代社会中的作用
  • [Basic] arg max 公式解释
  • JavaScript 数组判断攻略:告别误判,精准判定变量是否为数组
  • 重学SpringBoot3-集成Spring Boot Actuator
  • 鸿蒙开发案例:记忆翻牌
  • 【Coroutines】Implement Lua Coroutine by Kotlin - 2
  • 介绍vue.js3的核心原理:响应式数据驱动虚拟 DOM 的渲染,认识渲染器、编译器、组件与三者的协同合作,理解其是如何实现从模板到视图的高效渲染的
  • 开始新征程__10.13
  • 【网络安全】JSONP劫持原理及攻击实战
  • 软件设计之Redis(1)
  • 如何解决 Vim 中的 “E212: Can‘t open file for writing“ 错误:从编辑到权限管理(sudo)
  • 代码随想录算法训练营第五十三天 | 42. 接雨水,84.柱状图中最大的矩形
  • C、C++常用数据结构:栈
  • 京东商品SKU详情接口测试||电商API商品详情接口测试【附代码】