使用oracle 10704 event分析獲取鎖lock及死鎖deadlock系列九

wisdomone1發表於2015-10-30

結論

1,EVENT 10704獲取會話獲取鎖的詳細資訊
2,產生的trace包括did資訊,其分為3部分
3,DID分為
   資料庫例項編號
   ORACLE程式號(須由16進位制轉化為10進位制)
   ORACLE會話對應的serial#(同上要轉化)
4,產生的TRACE檔案內容如下:
*** 2015-10-30 03:49:32.791
ksqgtl *** CU-cf12e248-00000000 mode=6 flags=0x10010 timeout=300 ***  ---重點關注,這裡內容沒有理解是何含義
ksqgtl: no transaction
ksqgtl: use existing ksusetxn DID
ksqgtl:
        ksqlkdid: 0001-0083-00002D97 --重點關注


*** 2015-10-30 03:49:32.807
*** ksudidTrace: ksqgtl
        ksusesdi:   0000-0000-00000000 
        ksusetxn:   0001-0083-00002D97 --重點關注
ksqgtl: RETURNS 0 --重點關注,表明獲取鎖成功




5,用10704便於深入分析鎖的獲取以及死鎖情況,可以診斷死鎖相關的問題   


引起新的問題

1,對於10704 event理解還僅是一個初步,還要進行大量測試,理解及閱讀相關TRACE檔案






測試



SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production


SQL> show user
USER is "SCOTT"


SQL> create table t_parselock(a int);


Table created.


SQL> select  pid,spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));


       PID SPID
---------- ------------------------------------------------
       155 20585


SQL> select count(*) from t_parselock;


no rows selected


SQL> oradebug event 10704 trace  name context forever, level 12
Statement processed


SQL> oradebug event 10704 trace  name context off
Statement processed.
SQL> oradebug tracefile_name
/oracle/diag/rdbms/guowang/guowang/trace/guowang_ora_20585.trc


trace檔案的內容,請多注意我標記的重點關注對應的記錄
*** 2015-10-30 03:49:32.791
ksqgtl *** CU-cf12e248-00000000 mode=6 flags=0x10010 timeout=300 ***  ---重點關注
ksqgtl: no transaction
ksqgtl: use existing ksusetxn DID
ksqgtl:
        ksqlkdid: 0001-0083-00002D97 --重點關注


*** 2015-10-30 03:49:32.807
*** ksudidTrace: ksqgtl
        ksusesdi:   0000-0000-00000000 
        ksusetxn:   0001-0083-00002D97 --重點關注
ksqgtl: RETURNS 0 --重點關注


*** 2015-10-30 03:49:33.009
ksqrcl: CU,cf12e248,0
ksqrcl: returns 0


但是我們還是不知這些記錄到底含義是什麼,換個思路,先查下v$sqlareq的內容,或許可以發現一些線索


did的構成
        ksqlkdid: 0001-0083-00002D97 --重點關注


0001即例項編號 


83即v$process.pid,且83是16進位制,要轉換為10進位制        
SQL> select to_number('83','xxxxxxxx') from dual;


TO_NUMBER('83','XXXXXXXX')
--------------------------
                       131






SQL> select addr,spid,pid,pname from v$process where pid=131;


ADDR             SPID                                                    PID PNAME
---------------- ------------------------------------------------ ---------- ----------
00000000DD622C80 10493                                                   131




SQL> host ps -ef|grep 10493
oracle   10493 10480  0 03:48 ?        00:00:00 oracleguowang (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))


SQL> select sid,serial#,sql_id from v$session where paddr='00000000DD622C80';


       SID    SERIAL# SQL_ID
---------- ---------- --------------------------
       241      11750 8mynvfkwm3k60


SQL> select sql_text,sql_id,address,hash_value,invalidations,object_status from v$sqlarea where sql_id='8mynvfkwm3k60';


SQL_TEXT                       SQL_ID                     ADDRESS          HASH_VALUE INVALIDATIONS OBJECT_STA
------------------------------ -------------------------- ---------------- ---------- ------------- ----------
select sid,serial#,sql_id from 8mynvfkwm3k60              00000000DE4D8E48 3107047616             0 VALID
 v$session where paddr='000000
00DD622C80'




SQL> select sid,serial#,sql_id,prev_sql_id from v$session where paddr='00000000DD622C80';


       SID    SERIAL# SQL_ID                     PREV_SQL_ID
---------- ---------- -------------------------- --------------------------
       241      11750 ccgtgra1jsjy2              daj6mz9skm3rw




SQL> select to_number('2D97','xxxxxxxx') from dual;


TO_NUMBER('2D97','XXXXXXXX')
----------------------------
                       11671




可見DID的第三部分相當於V$SESSION的SERIAL#


個人簡介:


8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
   
   服務過的客戶:
          中國電信
          中國移動
          中國聯通
          中國電通
          國家電網
          四川達州商業銀行
          湖南老百姓大藥房
          山西省公安廳
          中國郵政
          北京302醫院     
          河北廊坊新奧集團公司
  
 專案經驗:
           中國電信3G專案AAA系統資料庫部署及最佳化
           中國聯通CRM資料庫效能最佳化
           中國移動10086電商平臺資料庫部署及最佳化
           湖南老百姓大藥房ERR資料庫sql最佳化專案
           四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
           四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
           北京高鐵訊號監控系統RAC資料庫部署及最佳化
           河南宇通客車資料庫效能最佳化
           中國電信電商平臺核心採購模組表模型設計及最佳化
           中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
           北京302醫院資料庫遷移實施
           河北廊坊新奧data guard部署及最佳化
           山西公安廳身份證審計資料庫系統故障評估
         
 聯絡方式:
          手機:18201115468
          qq   :   305076427
          qq微博: wisdomone1
          新浪微博:wisdomone9
          qq群:275813900    
          itpub部落格名稱:wisdomone1    http://blog.itpub.net/9240380/




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1819341/,如需轉載,請註明出處,否則將追究法律責任。

相關文章