【转】系统Hang住时用oradebug分析的方法

某个用户做分析表的操作时,进程被阻塞,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 : <sid/sess_srno/proc_ptr/ospid/wait_event> :

  <48/29750/0x3ed60060/7856/PX Deq: Join ACK>

  -- <141/31823/0x3ed5d680/2291/library cache pin>

  Chain 2 : <sid/sess_srno/proc_ptr/ospid/wait_event> :

  <76/16377/0x3ed554b0/6507/No Wait>

  Chain 3 : <sid/sess_srno/proc_ptr/ospid/wait_event> :

  <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住了,是不会变化的。

本文转自:http://oracle.chinaitlab.com/exploiture/799651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
oradebug 是 Oracle 数据库提供的一个强大的调试工具,可以对数据库实例进行各种诊断和调试,如进程状态、锁定情况、性能评估等。oradebug 的使用需要具备一定的技术能力和经验,以下是 oradebug 的一些常用用法: 1. 启动 oradebugSQLPLUS 中连接到数据库实例后,使用以下命令启动 oradebug: ```sql SQL> oradebug setmypid; SQL> oradebug unlimit; SQL> oradebug dump systemstate 10; ``` 其中,setmypid 命令用于设置当前 SQLPLUS 会话的进程 ID,unlimit 命令用于取消 oradebug 的输出限制,dump systemstate 10 命令用于生成一个包含当前系统状态的跟踪文件。 2. 暂停和继续进程 使用以下命令可以暂停和继续指定进程: ```sql SQL> oradebug pause; SQL> oradebug unpause; ``` 3. 检查当前进程状态 使用以下命令可以检查当前进程的状态: ```sql SQL> oradebug peek; ``` 4. 跟踪 SQL 语句执行情况 使用以下命令可以跟踪指定 SQL 语句的执行情况: ```sql SQL> oradebug sqltrace; SQL> oradebug tracefile_name; ``` 其中,sqltrace 命令用于开启 SQL 跟踪,tracefile_name 命令用于查看跟踪文件的路径和名称。 5. 检查锁定情况 使用以下命令可以检查当前数据库的锁定情况: ```sql SQL> oradebug dump lock; ``` 6. 检查 SGA 内存使用情况 使用以下命令可以检查当前数据库实例的 SGA 内存使用情况: ```sql SQL> oradebug dump sgastat; ``` 以上是 oradebug 的一些常用用法,可以帮助 DBA 在诊断和调试数据库时更加高效和准确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值