暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

event事件的花样玩法

原创 _ 云和恩墨 2023-02-28
1832

无意中看到Tanel Poder大佬的文章What Caused This Wait Event: Using Oracle’s wait_event[] tracing,原来events事件还可以这么玩,挺有意思。测试一下。

一、等待事件中附加操作

SQL> ALTER SESSION SET EVENTS 'wait_event["log file sync"] crash()';

Session altered.

SQL> create table t as select * from dba_objects;
ERROR:
ORA-03113: end-of-file on communication channel
Process ID: 21598
Session ID: 19 Serial number: 32872

二、等待事件中追踪call stack

SQL> alter session set events '10046 trace name context forever,level 12';

Session altered.

SQL> ALTER SESSION SET EVENTS 'wait_event["db file sequential read"] trace("stack is: %\n", shortstack())';

Session altered.

SQL> select count(*) from t;

  COUNT(*)
----------
     72398

SQL> alter session set events '10046 trace name context off';

Session altered.

tarce日志

stack is: ksfd_io<-ksfdread<-kcfrbd1<-kcbzib<-kcbgtcr<-ktrget2<-kdst_fetch0<-kdstf000100100001000kmP<-kdsttgr<-qertbFetch<-qerstFetch<-qergsFetch<-qerstFetch<-opifch2<-opiall0<-opikpr<-opiodr<-rpidrus<-skgmstack<-rpidru<-rpiswu2<-kprball<-kkedsamp<-kkedsSel<-kkecdn<
WAIT #139961280769560: nam='db file sequential read' ela= 79 file#=1 block#=115628 blocks=1 obj#=73254 tim=13956740704
stack is: ksfd_io<-ksfdread<-kcfrbd1<-kcbzib<-kcbgtcr<-ktrget2<-kdst_fetch0<-kdstf000100100001000kmP<-kdsttgr<-qertbFetch<-qerstFetch<-qergsFetch<-qerstFetch<-opifch2<-opiall0<-opikpr<-opiodr<-rpidrus<-skgmstack<-rpidru<-rpiswu2<-kprball<-kkedsamp<-kkedsSel<-kkecdn<
WAIT #139961280769560: nam='db file scattered read' ela= 67 file#=1 block#=115642 blocks=6 obj#=73254 tim=13956818796
WAIT #139961280769560: nam='db file scattered read' ela= 22 file#=1 block#=115747 blocks=8 obj#=73254 tim=13956819916
WAIT #139961280769560: nam='db file scattered read' ela= 18 file#=1 block#=115758 blocks=8 obj#=73254 tim=13956821310
WAIT #139961280769560: nam='db file scattered read' ela= 18 file#=1 block#=115794 blocks=8 obj#=73254 tim=13956822505
WAIT #139961280769560: nam='db file sequential read' ela= 70 file#=1 block#=115816 blocks=1 obj#=73254 tim=13956838142
stack is: ksfd_io<-ksfdread<-kcfrbd1<-kcbzib<-kcbgtcr<-ktrget2<-kdst_fetch0<-kdstf000100100001000kmP<-kdsttgr<-qertbFetch<-qerstFetch<-qergsFetch<-qerstFetch<-opifch2<-opiall0<-opikpr<-opiodr<-rpidrus<-skgmstack<-rpidru<-rpiswu2<-kprball<-kkedsamp<-kkedsSel<-kkecdn<
WAIT #139961280769560: nam='db file scattered read' ela= 31 file#=1 block#=115845 blocks=8 obj#=73254 tim=13956916138
WAIT #139961280769560: nam='db file scattered read' ela= 18 file#=1 block#=115865 blocks=8 obj#=73254 tim=13956917385

追踪除了调用堆栈

三、等待事件转储

SQL> ALTER SESSION SET EVENTS 'wait_event["PL/SQL lock timer"] errorstack(1)';

Session altered.

SQL> alter session set events '10046 trace name context forever,level 12';

Session altered.

SQL> exec p;

PL/SQL procedure successfully completed.

SQL> alter session set events '10046 trace name context off';

Session altered.

tarce 日志

WAIT #139912614064928: nam='PL/SQL lock timer' ela= 1046843 duration=0 p2=0 p3=0 obj#=-1 tim=14942985752

*** 2023-02-28T22:52:29.741112+08:00 (CDB$ROOT(1))
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=1, mask=0x0)
----- Error Stack Dump -----
<error barrier> at 0x7fff2bdf7160 placed dbkda.c@296
----- Current SQL Statement for this session (sql_id=0g33y61cdq54y) -----
BEGIN p; END;
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x6faf9780       215  package body SYS.DBMS_LOCK.SLEEP
0x70de76f8         4  procedure SYS.P
0x69723430         1  anonymous block

----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst1()+95         call     kgdsdst()            7FFF2BDF65C0 000000002
                                                   7FFF2BDF08F0 ? 7FFF2BDF0A08 ?
                                                   000000000 000000082 ?
ksedst()+58          call     ksedst1()            000000000 000000001
                                                   7FFF2BDF08F0 ? 7FFF2BDF0A08 ?
                                                   000000000 ? 000000082 ?
dbkedDefDump()+2308  call     ksedst()             000000000 000000001 ?
0                                                  7FFF2BDF08F0 ? 7FFF2BDF0A08 ?
                                                   000000000 ? 000000082 ?
ksedmp()+577         call     dbkedDefDump()       000000001 000000000
                                                   7FFF2BDF08F0 ? 7FFF2BDF0A08 ?
                                                   000000000 ? 000000082 ?
dbkdaKsdActDriver()  call     ksedmp()             000000001 000000000 ?
+2484                                              7FFF2BDF08F0 ? 7FFF2BDF0A08 ?

四、跟踪所有等待事件

SQL> ALTER SESSION SET EVENTS 'wait_event[all] trace(''event="%" ela=% p1=% p2=% p3=%\n'',evargs(5), evargn(1), evargn(2), evargn(3), evargn(4))';

Session altered.

SQL> alter session set events '10046 trace name context forever,level 12';

Session altered.

SQL> select count(1) from t;

  COUNT(1)
----------
     72398

SQL> alter session set events '10046 trace name context off';

Session altered.

trace日志

event="Disk file operations I/O" ela=39 p1=8 p2=0 p3=8
event="SQL*Net message to client" ela=2 p1=1650815232 p2=1 p3=0

*** 2023-02-28T22:56:38.932973+08:00 (CDB$ROOT(1))
event="SQL*Net message from client" ela=31742740 p1=1650815232 p2=1 p3=0
event="PGA memory operation" ela=31 p1=65536 p2=2 p3=0
WAIT #140025824823600: nam='Disk file operations I/O' ela= 30 FileOperation=8 fileno=0 filetype=8 obj#=-1 tim=15192178573
event="Disk file operations I/O" ela=30 p1=8 p2=0 p3=8
WAIT #140025824823600: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=15192178813
event="SQL*Net message to client" ela=2 p1=1650815232 p2=1 p3=0

*** 2023-02-28T22:56:51.837186+08:00 (CDB$ROOT(1))
WAIT #140025824823600: nam='SQL*Net message from client' ela= 12903261 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=15205082097
event="SQL*Net message from client" ela=12903261 p1=1650815232 p2=1 p3=0
最后修改时间:2023-03-02 10:23:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论