新闻中心> 文章详情

南京Oracle认证培训学习之【干货分享】oracle会话阻塞排查

2016年04月05日

     随着Oracle的技术广泛应用于各行各业,学习Oracle技术的人越来越多。这篇文章主要是南京万和Oracle认证培训通过例子简要介绍了如何排查Oracle会话阻塞的情况,学习oracle的朋友可以参考下。

 

会话阻塞排查测试



另开一个会话


 


另开会话排错      南京万和Oracle认证培训


 

[Oracle@T9DB02 ~]$ awk -f ass109.awk /u01/app/oracle/diag/rdbms/bap/BAP_1/trace/BAP_1_ora_15119.trc

Starting Systemstate 1
................................................
Ass.Awk Version 1.0.9 - Processing /u01/app/oracle/diag/rdbms/bap/BAP_1/trace/BAP_1_ora_15119.trc

System State 1
~~~~~~~~~~~~~~~~
1:                                      
2:  0: waiting for 'pmon timer'         
3:  0: waiting for 'rdbms ipc message'  
4:  0: waiting for 'VKTM Logical Idle Wait' 
5:  0: waiting for 'rdbms ipc message'  
6:  0: waiting for 'DIAG idle wait'     
7:  0: waiting for 'rdbms ipc message'  
8:  0: waiting for 'PING'               
9:  0: waiting for 'rdbms ipc message'  
10: 0: waiting for 'DIAG idle wait'     
11: 0: waiting for 'rdbms ipc message'  
12: 0: waiting for 'ges remote message'[Latch sent-location:] 
13: 0: waiting for 'gcs remote message' 
14: 0: waiting for 'gcs remote message' 
15: 0: waiting for 'gcs remote message' 
16: 0: waiting for 'rdbms ipc message'  
17: 0: waiting for 'GCR sleep'          
18: 0: waiting for 'rdbms ipc message'  
19: 0: waiting for 'rdbms ipc message'  
20: 0: waiting for 'rdbms ipc message'  
21: 0: waiting for 'rdbms ipc message'  
22: 0: waiting for 'rdbms ipc message'  
23: 0: waiting for 'rdbms ipc message'  
24: 0: waiting for 'rdbms ipc message'  
25: 0: waiting for 'smon timer'         
26: 0: waiting for 'rdbms ipc message'  
27: 0: waiting for 'rdbms ipc message'  
28: 0: waiting for 'ASM background timer' 
29: 0: waiting for 'rdbms ipc message'  
30: 0: waiting for 'rdbms ipc message'  
31: 0: waiting for 'wait for unread message on broadcast channel' 
32: 0: waiting for 'Space Manager: slave idle wait' 
33: 0: waiting for 'rdbms ipc message'  
34: 0: waiting for 'rdbms ipc message'  
35: 0: waiting for 'SQL*Net message from client' 
36: 0: waiting for 'Streams AQ: qmn slave idle wait' 
37: 0: waiting for 'rdbms ipc message'  
38: 0: waiting for 'class slave wait'   
39: 0: waiting for 'wait for unread message on broadcast channel' 
40: 0: waiting for 'Streams AQ: qmn coordinator idle wait' 
41: 0: waiting for 'SQL*Net message from client' 
42: 0: waiting for 'SQL*Net message from client' 
43: 0: waiting for 'enq: TX - row lock contention'[Enqueue TX-0009000B-00001D87] 
44: 0: waiting for 'SQL*Net message from client' 
45:                                     
46: 6: waited for 'Streams AQ: waiting for time management or cleanup tasks' 
49: 0: waiting for 'SQL*Net message from client' 
50: 0: waiting for 'rdbms ipc message'  
Blockers
~~~~~~~~

Above is a list of all the processes. If they are waiting for a resource
then it will be given in square brackets. Below is a summary of the
waited upon resources, together with the holder of that resource.
Notes:
~~~~~
o A process id of '???' implies that the holder was not found in the
systemstate.

Resource Holder State
Latch sent-location:    ??? Blocker
Enqueue TX-0009000B-00001D87    35: 0: waiting for 'SQL*Net message from client'

Object Names
~~~~~~~~~~~~
Latch sent-location:                  last post sent-location: kji.h LINE:


Enqueue TX-0009000B-00001D87                                  

157156 Lines Processed.


通过以上发现 :PID=35的进程 阻塞了其他会话           南京万和Oracle认证培训
查询到sid=216  与我们开始做的环境一致 


 


另外的方法更简单

1)开一个session, select  * from v$mystat where rownum=1; 获取该会话的sid。


2)在这个session中试跑慢的sql。


3)开另外一个session。 select * from v$lock where sid=前面那个会话的sid。


等待锁资源的会话,在v$lock 中会显示为request字段等于6(6的意思是排他锁)。


那么就需要找到对应拥有着。记录下request=6的记录的id1、id2数值,在v$lock中以id1、id2等于记录的数值为查询条件查出其余记录,并在其余记录中看是否有lmode=6的(对应锁拥有者)。然后就可以顺藤摸瓜找出对应的锁拥有者的sid。 


接下来还有大神提供的方法:


我一直都用TOM的方法:

with vw_lock AS (SELECT * FROM v$lock)

select

a.sid,

'is blocking',

(select 'sid:'||s.sid||' object:'||do.object_name||' rowid:'||

    dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# )

    ||' sql_id:'||s.sql_id

   from v$session s, dba_objects do

    where s.sid=b.sid

    and s.ROW_WAIT_OBJ# = do.OBJECT_ID

) blockee,

b.sid,b.id1,b.id2

from vw_lock a, vw_lock b

where a.block = 1

and b.request > 0

and a.id1 = b.id1

and a.id2 = b.id2;


     以上文章主要是南京Oracle认证培训对Oracle会话阻塞的排查介绍 ,希望大家能有所收获。想和兴趣相投的朋友们一起交流吗?那就来江苏万和计算机培训中心吧。而江苏万和作为南京专业的Oracle认证培训中心,也是Oracle等众多厂商的授权培训、考试机构,欢迎广大有志于此行业发展的学员们加入。


上一篇下一篇
按时发顺丰

技术交流群

Java大数据交流群560819979    加入
Python技术交流群595083299    加入
Oracle技术交流群595119011    加入
Web前端技术交流群604697610    加入
Huawei技术交流群482919361    加入
Redhat技术交流群587875348    加入
UI设计技术交流群511649801    加入
Cisco技术交流群596886705    加入
IT运维技术交流群605888381    加入