1) 10046論斷事件
設置方法:
全局設置:初始參數文件中設置 event="10046 trace name context forever,level 12"
本地session設置:alter session set events '10046 trace name context forever, level 8'
其它session設置:通過DBMS_SYSTEM.SET_EV系統包實現,需要通過v$session得到sid,serial#
這裡我使用的是本地session設置:
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4';
select object_name from maggie.obj where object_id=:V1;
運行,為變量V1賦值28221,運行完成
然後關閉踉蹌事件alter session set events '10046 trace name context off';
在user_dump_file參數指定的目錄下找到生成的udump文件,找到以下結果:
........
*** SESSION ID:(14.27652) 2010-02-11 15:46:33.000
APPNAME mod='TOAD 9.7.2.5' mh=1219114848 act='' ah=4029777240
=====================
PARSING IN CURSOR #3 len=69 dep=0 uid=5 ct=42 lid=5 tim=1039369128939 hv=2562935477 ad='11a9a36c'
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4'
END OF STMT
EXEC #3:c=0,e=105,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1039369067384
=====================
PARSING IN CURSOR #3 len=55 dep=0 uid=5 ct=3 lid=5 tim=1039372642475 hv=1692422788 ad='1193e4d8'
select object_name from maggie.obj where object_id=:V1
END OF STMT
PARSE #3:c=0,e=176,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1039372642463
BINDS #3:
bind 0: dty=1 mxl=4000(4000) mal=00 scl=00 pre=00 acflg=01 oacfl2=10 size=4000 ffset=0
bfp=04e9251c bln=4000 avl=05 flg=05
value="28221"
EXEC #3:c=15625,e=15374,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1039372676465
FETCH #3:c=0,e=58,p=0,cr=3,cu=0,mis=0,r=1,dep=0,og=4,tim=1039372680531
FETCH #3:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1039372685688
我們可以看到V1變量的值為28221
補充:10046事件可以设置以下四个级别,如果要獲取綁定變量的值,至少要設置level 4
1 - 標準的SQL_TRACE功能,等價於sql_trace
4 - Level 1 加上綁定值(bind values)
8 - Level 1 + 等待事件
12 - Level 1 + Level 4 + Level 8
2) 10G裡新增的VIEW:V$SQL_BIND_CAPTURE
運行SQL語句
SELECT next_station, wip_d_sn_master.ROWID
FROM wip_d_sn_master
WHERE (serial_number = :V00001 OR carton_no = :V00002) AND ROWNUM = 1;
輸入變量值CK001L296J021Y,CMI0461000000140000027
在v$sql中找到剛剛運行的這個SQL的hash_value:
select sql_id, sql_text, bind_data,HASH_VALUE from v$sql
where sql_text Like 'SELECT next_station, wip_d_sn_master.ROWID%';
得到的值為476601873,代入v$sql_bind_capture中查找出綁定變量的值
SELECT hash_value,sql_id,NAME,POSITION,DATATYPE_STRING,LAST_CAPTURED,value_string FROM v$sql_bind_capture
WHERE hash_value = 476601873
HASH_VALUE SQL_ID NAME POSITION DATATYPE_STRING LAST_CAPTURED VALUE_STRING
476601873 77y45qnf6hrhj :V00001 1 VARCHAR2(4000) 2010-2-11 0:55:25 CK001L296J021Y
476601873 77y45qnf6hrhj :V00002 2 VARCHAR2(4000) 2010-2-11 0:55:25 CMI0461000000140000027
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-629544/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-629544/
本文介绍了如何通过设置SQL性能诊断事件10046来捕获SQL执行过程中的详细信息,并展示了如何利用V$SQL_BIND_CAPTURE视图获取绑定变量的值,以进行深入的SQL性能分析。
1547

被折叠的 条评论
为什么被折叠?



