热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【MOS】常见问题cursorlibrarycache类型的等待事件

【MOS】常见问题:'cursor:mutex..''cursor:pin..''librarycache:mutex..


【MOS】常见问题:'cursor:mutex ..'/ 'cursor:pin ..'/ 'library cache:mutex ..'类型的等待事件 (文档 ID 1525791.1)
 


文档内容
 


用途

问题和答案
 什么是 'cursor: ' 等待事件?
 最常见的等待事件是什么?
 等待事件最常见的原因是什么?
 如何避免这些等待事件?
 可以在什么位置找到原因诊断以及关于这些等待事件的更多信息?
 有用参考

参考


适用于:

Oracle Database - Enterprise Edition - 版本 10.1.0.2 和更高版本
 
Oracle Database - Standard Edition - 版本 10.1.0.2 和更高版本
 
Oracle Database - Personal Edition - 版本 10.1.0.2 和更高版本
 
本文档所含信息适用于所有平台
 

用途


本文章针对与CURSOR(游标)管理活动相关的等待事件提供了一些核心要点信息。

问题和答案


 

什么是 'cursor: ' 等待事件?

处理或访问cursor的任何操作都可能需要等待,才能访问在 shared pool 中支持这些操作的结构。在极限争用的情况下,这些等待事件就会成为一个显著瓶颈,继而束缚正常活动。从版本 10.2 开始,一些共享cursor操作开始由 Oracle 的 Mutex 功能实施,在 11g 中 Librarycache 和 rowcache 组件也通过 Mutex 实施。


 

最常见的等待事件是什么?

最常见的等待事件包括:

  • cursor: mutex X
  • cursor: mutex S
  • cursor: pin X
  • cursor: pin S
  • cursor: pin S wait on X
  • library cache: mutex X
  • library cache: mutex S

请注意,所有这些等待事件都非常相似,并且可能都是在一个操作过程中产生的等待。eXclusive(排他)操作是需要更改特定结构的那些操作;Share(共享)操作可以在不更改的情况下进行,只是需要在更改过程中暂时锁定这些操作,以防止其被其他项更改。这点区别实际对于问题的诊断并没有太多关联,只是特定等待事件可能在特定问题中更为常见。

 


 

等待事件最常见的原因是什么?

基于这些事件的争用通常是另一个问题的症状表现 – 即问题是其它地方产生的,而不是 mutex 机制本身。如果需要解决 mutex 竞争这个问题表现,我们需要识别问题根本原因并加以处理。

Cursor 相关等待事件是 SQL 语句在 parse 时产生的,包括将cursor加载到 shared pool 中或在其中搜索那些cursor。出现这些问题可能的原因:

  • shared pool 中 cursor 的版本数变得过多
  • 过多的硬/软分析
  • 过多的无效/重新加载
  • 加载了大量的对象
  • shared pool 大小不合适
  • 资源的持有者被 OS 或者 Resource Manager 从 CPU 上移除
  • 内存的操作系统管理(例如 Linux x86-64 上非常大的 SGA,而没有实施 Hugepage)
  • 代码缺陷

如果 cursor 共享的很好,并且 child cursor 和版本数量较低,那么一般不会产生这种类型的争用。


 

如何避免这些等待事件?

通常,通过采用合理的cursor共享策略,正确使用绑定变量并确保没有大量版本,应该能够避免大多数这类性质的问题。有用的文章包括:

Note:62143.1 Understanding and Tuning the Shared Pool  
Note:94036.1 Init.ora Parameter "CURSOR_SHARING" Reference Note


如果您发现自己有大量 cursor 版本,参阅以下文章可能会有所帮助:

Note:296377.1 Troubleshooting: High Version Count Issues  
Note:438755.1 Formated V$SQL_SHARED_CURSOR Report by SQLID or Hash Value

 


 

可以在什么位置找到原因诊断以及关于这些等待事件的更多信息?

    • 问题的历史记录
      因为这些等待事件具有相似的原因,因此有些诊断信息对所有的等待都适用:
    • 诊断依据
      通常需要进行大量诊断才能确定问题。这是因为这类等待事件是一种症状表现,阻塞会话可能与等待会话没有任何关系,只是它碰巧将后者阻塞而已。
      请注意,在具有大量会话的忙碌系统上获取 systemstate 可能需要很大开销。
      如果是这种情况,则可考虑生成不同的 dump ,但是这些 dump 提供的信息会减少,可能不足以进一步诊断问题。所以,按照最有用(且最大开销)的信息从高到低排序,请尝试获取:


      例如,如果级别 266 systemstate 开销太大,则您可以尝试使用级别 258。您还可以合并上述各项。例如,获取一个级别 266 systemstate 和多个 hanganalyze dump。(hanganalyze dump应该包括 short stack dump)。
    • 数据收集参考资料:

      Note:1363422.1 AWR Reports - Information Center         
      Note:748642.1 How to Generate an AWR Report and Create Baselines [ID 748642.1]        

      Note:1364257.1 How to Collect Errorstacks for use in Diagnosing Performance Issues.        
      Note:452358.1 Database Hangs: What to collect for support.        
      Note:175006.1 Steps to generate HANGANALYZE trace files.        

      Note:301137.1 OS Watcher User Guide        

      Note:1360119.1 FAQ: Database Performance Frequently Asked Questions

    • 是否有任何特定事件看起来会触发问题?
    • 问题是否总在特定时间段发生?
    • 应用程序、数据库、中间件层更改
    • OS 更改
    • 负载的增加
    • 最近更改了什么?
    • 共性或因果关系
    • 级别 266 的 Systemstate(包含堆栈的 Systemstate)
    • 级别 258 的 Systemstate(包含堆栈不太详细的 Systemstate)
    • 具有堆栈跟踪的 Hanganalyze 输出
    • 如果无法找到资源持有者:收集包含 short stack dump 的Systemstate dump
      (收集关于每个会话的信息应该可以捕获到持有者)
    • 如果无法标识持有者:收集等待者的 Errorstack
    • AWR(或 Statspack)和 ASH 报表(用于等待会话)
      这些提供了系统概览并且还根据需要关注了单个会话
    • Stack trace(s) 堆栈跟踪
      通过 stack trace 我们可以看到资源持有者正在处理的代码区域。
    • 操作系统统计信息(例如 OSWatcher)
      操作系统统计信息非常有用的原因有多种,如标识高 CPU 用户、找出活动的高峰,以及标识“构建”符号来帮助触发早期的数据捕获。
    • 常见诊断

      因为这些等待事件具有相似的原因,因此有些诊断信息对所有的等待都适用:

    • cursor: mutex X

      一个 cursor 正在被parse 并尝试以 eXclusive 模式获取 cursor mutex

    • cursor: mutex S

      一个 cursor 正在被parse并尝试以 Share 模式获取 cursor mutex

      Note:9591812.8 Bug 9591812 - Wrong wait events in 11.2 ("cursor: mutex S" instead of "cursor: mutex X")

    • cursor: pin X

      一个 cursor 正在被parse 并尝试以 eXclusive 模式获取cursor pin

    • cursor: pin S

      一个 cursor 正在被parse并尝试以 Share 模式获取cursor pin。请参阅:

      Note:1310764.1 WAITEVENT: "cursor: pin S" Reference Note


      如果在此事件中发现争用,最好查找其他相关等待事件并首先对其进行调查,因为这个等待很有可能只是其它争用的症状。

    • cursor: pin S wait on X

      一个 cursor 正在被parse 并持有了 cursor pin,而且尝试在 eXclusive 模式下获取该 cursor pin。如果在 AWR的“Top Waits”部分看见 'cursor: pin S wait on X' 突出显示,如下所示:

      downloadattachmentprocessor?parent=DOCUMENT&sourceId=1525791.1&attachid=1356828.1:S_wait_on_X&clickstream=yes

      则应该首先查看您在系统中具有的 cursor 版本数:

      downloadattachmentprocessor?parent=DOCUMENT&sourceId=1525791.1&attachid=1356828.1:High_Version_Count&clickstream=yes

      如果它们接近此处显示的异常高的数量,则根据优先级减少 cursor 版本。请参阅:

      Document 296377.1 Troubleshooting: High Version Count Issues


      如果不是这个原因导致的,您可以使用下列文章帮助排除问题:

      Note:1349387.1 Troubleshooting 'cursor: pin S wait on X' waits      
      Note:1298015.1 WAITEVENT: "cursor: pin S wait on X" Reference Note      
      Note:786507.1 How to Determine the Blocking Session for Event: 'cursor: pin S wait on X'       

      Note:742599.1 High 'cursor: pin S wait on X' and/or 'library cache lock' Waits Generated by Frequent Shared Pool/Buffer Cache Resize Activity      

      Note:1268724.1 "Cursor: Pin S Wait On X" Contention Mutex Sleep Reason Primarily ' kkslce [KKSCHLPIN2]'      
      Note:402027.1 Bug:5653007; 5485914: SELF DEADLOCK PROCESS WAITS ON ''Cursor: Pin S Wait On X'' with SQL_TRACE enabled.      
      Note:9472669.8 Bug 9472669 - 'cursor: pin S wait on X' waits for invalid SQL over DB link

  • library cache: mutex X

    此处将执行 library cache 操作并尝试在 eXclusive 模式下获取 library cache mutex。

    "library cache:mutex X" 症状非常常见,很多问题都会导致该症状,所以完全理解根本原因以便确定正确的操作是非常重要的。在大多情况中,可以通过对应用程序进行更改(例如阻止登录或注销风暴)来减轻问题。还有可能是遇到了已知 Oracle bug(这包括与互斥相关的问题,以及具有互斥等待事件症状的非互斥问题)。

    Note:1357946.1 Troubleshooting 'library cache: mutex X' waits.    

    Note:727400.1 WAITEVENT: "library cache: mutex X"    
    Note:758674.1 " Library Cache: Mutex X " On Koka Cursors (LOBs) Non-Shared :    
    Note:9530750.8 Bug 9530750 - High waits for 'library cache: mutex X' for cursor Build lock

  • library cache: mutex S

    此处将执行 library cache 操作并尝试在 Share 模式下获取 library cache mutex


 

有用参考

 

Note:34579.1 WAITEVENT: "library cache pin" Reference Note

参考

NOTE:1298015.1
  - WAITEVENT: "cursor: pin S wait on X" Reference Note
 

BUG:9591812
  - INCORRECT WAIT EVENTS IN 11.2 ("CURSOR: MUTEX S" INSTEAD OF "CURSOR: MUTEX X")
 

NOTE:1268724.1
  - "Cursor: Pin S Wait On X" Contention Mutex Sleep Reason Primarily ' kkslce [KKSCHLPIN2]'
 
NOTE:786507.1
  - How to Determine the Blocking Session for Event: 'cursor: pin S wait on X'
 
NOTE:94036.1
  - Init.ora Parameter "CURSOR_SHARING" Reference Note
 
NOTE:758674.1
  - " Library Cache: Mutex X " On Koka Cursors (LOBs) Non-Shared :
 
NOTE:9472669.8
  - Bug 9472669 - 'cursor: pin S wait on X' waits for invalid SQL over DB link
 
NOTE:727400.1
  - WAITEVENT: "library cache: mutex X"
 
NOTE:742599.1
  - High 'cursor: pin S wait on X' and/or 'library cache lock' Waits. Cause: Shared Pool/Buffer Cache Resize Activity
 
NOTE:175006.1
  - Steps to generate HANGANALYZE trace files (9i and below)
 
NOTE:296377.1
  - Troubleshooting: High Version Count Issues
 
NOTE:301137.1
  - OSWatcher (Includes: [Video])
 
NOTE:438755.1
  - High SQL Version Counts - Script to determine reason(s)
 
NOTE:452358.1
  - How to Collect Diagnostics for Database Hanging Issues
 
NOTE:9530750.8
  - Bug 9530750 - High waits for 'library cache: mutex X' for cursor Build lock
 
NOTE:9591812.8
  - Bug 9591812 - Wrong wait events in 11.2 ("cursor: mutex S" instead of "cursor: mutex X")
 
NOTE:34579.1
  - WAITEVENT: "library cache pin" Reference Note
 
NOTE:748642.1
  - How to Generate an AWR Report and Create Baselines
 
NOTE:62143.1
  - Troubleshooting: Tuning the Shared Pool and Tuning Library Cache Latch Contention
 
NOTE:361468.1
  - HugePages on Oracle Linux 64-bit
 
NOTE:1310764.1
  - WAITEVENT: "cursor: pin S" Reference Note
 
NOTE:1349387.1
  - Troubleshooting 'cursor: pin S wait on X' waits.
 
NOTE:1357946.1
  - Troubleshooting 'library cache: mutex X' waits.
 
NOTE:1360119.1
  - * FAQ: Database Performance Frequently Asked Questions
 
NOTE:1363422.1
  - Automatic Workload Repository (AWR) Reports - Start Point
 
NOTE:402027.1
  - Bug:5653007; 5485914: SELF DEADLOCK PROCESS WAITS ON ''Cursor: Pin S Wait On X'' with SQL_TRACE enabled.
 

BUG:5653007
  - SELF DEADLOCK PROCESS WAITS ON ''CURSOR: PIN S WAIT ON X''
 
NOTE:1364257.1
  - How to Collect Errorstacks for use in Diagnosing Performance Issues.
 



推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了一个误删Oracle数据文件导致数据库无法打开的问题,并提供了解决方式。解决方式包括切换到mount状态、离线删除报错的数据文件等。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
author-avatar
文伯雅寧19
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有