返回顶部
首页 > 资讯 > 数据库 >cursor:pin S wait on X故障诊分析
  • 868
分享到

cursor:pin S wait on X故障诊分析

数据库sqlmysql 2023-09-23 19:09:15 868人浏览 八月长安
摘要

  1.    故障概述      7:15,二节点出现大量的“cursor: pin S wait on X”等待事件,数据库性能下降,持续到7:19分恢复正常,持续时间4分钟左右。 下面是详细的故障分析诊断过程。 2.    故障分析

 

1.    故障概述

     7:15,二节点出现大量的“cursor: pin S wait on X”等待事件,数据库性能下降,持续到7:19分恢复正常,持续时间4分钟左右。
下面是详细的故障分析诊断过程。

2.    故障分析

2.1.  故障现象

7:15,系统出现大量“cursor: pin S wait on X”等待事件,DBA未做任何操作,数据库恢复正常。
 

2.2.  故障分析

2.2.1. 故障现象

从AWR报告7点-8点:15数据库awr报告。

7:15点-7:19点

7:15点-7:19点分的awr报告可以看大量的cursor: pin S wait on X 等待
 

2.2.2. 什么是cursor: pin S wait on X

 

          Shared pool中的Hash Bucket 管理的是Object handle, 也就是元数据。其上存放了对象的name、 namespace及相关信息(对象是否只读,是本机的还是远端的等),也存放了当前正在lock和pin以及正在等待lock和pin该对象的用户的列表等。

           如果object handle存在,但是相关的object heap已经被刷出内存,此时object heap就要被重新reload(v$librarycache.reloads);如果相关object的定义已经被更改(v$librarycache.invalidations),此时就要重新解析相关对象。

          cursor: pin S wait on X表示会话试图以S 模式 Pin 某个 Cursor ,但是某个会话已经以 X 模式 Pinned,正在执行 Loading,也就是 Parsing。 通常cursor: pin S wait on X 不是故障的原因,它只是受害者。

2.2.3. cursor: pin S wait on X故障原因

·  内存抖动

 但内存抖动会加剧shared pool的latch争用,会导致出现cursor: pin S wait on X,library cache相关等待,严重可能导致数据库hang死或者宕机 

·  频繁硬解析

硬解析较多也会导致 cursor: pin相关等待增多

 

·  高版本
当一个sql的版本过多,也就是子游标过多,当sql软解析去扫描父游标下面的子游标,链路太长也会导致大量的cursor: pin S wait on X等待。可以通过oracle提供的version_rpt3_21.sql去分析高版本的原因。

Cursor Obsolescence游标废弃是一种SQL Cursor游标管理方面的增强特性,该特性启用后若parent cursor父游标名下的子游标child cursor总数超过一定的数目,则该父游标parent cursor将被废弃,同时一个新的父游标将被开始。 这样做有2点好处:

l  避免进程去扫描长长的子游标列表child cursor list以找到一个合适的子游标child cursor

l  废弃的游标将在一定时间内被age out,其占用的内存可以被重新利用

实际在版本10g中就引入了该Cursor Obsolescence游标废弃特性,当时child cursor 的总数阀值是1024, 但是这个阀值在11g中被移除了,这导致出现一个父游标下大量child cursor即high version count的发生;由此引发了一系列的版本11.2.0.3之前的cursor sharing 性能问题,主要症状是版本11.2.0.1和11.2.0.2上出现大量的Cursor: Mutex S 和library cache lock等待事件。

通过如下参数通知子游标的版本数量。

alter system set "_cursor_obsolete_threshold" =100 scope=spfile;

 

·  错误解析

比如sql语法错误

·  DDL

DDL语句会导致相关对象的所有游标都失效,当再次解析时会造成卡顿。

·  收集统计信息 

收集统计信息(使用ANALYZE或DBMS_STATS)中参数no_invalidate 设置为false,表示游标立即失效,将导致库缓存对象失效,并且这可能会级联到许多不同的依赖对象(如游标)。失效对库缓存,共享池,行缓存和CPU有很大影响,因为它们可能需要同时进行许多硬解析。

 

·  大量并发

大并发会导致cursor: pin S wait on X争用。

·  Known bugs

 

2.2.4. AWR分析

 
硬解析的次数非常低,排除硬解析过高的因素。
子游标版本最多173多,说明不多,不是子游标数量导致。

解析错误的也非常少,说明不是由于解析错误导致。
 

     可以看出故障时间点,sga各个组件在动态调整。
 

2.2.5. 深入分析

从trc里分析出所有的cursor: pin S wait on X等待的阻塞源头都是SID:737会话,发现737是oracle@pmjxpdbb (MMAN)会话,MMAN进程是Oracle 10g引入用于进行内存管理的进程,在进行动态内存调整时,这个进程要发挥其作用。

等到链都指向了源头SGA: allocation forcing component growth。

SGA组件中KGH: NO ACCESS持续变大 ,KGLH0、SQLA持续变小,KGH: NO ACCESS表示缓冲区缓存和共享池之间的部分传输,正是由于内存组件的调整,latch: shared pool被争用,造成了大量的cursor: pin S wait on X等待。
 

3.    解决方案

1、增大shared_pool_size 的最小值90G(SGA 600G*15%),或者采用手工内存管理的方式

根据Best Practices and Recommendations for RAC databases with SGA size over 100GB (Doc ID 1619155.1)

2、缩小buffer cache大小,可以减小gcs resources、gcs shadows组件的大小。

2、优化TOP SQL,尤其是全表扫描大量物理读的sql。


 

来源地址:https://blog.csdn.net/wuweilong/article/details/128449999

您可能感兴趣的文档:

--结束END--

本文标题: cursor:pin S wait on X故障诊分析

本文链接: https://lsjlt.com/news/416604.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • cursor:pin S wait on X故障诊分析
      1.    故障概述      7:15,二节点出现大量的“cursor: pin S wait on X”等待事件,数据库性能下降,持续到7:19分恢复正常,持续时间4分钟左右。 下面是详细的故障分析诊断过程。 2.    故障分析 ...
    99+
    2023-09-23
    数据库 sql mysql
  • oracle 10046事件故障诊断分析
    本篇文章为大家展示了oracle 10046事件故障诊断分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 什么是事件?EVENTS ...
    99+
    2024-04-02
  • 故障诊断的利器:异常捕获与分析
    异常捕获和分析是软件开发中的关键工具,可帮助开发人员识别并解决程序中的错误。通过及时检测和报告异常,开发人员可以快速采取行动,防止错误升级为严重问题。 异常捕获 异常是程序运行时发生的意外事件,它会中断正常的执行流程。异常可以由各种因素触...
    99+
    2024-04-02
  • PHP中如何进行故障诊断和容错分析?
    PHP是一种流行的编程语言,被广泛用于网站开发和服务端程序编写等领域。由于PHP应用程序的规模和复杂性不断增加,程序中的故障和错误也不可避免。因此,进行故障诊断和容错分析是PHP程序员必备的技能之一。本文将介绍PHP中故障诊断和容错分析的基...
    99+
    2023-05-22
    PHP 故障诊断 容错分析
  • 异常日志分析:诊断系统故障的宝藏
    异常日志分析流程 异常日志分析通常遵循以下流程: 收集日志: 从系统收集相关的异常日志文件。 过滤和整理: 根据时间、等级或其他标准过滤日志,仅关注与故障相关的条目。 审查日志条目: 仔细检查日志条目,识别异常事件、错误消息和...
    99+
    2024-04-02
  • 诊断系统故障的利器:异常捕捉与分析
    异常处理是编程中至关重要的技术,它使程序能够优雅地处理意外错误,防止系统崩溃。异常捕捉与分析是识别和解决系统故障的关键工具,可以大大加快故障排除过程。 异常捕捉 异常捕捉涉及将程序中的错误转换为异常对象,异常对象包含有关错误的详细信息,如...
    99+
    2024-04-02
  • MySQL中SHOW PROCESSLIST协助故障诊断全过程的示例分析
    小编给大家分享一下MySQL中SHOW PROCESSLIST协助故障诊断全过程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、SHOW PROCESSLIST命令SHOW P...
    99+
    2024-04-02
  • Netdata中的实时监控数据对故障诊断和性能分析有何影响
    Netdata提供了实时监控数据,这些数据对故障诊断和性能分析非常有帮助的影响: 及时发现故障:通过实时监控数据,管理员可以立即发现系统或应用程序的故障。监控数据可以显示CPU、内存、磁盘、网络等资源的使用情况,帮助管理员快速定位故障原...
    99+
    2024-06-04
    zabbix
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作