设为首页收藏本站language 语言切换
查看: 1531|回复: 0
收起左侧

[原创] 小机上运行ORACLE需要注意的进程调度BUG

[复制链接]
发表于 2017-7-7 13:25:26 | 显示全部楼层 |阅读模式
前  言
小y这个名字,是我临时想的一个笔名,以后索性也就用这个名字和大家分享一些我们的技术人生故事吧。
小y给接下来即将分享的一系列故事,起了个名字,叫技术人生,以此来缅怀自己的Oracle DBA生涯.
今天要分享的是一个应用间歇性局部挂起的案例。


01.  问题描述

据客户反映,应用会间歇性出现异常,包括insert单条记录在内的操作长时间无法完成,按照客户的说法,数据库内可能有“死锁”现象,希望能够找到问题发生的根因,提出解决方案,以避免问题再次发生。
2015年12月23日,问题再次发生,客户再次联系到小y,小y通过远程方式进行了信息收集和故障诊断,最终定位了问题的根本原因。
环境介绍:
操作系统 HPUX IA64 B.11.31
数据库 ORACLE 10.2.0.5,单实例
2分析过程
>>> 2.1 异常时刻数据库出现异常等待



可以看到:


有2个会话在等待行锁(拿不到事务锁,需要一直等待)

另外有一个会话在等待“undo segment extension”


>>>> 2.2 梳理异常等待之间的关系

1)分析行锁等待的阻塞者


可以看到:
SID 285/290的两个会话都是被SID=315的会话阻塞了,他们在等待行锁,时间已经超过60000秒

2)查看阻塞者SID=315在做什么


可以看到:
SID=315的会话阻塞了其他两个会话,
他本身也处于一个资源的等待上,在等待“undo segment extension”,已经等了70384秒了!该等待事件没有阻塞者。
3)SID=315在执行的SQL语句

>>>> 2.3 什么是“undo segment extension”等待事件
“undo segment extension”即等待回滚段扩展完成。当执行增删改等操作时,数据库需要回滚段来存储前镜像,当回滚段空间不足时,则需要扩展。

具体来说,undo segment的扩展或者回收(extend / shrink)都是前台进程通过通知SMON后台进程来完成的。
发出下列命令查看undo的使用情况,
UNDO表有空有1个文件27750M,其中
目前活动的值有8M,未过undo retention的1892M,过了undo retention的有40M
未发现异常。



>>>> 2.4 收集数据库hanganalyze和systemstate信息

发出下列命令异常时候的hanganalyze和systemstate信息

SQL> oradebug setmypid
Statement processed.
SQL> oradebug hanganalyze 3
Hang Analysis in /oracle/admin/xxdb/udump/xxdb_ora_14136.trc
SQL>
SQL> oradebug dump systemstate 266
Statement processed.
SQL> oradebug tracefile_name
/oracle/admin/xxdb/udump/xxdb_ora_14136.trc
>>>> 2.5 问题在收集信息后自动解决

在发出上述命令收集相关信息后,再次检查,发现数据库异常等待居然已经自动解决掉了。

从原理和经验分析,这是因为oradebug 在收集systemstate dump时,其中会调用dbx等OS命令去做进程堆栈的打印,此时会将进行wakeup(唤醒)。

如下所示



>>>> 2.6 获得SID:315会话的活动会话历史
可以看到,确实一直在等待undo segment extension

>>>> 2.7 分析systemstate dump定位问题根因

其中SID=315的会话在等待”undo segment extension”,该会话对应PROCESS 19
SSD当中的信息如下



之所以执行不下去,不是因为死锁,而是因为该会话即SID=315的会话,需要执行DML,
因此需要UNDO SEGMENT即回滚段来存储前镜像,但发现回滚段空间不足,需要通知SMON后台进程来完成扩展的请求,但是长时间没有获得回滚段扩展成功与否的返回消息。前台进程和SMON之间通过POST/WAIT进制来通讯。

由于操作系统HPUX调度的缺陷,具体来说是pw_wait系统调用(post/wait)存在缺陷,当SMON进程完成回滚段扩展后,消息返回时,前台进程SID=315并没有能被及时调度到CPU上继续处理后续工作,即体现出来就是等待在“undo segment extension“事件上等待,当我们人为使用ORADEBUG对SID 315收集信息并间接唤醒了该前台进程后,前台进行可以继续往下工作,这更加印证了SMON已经将消息已经返回给前台进程,只是由于操作系统调度进制的问题,未能即使将前台进程调度到CPU上,拿到UNDO扩展成功的消息

造成该故障的根本原因是操作系统调度机制的问题,该问题命中操作系统HPUX上的已知缺陷。

>>>> 3.2 建议
Solution: on 11.31 install PHKL_38397 or later equivalent.

请系统管理员为操作系统安装PHKL_38397补丁


您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-23 16:53 , Processed in 0.067875 second(s), 21 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表