ITPub博客

首页 > 数据库 > Oracle > 使用oracle 10704 event分析获取锁lock及死锁deadlock系列九

使用oracle 10704 event分析获取锁lock及死锁deadlock系列九

原创 Oracle 作者:wisdomone1 时间:2015-10-30 19:03:31 1 删除 编辑

结论

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博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-1819341/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12689917