什么是systemstate
一个systemstate是由在实例中调用生成systemstats时由每一个进程的进程状态组成.而每一个进程状态是由每一个进程所持有的当前对象所对应的详细对象状态信息组成.

生成systemstate的例子如下

  1. SQL> oradebug setmypid
  2. Statement processed.
  3. SQL> oradebug unlimit
  4. Statement processed.
  5. SQL> oradebug dump systemstate 267
  6. Statement processed.
  7. SQL> oradebug dump systemstate 267
  8. Statement processed.
  9. SQL> oradebug tracefile_name
  10. /oracle/admin/RLZY/udump/rlzy_ora_54657104.trc

如何浏览系统状态信息
首先需要做的就是判断大多数会话正在等待什么(或者在你知道一个会话被阻塞时它的进程号).所以现在要从PROCESS XX或者一个例如’latch free’标示开始浏览.然后就是找到第一个PORCESS XX或者’latch free’标识.如果你正使用PROCESS XX那么你需要找到这个进程正在等待什么

PROCESS XX waits for YYYYYYY
然后你需要做的是找到PROCESS XX会话正在等待什么会话资源.

PROCESS xx waits for YYYYYY
PROCESS YY holds YYYYYY
然后可以开始查找正在等待的资源和资源的持所者.最终你会找到一个最后等待CPU资源的一个进程或者你将会导航到一个你已经了解的进程.对于等待CPU的进程你将需要生成了一个errorstack来判断为什么它正被阻塞.

PROCESS XX waits for YYYYYYY
PROCESS YY holds YYYYYYY and waits for ZZZZZZZZ
PROCESS ZZ holds ZZZZZZZ … etc etc

常见的场景和相关的条目
1:enqueue 队列

  1. PROCESS 141
  2. ...
  3. waiting for 'enq: TX - row lock contention' blocking sess=0x39b3a5c90 seq=152 wait_time=0 seconds since wait
  4. started=796
  5. name|mode=54580006, usn< 54580006 is split into ASCII 54 + ASCII 58 (TX) + Mode 0006 (X) ...

为了找到对于这个队列的更详细信息可以简单地向下搜索'req':

  1. SO: 39ad80d60, type: 5, owner: 393cb85e0, flag: INIT/-/-/0x00
  2. (enqueue) TX-00020009-0001FA04 DID: 0001-0029-00000090
  3. lv: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 flag: 0x6
  4. res: 39aef20c8, req: X, prv: 39aef20e8, own: 39b383aa8, sess: 39b383aa8, proc: 39b7384f0

那么现在已经有了这个队列的名字是一个字符串(TX-00020009-0001FA04)使用它可以用来搜索持有者:

  1. (enqueue) TX-00020009-0001FA04 DID: 0001-002E-00000014
  2. lv: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 flag: 0x6
  3. res: 39aef20c8, mode: X, prv: 39aef20d8, own: 39b3a5c90, sess: 39b3a5c90, proc: 39b73ac78

可以看到持有的队列(mode:X)以一种不兼容的模式来执行X request(排他请求)

2:Rowcache locks 行缓存锁

  1. PROCESS 219:
  2. ...
  3. waiting for 'row cache lock' blocking sess=0x0 seq=2174 wait_time=0
  4. cache id=7, mode=0, request=3 *
  5. We do not hold it currently (mode=0), but want it in Shared (mode=3) ...
  6. --------------------------------------------------------------------------------
  7. SO: 7000000c6de7678, type: 48, owner: 7000000a6c97cf8, flag: INIT/-/-/0x00
  8. row cache enqueue: count=1 session=7000000a660b8b0 object=7000000eedc13a0, request=S*Here we see the request is Shared(S)
  9. savepoint=2148
  10. row cache parent object: address=7000000eedc13a0 cid=7(dc_users)*dc_users is the cache type indicated by 7
  11. hash=2a057ebe typ=9 transaction=7000000c42297a0 flags=00000002
  12. own=7000000eedc1480[7000000c6de8518,7000000c6de8518] wat=7000000eedc1490[7000000c6de7568,7000000c6deed98] mode=X *The holder has it in this mode
  13. status=VALID/-/-/-/-/-/-/-/-
  14. request=N release=TRUE flags=0

为了找到持有者可以搜索对象,持有模式(object,MODE)(比如object=7000000eedc13a0, mode=X)

  1. SO: 7000000c6de84e8, type: 48, owner: 7000000c42297a0, flag: INIT/-/-/0x00
  2. row cache enqueue: count=1 session=7000000a6702710 object=7000000eedc13a0, mode=X*This confirms the Mode we thought the holder had (X)
  3. savepoint=109
  4. row cache parent object: address=7000000eedc13a0 cid=7(dc_users)
  5. hash=2a057ebe typ=9 transaction=7000000c42297a0 flags=00000002
  6. own=7000000eedc1480[7000000c6de8518,7000000c6de8518] wat=7000000eedc1490[7000000c6de7568,7000000c6df1b08] mode=X
  7. status=VALID/-/-/-/-/-/-/-/-
  8. request=N release=TRUE flags=0
  9. instance lock id=QH 00000440 00000000
  10. set=0, complete=FALSE
  11. set=1, complete=FALSE
  12. set=2, complete=FALSE
  13. data=

3:Library Cache Pins (10G – Mutexes)

  1. PROCESS 116:
  2.  
  3. waiting for 'cursor: pin S wait on X' blocking sess=0x0 seq=58849 wait_time=0 seconds since wait started=0
  4. idn=535d1a6c, value=c1600000000, where|sleeps=5003f2428

为了找到更详细的信息使用idn=XXXXXX来进行搜索(比如:idn=535d1a6c)

  1. KGX Atomic Operation Log 7000002e5b9d160
  2. Mutex 7000002b8e92268(3094, 0) idn 535d1a6c oper GET_SHRD *We can see (a) That SID 3094 holds it (3094,0) and (b) we want it in Shared (GET_SHRD)
  3. Cursor Pin uid 2489 efd 0 whr 5 slp 58733
  4. opr=2 pso=70000028c47def0 flg=0
  5. pcs=7000002b8e92268 nxt=0 flg=34 cld=3 hd=70000030d6c6eb0 par=7000002eefe64d0
  6. ct=31 hsh=0 unp=0 unn=0 hvl=b825a4d0 nhv=1 ses=700000309b42600
  7. hep=7000002b8e922e8 flg=80 ld=1 ob=7000002de49f8a0 ptr=70000022cf39db8 fex=70000022cf390c8

为了找到持有者,搜索idn=XXXXXX oper直到找到一个持有者为止(不是使用GET_XXX)(比如: idn 535d1a6c oper)

  1. KGX Atomic Operation Log 7000002cd934270
  2. Mutex 7000002b8e92268(3094, 0) idn 535d1a6c oper EXCL *We can see SID 3094 holds in Exclusive (EXCL)
  3. Cursor Pin uid 3094 efd 0 whr 7 slp 0
  4. opr=3 pso=7000002a71c4180 flg=0
  5. pcs=7000002b8e92268 nxt=0 flg=34 cld=3 hd=70000030d6c6eb0 par=7000002eefe64d0
  6. ct=31 hsh=0 unp=0 unn=0 hvl=b825a4d0 nhv=1 ses=700000309b42600
  7. hep=7000002b8e922e8 flg=80 ld=1 ob=7000002de49f8a0 ptr=70000022cf39db8 fex=70000022cf390c8

4:Library Cache Pins (Pre 10G – non mutex)

  1. PROCESS 20:
  2.  
  3. waiting for 'library cache pin' blocking sess=0x0 seq=575 wait_time=0
  4. handle address=c00000006c0f8490, pin address=c0000000689b19a8, 10*mode+namespace=14

为了找到更详细的信息使用handle=XXXXXX来搜索(比如:handle=c00000006c0f8490)就会看到一个’request’行信息

  1. SO: c0000000689b19a8, type: 34, owner: c00000006cf85e80, flag: INIT/-/-/0x00
  2. LIBRARY OBJECT PIN: pin=c0000000689b19a8 handle=c00000006c0f8490 request=S lock=c00000006d00e218 *We can see we want it in Shared (S)
  3. user=c00000005eeafeb0 session=c00000005eeafeb0 count=0 mask=0000 savepoint=17 flags=[00]

然后为了找到持有者搜索’handle=XXXXXX mode’直到你找到一个以不兼容模式的所持有它的持有者为止(比如

  1. :handle=c00000006c0f8490 mode)SO: c00000006b1f4780, type: 34, owner: c0000000699758e8, flag: INIT/-/-/0x00
  2. LIBRARY OBJECT PIN: pin=c00000006b1f4780 handle=c00000006c0f8490 mode=X lock=c00000006b6c40a0 *We hold it in Exclusive (X)
  3. user=c00000005edf0f48 session=c00000005edf0f48 count=1 mask=0001 savepoint=49 flags=[00]

5:Library Cache Lock

  1. PROCESS 35:
  2.  
  3. waiting for 'library cache lock' blocking sess=0x0 seq=35844 wait_time=0 seconds since wait started=14615
  4. handle address=70000030de975a8, lock address=70000026947e190, 100*mode+namespace=12d

为了找到更多详细信息以handle=address格式来使用handle address来进行搜索(比如:handle=70000030de975a8)

  1. SO: 70000026947e190, type: 53, owner: 700000308d726f0, flag: INIT/-/-/0x00
  2. LIBRARY OBJECT LOCK: lock=70000026947e190 handle=70000030de975a8 request=X *We want it in Exclusive (X)
  3. call pin=0 session pin=0 hpc=0000 hlc=0000
  4. htl=70000026947e210[7000002b333ffe8,7000002b333ffe8] htb=7000002b333ffe8 ssga=7000002b333f2a0
  5. user=700000307a7ca68 session=700000307a7ca68 count=0 flags=[0000] savepoint=0x23e411
  6. LIBRARY OBJECT HANDLE: handle=70000030de975a8 mtx=70000030de976d8(0) cdp=0
  7. name=ACSELP.POLIZA *This is the object we are trying to lock

为了找到持有者搜索’handle=XXXXXXXXXX mode=’直到你找到一个持有者(不能是NULL)(比如: handle=70000030de975a8 mode=)

  1. SO: 700000288b03ae0, type: 53, owner: 7000002cc697468, flag: INIT/-/-/0x00
  2. LIBRARY OBJECT LOCK: lock=700000288b03ae0 handle=70000030de975a8 mode=S *We hold in in Shared (S)
  3. call pin=0 session pin=0 hpc=0000 hlc=0000
  4. htl=700000288b03b60[7000002a179a1a8,7000002b3800878] htb=7000002b3800878 ssga=7000002b37ffb30
  5. user=70000030fafab00 session=70000030fafab00 count=1 flags=[0000] savepoint=0x417
  6. LIBRARY OBJECT HANDLE: handle=70000030de975a8 mtx=70000030de976d8(0) cdp=0
  7. name=ACSELP.POLIZA *This confirms the object

6:Latch free

  1. PROCESS 8:
  2.  
  3. waiting for 'latch free' blocking sess=0x0 seq=4577 wait_time=0
  4. address=99ff60018, number=9d, tries=0 *9d is the latch# from v$latchname in HEX

如果查看顶级进程转储信息你就会看到正在等待的精确的闩锁甚至是它的持有者:

  1. waiting for 99ff60018 Child library cache level=5 child#=3
  2. Location from where latch is held: kglic: child
  3. Context saved from call: 26
  4. state=busy
  5. possible holder pid = 127 ospid=23086 *This tell us PROCESS 127 (ospid:23086) holds it
  6. wtr=99ff60018, next waiter 9993858b8

所以进程127持有它如果现在去查看进程127将会看到:

  1. holding 99ff60018 Child library cache level=5 child#=3
  2. Location from where latch is held: kglic: child
  3. Context saved from call: 26
  4. state=busy

如果想知道持有者引用的什么对象可以使用’handle=XXXXXXXXXX’来进行搜索直到你看到LIBRARY OBJECT HANDLE为止
(比如:handle=c00000006c0f8490)

  1. LIBRARY OBJECT HANDLE: handle=c00000006c0f8490
  2. name=SELECT USER FROM DUAL *This is the name of the handle
  3. hash=cd1ceca0 timestamp=11-23-2013 09:00:00
  4. namespace=CRSR flags=RON/TIM/PN0/SML/[12010000]*It is a CURSOR (CRSR).. but we can tell that by the

如何理解systemstate的更多相关文章

  1. 如何分析解读systemstat dump产生的trc文件

    ORACLE数据库的systemstat dump生成trace文件虽然比较简单,但是怎么从trace文件中浩如烟海的信息中提炼有用信息,并作出分析诊断是一件技术活,下面收集.整理如何分析解读syst ...

  2. 理解CSS视觉格式化

    前面的话   CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...

  3. 彻底理解AC多模式匹配算法

    (本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...

  4. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  5. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  6. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  7. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  8. ThreadLocal简单理解

    在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...

  9. JS核心系列:理解 new 的运行机制

    和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...

随机推荐

  1. [Raobin] Ext.net 页面由于CMB的store和对图像同时执行,所以不会触发非空验证 所以会在后台直接调Js去验证

    X.Call("valid", vm.ID_EDIT_FORM); x.Call("前台的js的方法名称"," 参数为集合");

  2. 【wuzhicms】apache 设置禁止访问某些文件或目录

    [apache配置禁止访问] 1. 禁止访问某些文件/目录 增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库: <Files ~ "\.inc$&qu ...

  3. vijosP1413 Valentine’s Present

    vijosP1413 Valentine’s Present 链接:https://vijos.org/p/1413 [思路] 组合公式. 由题目知:每个箱子中的蛋糕要么与箱子颜色相同,要么指向一个蛋 ...

  4. 使用Cross-validation (CV) 调整Extreme learning Machine (ELM) 最优参数的实现(matlab)

    ELM算法模型是最近几年得到广泛重视的模型,它不同于现在广为火热的DNN. ELM使用传统的三层神经网络,只包含一个隐含层,但又不同于传统的神经网络.ELM是一种简单易用.有效的单隐层前馈神经网络SL ...

  5. 整理收藏一份PHP高级工程师的笔试题

    整理了一份PHP高级工程师的笔试题,问题很全面.嗯,基本上这些题都答得不错,那么你应该可以胜任大部分互联网企业的PHP职位了.下面直接上题. 1. 基本知识点 HTTP协议中几个状态码的含义:503, ...

  6. Modules you should know in Python Libray

    前两天被问到常用的python lib和module有哪些?最常用的那几个,其他的一下子竟然回答不上.想想也是,一般情况下,遇到一个问题,在网上一搜,顺着线索找到可用的例子,然后基本没有怎么深究.结果 ...

  7. POJ 2728 Desert King

    Description David the Great has just become the king of a desert country. To win the respect of his ...

  8. Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)

    # 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...

  9. myeclipse断点调试

    (转) 作为开发者,掌握开发环境下的调试技巧十分有必要.去年就想把关于Eclipse断点调试总结下了.因为对时间的掌控程度仍需极大提高,结果拖到今年才写了此篇博文.关于java调试技术还有非常多.如J ...

  10. Tinder 心动效果---卡片式view左右滑动

    http://www.eoeandroid.com/thread-549316-1-1.html SlideCard.zip