【故障解决】enq: PS - contention

【故障解决】enq: PS - contention

一.1  BLOG文档结构图

 

 

 

一.2  前言部分

 

一.2.1  导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:

① 等待事件 enq: PS - contention的解决办法

② 一般等待事件的解决办法

 

  Tips:

       ① 若文章代码格式有错乱,推荐使用QQ或360浏览器,也可以下载pdf格式的文档来查看,pdf文档下载地址:http://yunpan.cn/cdEQedhCs2kFz(提取码:ed9b) 

       ② 本篇BLOG中代码部分需要特别关注的地方我都用黄色背景和红色字体来表示,比如下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方,命令一般使用粉红颜色标注,注释一般采用蓝色字体表示。

 

  List of Archived Logs in backup set 11

  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

  ---- ------- ---------- ------------------- ---------- ---------

  1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

  1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

  2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

  2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

 

 

 

[ZFXDESKDB1:root]:/>lsvg -o

T_XDESK_APP1_vg

rootvg

[ZFXDESKDB1:root]:/>

[ZFXDESKDB1:root]:/>lsvg rootvg

 

 

====》2097152*512/1024/1024/1024=1G 

 

 

 

 

 

本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。

 

 

 

一.2.2  相关参考文章链接

 

 

一.2.3  本文简介

 

 

 

 

一.3  相关知识点扫盲

 

 

 

 

 

 

一.4  故障分析及解决过程

 

一.4.1  故障环境介绍

 


 项目


source db


db 类型


RAC


db version


10.2.0.4.0


db 存储


RAW


ORACLE_SID


XXX


db_name


XXX


主机IP地址:


XXX


OS版本及kernel版本


AIX 5.3.0.0


OS hostname


XXX

 

 

 

 

一.4.2  故障发生现象及报错信息

开发人员反馈数据库很慢,让帮忙查查原因,那首当其冲的就是看主机的情况了,主机是AIX系统,采用TOPAS查看主机的情况,如下图,从图中可以看出的确有一个oracle的进程非常占用CPU资源:

 

 

 

 

 

 

一.4.3  故障分析及解决过程

根据os的进程号到数据库中查看相关的会话:

 

 SELECT a.INST_ID, a.SQL_ID, a.EVENT, a.PREV_SQL_ID, a.STATUS,a.USERNAME,a.OSUSER

   FROM gv$session a, gv$process b

  WHERE a.PADDR = b.ADDR

    and b.SPID = 3109012;

 

 

 

可以看到该会话的等待事件是enq: PS - contention,并且有相关的SQL和OSUSER,可以联系到当时的开发人员,据说已经跑了1个小时了,我们先来看看具体的sql内容:

 

 

 SELECT *

   FROM gv$sqlarea a

  WHERE a.SQL_ID = ‘cg7q9tn7u5vyx‘

    and a.INST_ID = 1;

 

 

SQL文本copy出来:

SELECT t.*, s.sid, s.serial#, s.machine, s.program, s.osuser

  FROM (SELECT b.INST_ID,

               c.USERNAME,

               a.event,

               to_char(a.cnt) AS seconds,

               a.sql_id,

               dbms_lob.substr(b.sql_fulltext, 100, 1) sqltext

          FROM (SELECT rownum rn, t.*

                  FROM (SELECT s.INST_ID,

                               decode(s.session_state,

                                      ‘WAITING‘,

                                      s.event,

                                      ‘Cpu + Wait For Cpu‘) Event,

                               s.sql_id,

                               s.user_id,

                               COUNT(*) CNT

                          FROM gv$active_session_history s

                         WHERE sample_time > SYSDATE - 30 / 1440

                         GROUP BY INST_ID,

                                  s.user_id,

                                  decode(s.session_state,

                                         ‘WAITING‘,

                                         s.event,

                                         ‘Cpu + Wait For Cpu‘),

                                  s.sql_id

                         ORDER BY CNT DESC) t

                 WHERE rownum < 20) a,

               gv$sqlarea b,

               dba_users c

         WHERE a.sql_id = b.sql_id

           AND a.user_id = c.user_id

           AND a.INST_ID = b.INST_ID

         ORDER BY CNT DESC) t,

       gv$session s

 WHERE t.sql_id = s.sql_id(+)

   AND t.INST_ID = s.INST_ID(+)

 ORDER BY t.INST_ID

 

从文本中可以看出该sql查询的是数据字典,估计是从网上copy过来的,以哥多年的开发经验瞅了一眼就发现一个特殊的地方dbms_lob.substr(b.sql_fulltext, 100, 1)

这类clob类型的都比较耗费资源,因为比较忙就不深入的分析了,简单看了下把该句修改为b.SQL_TEXT,满足要求即可,没有必要去查询clob。

 

简单修改后:

 

SELECT t.*, s.sid, s.serial#, s.machine, s.program, s.osuser

  FROM (SELECT b.INST_ID,

               c.USERNAME,

               a.event,

               to_char(a.cnt) AS seconds,

               a.sql_id,

               --dbms_lob.substr(b.sql_fulltext, 100, 1) sqltext ,

               b.SQL_TEXT

          FROM (SELECT rownum rn, t.*

                  FROM (SELECT s.INST_ID,

                               decode(s.session_state,

                                      ‘WAITING‘,

                                      s.event,

                                      ‘Cpu + Wait For Cpu‘) Event,

                               s.sql_id,

                               s.user_id,

                               COUNT(*) CNT

                          FROM gv$active_session_history s

                         WHERE sample_time > SYSDATE - 30 / 1440

                         GROUP BY INST_ID,

                                  s.user_id,

                                  decode(s.session_state,

                                         ‘WAITING‘,

                                         s.event,

                                         ‘Cpu + Wait For Cpu‘),

                                  s.sql_id

                         ORDER BY CNT DESC) t

                 WHERE rownum < 20) a,

               gv$sqlarea b,

               dba_users c

         WHERE a.sql_id = b.sql_id

           AND a.user_id = c.user_id

           AND a.INST_ID = b.INST_ID

         ORDER BY CNT DESC) t,

       gv$session s

 WHERE t.sql_id = s.sql_id(+)

   AND t.INST_ID = s.INST_ID(+)

 ORDER BY t.INST_ID;

 

 

 

执行一下:

 

效率还是可以的,从之前的1个小时没有跑出来到现在的6秒,还是很不错的,主要是需要找出SQL中的瓶颈部分,这个就需要经验和多读书、多看报。少吃零食多睡觉了。^_^

 

下来问了下开发人员说可以停掉的,那我就kill掉了,kill掉后主机的情况如下:

 

 

 

一.4.3.1  metalink解释

参考:Metalink: Bug 5476091
Description
If a session is waiting on a mutex wait (eg: ‘cursor: pin X‘)
then interrupts to the session are ignored.
eg: Ctrl-C does not have any effect.

This issue can show up as a deadlock in a Parallel Query
between the QC (Query coordinator) and one of its slaves
with the QC waiting on "enq: PS - contention" deadlocked
against the slave holding the requested PS enqueue.
   

Bug 5476091 - Ctrl-C ignored for sessions waiting for mutexes / Deadlock with "enq: PS" - superceded (文档 ID 5476091.8)

 

Bug 5476091  Ctrl-C ignored for sessions waiting for mutexes / Deadlock with "enq: PS" - superceded

This note gives a brief overview of bug 5476091. 
The content was last updated on: 21-JUL-2015
Click here for details of each of the sections below.

Affects:


Product (Component)


Oracle Server (Rdbms)


Range of versions believed to be affected


Versions BELOW 11.2


Versions confirmed as being affected


· 10.2.0.4

· 10.2.0.3


Platforms affected


Generic (all / most platforms affected)

Note that this fix has been superseded by the fix in Bug:10214450 

Fixed:

This fix has been superseded - please see the fixed version information for Bug:10214450 . The box below only shows versions where the code change/s for 5476091 are first included - those versions may not contain the later improved fix.


The fix for 5476091 is first included in


· 11.2.0.1 (Base Release)

· 11.1.0.7 (Server Patch Set)

· 10.2.0.5 (Server Patch Set)

 


Symptoms:


Related To:


· Deadlock

· Hang (Process Hang)

· Mutex Contention

· Waits for "cursor: pin X"

· Waits for "enq: PS - contention"


· Parallel Query (PQO)

Description

If a session is waiting on a mutex wait (eg: ‘cursor: pin X‘)

then interrupts to the session are ignored.

eg: Ctrl-C does not have any effect.

 

This issue can show up as a deadlock in a Parallel Query

between the QC (Query coordinator) and one of its slaves

with the QC waiting on "enq: PS - contention" deadlocked

against the slave holding the requested PS enqueue.

 Note:

  This fix is superceded by the fix in bug 10214450

 


Please note: The above is a summary description only. Actual symptoms can vary. Matching to any symptoms here does not confirm that you are encountering this problem. For questions about this bug please consult Oracle Support.

References

Bug:5476091 (This link will only work for PUBLISHED bugs)
Note:245840.1 Information on the sections in this article

 

 

一.5  故障处理总结

 

到此所有的处理算是基本完毕,过程很简单,但是不同的场景处理方式有很多种,我们应该学会灵活变通。

 

 

 

一.6  About Me

 

...........................................................................................................................................................................................

本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

ITPUB BLOG:http://blog.itpub.net/26736162

本文地址:http://blog.itpub.net/26736162/viewspace-1985380/

本文pdf版:http://yunpan.cn/cdEQedhCs2kFz (提取码:ed9b)

QQ:642808185 若加QQ请注明您所正在读的文章标题

于 2016-01-28 10:00~ 2016-01-28 19:00 在中行完成

<版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任!>

...........................................................................................................................................................................................

 

 

时间: 2024-10-11 21:07:37

【故障解决】enq: PS - contention的相关文章

【故障处理】队列等待之enq IV - contention案例

[故障处理]队列等待之enq IV -  contention案例 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 队列等待之enq IV -  contention案例(重点) Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公

(转)625某电商网站数据库宕机故障解决实录(上)

625某电商网站数据库特大故障解决实录(上) 原文:http://oldboy.blog.51cto.com/2561410/1431161 这是一次,惊心动魄的企业级电商网站数据库在线故障解决实录,故障解决的过程遇到了很多问题,思想的碰撞,解决方案的决策,及实际操作的问题困扰,老男孩尽量原汁原味的描述恢复的全部过程及思想思维过程!老男孩教育版权所有,本内容禁止商业用途. 目录: 625某电商网站数据库特大故障解决实录... 1 1接到电商客户报警... 1 1.1与客户初步沟通... 1 1.

625某电商网站数据库宕机故障解决实录(上)

博客编辑器越来越用不好了,伙伴们将就看,需要排版更好的文档请加Q群246054962. 625某电商网站数据库特大故障解决实录(上) 这是一次,惊心动魄的企业级电商网站数据库在线故障解决实录,故障解决的过程遇到了很多问题,思想的碰撞,解决方案的决策,及实际操作的问题困扰,老男孩尽量原汁原味的描述恢复的全部过程及思想思维过程!老男孩教育版权所有,本内容禁止商业用途. 目录: 625某电商网站数据库特大故障解决实录... 1 1接到电商客户报警... 1 1.1与客户初步沟通... 1 1.2深入沟

【故障解决】OGG-00446 错误解决

[故障解决]OGG-00446 Could not find archived log for sequence 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① OGG-00446 Could not find archived log for sequence 的解决方法(重点) ② OGG基本的维护.排错操作     Tips:   

enq: TT – contention等待事件

客户数据库删除表空间异常,说各种办法都尝试过,我也想好好跟踪下: 删除的时候出现等待事件 本来想跟踪先,看看等待事件问题,结果由于需要要重启数据库,重启后,表空间可以正常删除,感觉略微有点失落, 现对该等待时间做简单分析: TT 队列锁在官方文档中介绍为TT, Temporary Table,但是实际在版本8i之后该队列锁更多参与在表空间管理事务中. 也可以称enqueue TT为tablespace lock. 作用 该enqueue TT队列锁用以在各种类型的表空间操作执行过程中避免出现死锁

Oracle Study之-- enq:SQ contention等待事件

Oracle Study之-- enq:SQ contention等待事件 通过AWR Report发现"enq:SQ contention"等待事件: 应用环境: 转自:http://www.xuebuyuan.com/1027129.html enq:SQ contention/row cache lock/DFS lock handle(SV) 这三个等待事件都与Oracle 的Sequence 有关. Oracle Sequence Cache 参数说明 http://blog

NFS服务的简介及常见故障解决方法

NFS服务的简介及常见故障解决方法 1.NFS基本介绍 (1)NFS简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享的一种方法.NFS在文件传送或信息传送过程中依赖于RPC协议. (2)NFS服务需要安装的软件 nfs-utils-* :包括基本的NFS命令与监控程序 rpcbind-* :支持安全NFS RP

Juniper SRX220防火墙CPU达到100%的故障解决办法

Juniper SRX220防火墙CPU达到100%的故障解决办法 一.背景 2016年5月21日设备巡检时发现广东机构的防火墙SRX220的CPU高达100%,但是设备还能管理,但是卡顿明显,业 务还没有中断. 二.解决办法 1.查看设备的告警信息,没有告警. 2.查看带宽监控查看设备端口流量,均不高. 3.查看设备系统进程. 4.查看设备的日志信息. 5.与厂商工程师沟通,初步判断是由于NTP服务的开启导致该端口被利用,发生在了NTP攻击. 6.关闭NTP配置,设备远程管理不再卡顿,但是CP

日志问题故障解决

grafana + zabbix 无法显示7天记录解决:http://net592.blog.51cto.com/2136730/1714458 elasticsearc 安装故障解决:http://lvnian.blog.51cto.com/7155281/1842551