某个用户做分析表的操作时进程被阻塞library cache lock引起阻塞的进程也就是普通的查询该表的语句 原因是有很多这个表相关的SQL在执行产生这方面的沖突分析的时候要修改相关的统计数据而统计数据对于SQL分析是有影响的如果一个SQL在执行过程中是不允许修改和表相关的一些信息的 如果系统hang住了可以使用oradebug做一个HANGANALYZE来分析 HANGANALYZE是系统级的分析属于轻量级分析不会对系统产生影响 例如做一个级的分析 做的方法分两部 在SQLPLUS里用SYS账号 oradebug setmypid oradebug hanganalyze 之后将会生成一个trace报告例如以下内容 ============== HANG ANALYSIS: ============== Open chains found: Chain : <sid/sess_srno/proc_ptr/ospid/wait_event> : <//xed//PX Deq: Join ACK> <//xedd//library cache pin> Chain : <sid/sess_srno/proc_ptr/ospid/wait_event> : <//xedb//No Wait> Chain : <sid/sess_srno/proc_ptr/ospid/wait_event> : <//xedc//No Wait> 说明 nodenum定义每个session的序列号 sidsession的sid sess_srnosession的Serial# ospidOS的进程ID statenode的状态 adjlist表示blocker node predecessor表示waiter node 示例中SID=的就是被HANG主的会话SID=就是阻塞者 Sid=的这个进程挂死了但是他持有了library cache pin所以阻塞了杀掉(OSPID=)就解决问题了 而后根据等待事件的信息具体原因具体分析 HANGANALYZE报告里的阻塞有可能是HANG住也有可能只是由于比较慢引起的所以在分析的时候可以做一个HANGANALYZE然后隔几分钟再做一次两次对比着看如果是比较慢引起的两次报告的情况会发生变化如果是HANG住了是不会变化的 |