联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
前两篇分别大概的介绍了Systemstates分析会话阻塞—锁表和使用ass109.awk分析systemstate,这篇也大概的学习下hanganalyze.
模拟阻塞会话
--会话1 SQL> select * from v$version; BANNER ------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production PL/SQL Release 11.2.0.3.0 - Production CORE 11.2.0.3.0 Production TNS for Linux: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Production SQL> select * from t_xifenfei; ID NAME ---------- ---------------------------------------- 1 xifenfei 2 www.xifenfei SQL> delete from t_xifenfei where id=2; 1 row deleted. --会话2 SQL> delete from t_xifenfei where id=2; --hang住
做hanganalyze
--sys登录 SQL> ORADEBUG setmypid Statement processed. SQL> oradebug unlimit; Statement processed. SQL> oradebug hanganalyze 3 Hang Analysis in /u01/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_13719.trc
分析hanganalyze 文件
--HANG ANALYSIS基本信息 =============================================================================== HANG ANALYSIS: instances (db_name.oracle_sid): ora11g.ora11g oradebug_node_dump_level: 3 analysis initiated by oradebug os thread scheduling delay history: (sampling every 1.000000 secs) 0.000000 secs at [ 15:53:16 ] NOTE: scheduling delay has not been sampled for 0.356486 secs 0.000000 secs from [ 15:53:12 - 15:53:17 ], 5 sec avg 0.000000 secs from [ 15:52:17 - 15:53:17 ], 1 min avg 0.000000 secs from [ 15:48:17 - 15:53:17 ], 5 min avg =============================================================================== Chains most likely to have caused the hang: [a] Chain 1 Signature: 'SQL*Net message from client'<='enq: TX - row lock contention' Chain 1 Signature Hash: 0x38c48850 =============================================================================== Non-intersecting chains: ------------------------------------------------------------------------------- Chain 1: ------------------------------------------------------------------------------- --被阻塞会话信息 Oracle session identified by: { instance: 1 (ora11g.ora11g) os id: 13634 process id: 21, oracle@xifenfei (TNS V1-V3) session id: 143 session serial #: 281 } --等待信息 is waiting for 'enq: TX - row lock contention' with wait info: { p1: 'name|mode'=0x54580006 --54580006 is split into ASCII 54 + ASCII 58 (TX) + Mode 0006 (X) ... 在等待TX mode=6 p2: 'usn<<16 | slot'=0x20010 p3: 'sequence'=0x356 time in wait: 1 min 56 sec timeout after: never wait id: 24 blocking: 0 sessions current sql: delete from t_xifenfei where id=2 short stack: --省略 wait history: * time between current wait and wait #1: 0.001471 sec 1. event: 'SQL*Net message from client' time waited: 10.776765 sec wait id: 23 p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 * time between wait #1 and #2: 0.000001 sec 2. event: 'SQL*Net message to client' time waited: 0.000001 sec wait id: 22 p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 * time between wait #2 and #3: 0.000028 sec 3. event: 'SQL*Net message from client' time waited: 0.000032 sec wait id: 21 p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 } and is blocked by => Oracle session identified by: --阻塞会话信息 { instance: 1 (ora11g.ora11g) os id: 13546 process id: 20, oracle@xifenfei (TNS V1-V3) session id: 15 session serial #: 189 } --该会话处于空闲状态 which is waiting for 'SQL*Net message from client' with wait info: { p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 time in wait: 2 min 26 sec timeout after: never wait id: 29 blocking: 1 session current sql: <none> short stack: --省略 wait history: * time between current wait and wait #1: 0.000019 sec 1. event: 'SQL*Net message to client' time waited: 0.000007 sec wait id: 28 p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 * time between wait #1 and #2: 0.049656 sec 2. event: 'SQL*Net message from client' time waited: 9.759067 sec wait id: 27 p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 * time between wait #2 and #3: 0.000216 sec 3. event: 'SQL*Net message to client' time waited: 0.000002 sec wait id: 26 p1: 'driver id'=0x62657100 p2: '#bytes'=0x1 } Chain 1 Signature: 'SQL*Net message from client'<='enq: TX - row lock contention' Chain 1 Signature Hash: 0x38c48850 ------------------------------------------------------------------------------- =============================================================================== 通过上述分析:大概可以得出sid=143因为请求enq: TX - row lock contention(TX mode=6)被sid=15阻塞
查询视图验证
SQL> select sid,event from v$session where wait_class#<>6; SID EVENT ---------- ------------------------------ 20 SQL*Net message to client 143 enq: TX - row lock contention SQL> select * from v$lock where type in('TX','TM'); ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK -------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ---------- 352F8BEC 352F8C18 143 TX 131088 854 0 6 1862 0 B6B9C7A8 B6B9C7D8 15 TM 75928 0 3 0 1892 0 B6B9C7A8 B6B9C7D8 143 TM 75928 0 3 0 1862 0 343C0E54 343C0E94 15 TX 131088 854 6 0 1892 1 --查询结果sid=15的会话持有TX MODE=6阻塞sid=143的TX MODE=6的请求,和HANG ANALYSIS分析基本一致
参考文档:USING AND READING HANGANALYZE或者[ID 215858.1]