Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1118050
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2009-12-18 16:48:57

某个用户做分析表的操作时,进程被阻塞,library cache lock,引起阻塞的进程也就是普通的查询该表的语句。
原因是有很多这个表相关的SQL在执行,产生这方面的冲突,分析的时候要修改相关的统计数据,而统计数据对于SQL分析是有影响的,如果一个SQL在执行过程中,是不允许修改和表相关的一些信息的。
如果系统hang住了,可以使用oradebug做一个HANGANALYZE来分析。
HANGANALYZE是系统级的分析,属于轻量级分析,不会对系统产生影响。
例如做一个1级的分析:
做的方法分两部
在SQLPLUS里,用SYS账号
1、  oradebug setmypid
2、  oradebug hanganalyze 1
之后将会生成一个trace报告,例如以下内容。
==============
HANG ANALYSIS:
==============
Open chains found:
Chain 1 : :
    <48/29750/0x3ed60060/7856/PX Deq: Join ACK>
 -- <141/31823/0x3ed5d680/2291/library cache pin>
Chain 2 : :
    <76/16377/0x3ed554b0/6507/No Wait>
Chain 3 : :
<98/8617/0x3ed65c80/4550/No Wait>
说明:
nodenum:定义每个session的序列号
sid:session的sid
sess_srno:session的Serial#
ospid:OS的进程ID
state:node的状态
adjlist:表示blocker node
predecessor:表示waiter node

示例中,SID=141的就是被HANG主的会话,SID=48就是阻塞者。
Sid=48的这个进程挂死了,但是他持有了library cache pin,所以阻塞了141,杀掉48(OSPID=7856)就解决问题了。

而后根据等待事件的信息,具体原因具体分析。

HANGANALYZE报告里的阻塞有可能是HANG住,也有可能只是由于比较慢引起的,所以在分析的时候,可以做一个HANGANALYZE,然后隔几分钟再做一次,两次对比着看,如果是比较慢引起的,两次报告的情况会发生变化,如果是HANG住了,是不会变化的。

阅读(794) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~