systemstate dump 介绍

systemstate dump 介绍

By Janezhang-Oracle on 十二月 13, 2012

当数据库出现严重的性能问题或者hang了的时候,我们非常需要通过systemstate dump来知道进程在做什么,在等待什么,谁是资源的持有者,谁阻塞了别人。在出现上述问题时,及时收集systemstate dump非常有助于问题原因的分析。

在一些情况下,数据库会自动生成systemstate dump, 比如出现了“WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK”。
        systemstate dump大部分时候需要手工生成,具体的命令为:

如果连接很多,比如几千个连接,那么生成dump可能需要几十分钟,而且会占用几百M磁盘空间)
1. 用sysdba登录到数据库上:
$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==当数据库已经很慢或者hang到无法连接

SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump systemstate 266;
等1~2分钟
SQL>oradebug dump systemstate 266;
等1~2分钟
SQL>oradebug dump systemstate 266;
SQL>oradebug tracefile_name;==>这是生成的文件名

2. 通常除了systemstate dump,最好同时生成hang analyze来直观地了解数据库进程间的等待关系。

$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==当数据库已经很慢或者hang到无法连接

SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump hanganalyze 3
等1~2分钟
SQL>oradebug dump hanganalyze 3
等1~2分钟
SQL>oradebug dump hanganalyze 3
SQL>oradebug tracefile_name;==>这是生成的文件名

对于RAC数据库,需要各个实例在同一时间的systemstate dump,那么登录到任意一个实例(无需在所有实例执行):

$sqlplus / as sysdba
或者
$sqlplus -prelim / as sysdba <==当数据库已经很慢或者hang到无法连接

SQL>oradebug setmypid
SQL>oradebug unlimit
SQL>oradebug -g all dump systemstate 266  <==-g all 表示针对所有实例生成dump
等1~2分钟
SQL>oradebug -g all dump systemstate 266
等1~2分钟
SQL>oradebug -g all dump systemstate 266

在RAC上生成hang analyze:
SQL>oradebug setmypid
SQL>oradebug unlimit
SQL>oradebug -g all hanganalyze 3
等1~2分钟
SQL>oradebug -g all hanganalyze 3
等1~2分钟
SQL>oradebug -g all hanganalyze 3

上面的命令执行后会在每个实例都生成systemstate dump,生成的信息放到了每个实例的backgroud_dump_dest下的diag trace文件中。

上面的这些命令执行三次是为了比较进程的变化情况,查看是真的hang了,还是很慢。

systemstate dump有多个级别:

2:     dump (不包括lock element)
10:   dump
11:   dump + global cache of RAC
256: short stack (函数堆栈)
258: 256+2   -->short stack +dump(不包括lock element)
266: 256+10 -->short stack+ dump
267: 256+11 -->short stack+ dump + global cache of RAC

level 11和 267会 dump global cache, 会生成较大的trace 文件,一般情况下不推荐。

一般情况下,如果进程不是太多,推荐用266,因为这样可以dump出来进程的函数堆栈,可以用来分析进程在执行什么操作。
但是生成short stack比较耗时,如果进程非常多,比如2000个进程,那么可能耗时30分钟以上。这种情况下,可以生成level 10 或者 level 258, level 258 比 level 10会多收集short short stack, 但比level 10少收集一些lock element data.

另外对于RAC系统,请关注Bug 11800959 - A SYSTEMSTATE dump with level >= 10 in RAC dumps huge BUSY GLOBAL CACHE ELEMENTS - can hang/crash instances (Doc ID 11800959.8)。这个Bug在11.2.0.3上被修复,对于<=11.2.0.2的RAC,当系统中的lock element 很多的时候,如果执行level 10、266或者 267的systemstate dump时,可能会导致数据库hang或者crash,这种情况下可以采用level 258。

下面是生成systemstate dump的测试,用来查看每个level占用的空间:

这个例子中有37个进程:

-rw-r----- 1 oracle oinstall    72721 Aug 31 21:50 rac10g2_ora_31092.trc==>256 (short stack, 每个进程2K)

-rw-r----- 1 oracle oinstall  2724863 Aug 31 21:52 rac10g2_ora_31654.trc==>10    (dump,每个进程72K )
-rw-r----- 1 oracle oinstall  2731935 Aug 31 21:53 rac10g2_ora_32214.trc==>266 (dump + short stack ,每个进程72K)

RAC:
-rw-r----- 1 oracle oinstall 55873057 Aug 31 21:49 rac10g2_ora_30658.trc ==>11   (dump+global cache,每个进程1.4M)
-rw-r----- 1 oracle oinstall 55879249 Aug 31 21:48 rac10g2_ora_28615.trc ==>267 (dump+global cache+short stack,每个进程1.4M)

所以,可以看出如果dump global cache(level 11和267,那么占用的空间比其他级别大很多)。

时间: 2024-08-15 07:14:36

systemstate dump 介绍的相关文章

oracle systemstate dump介绍

当数据库出现严重的性能问题或者hang了的时候,服务器端sqlplus也无法连接时,此时如果想获取数据库当前的状态信息,以便事后诊断,那么我们非常需要通过systemstate dump来知道进程在做什么,在等待什么,谁是资源的持有者,谁阻塞了别人.在出现上述问题时,及时收集systemstate dump非常有助于问题原因的分析.ORACLE 10g 开始,sqlplus提供了这么一个功能参数-prelim,在sqlplus无法连接的情况下,连接登录到数据库.下面关于这些知识点的一个总结 Th

Systemstate Dump分析经典案例(上)

前言 本期我们邀请中亦科技的另外一位Oracle专家老K来给大家分享systemstate dump分析的经典案例.后续我们还会有更多技术专家带来更多诚意分享. 老K作为一个长期在数据中心奋战的数据库工程师,看到小y前期的分享,有种跃跃欲试的感觉,也想把我日常遇到的一些有意思的案例拿出来分享讨论,希望我们都能从中获得些许收获,少走弯路.同时本文涉及到很多基础知识,又涉及看似枯燥的trace分析,但老K还是建议大家耐心看完本文. 精彩预告 如何分析cursor:pin S wait on X? 如

完整备份工具dump介绍

某些时刻你想要针对文件系统进行备份或者是储存的功能时,不能不谈到这个 dump 命令! 这玩意儿我们曾在前一章的 /etc/fstab 里面稍微谈过. 其实这个命令除了能够针对整个 filesystem 备份之外,也能够仅针对目录来备份喔! 底下就让我们来谈一谈这个命令的用法吧! dump 其实 dump 的功能颇强,他除了可以备份整个文件系统之外,还可以制定等级喔!什么意思啊! 假设你的 /home 是独立的一个文件系统,那你第一次进行过 dump 后,再进行第二次 dump 时, 你可以指定

Jvm dump介绍与使用(内存与线程)

很多情况下,都会出现dump这个字眼,java虚拟机jvm中也不例外,其中主要包括内存dump.线程dump. 当发现应用内存溢出或长时间使用内存很高的情况下,通过内存dump进行分析可找到原因. 当发现cpu使用率很高时,通过线程dump定位具体哪个线程在做哪个工作占用了过多的资源. 首先,内存dump是指通过jmap -dump <pid>输出的文件,而线程dump是指通过jstack <pid>输出的信息. 两个dump可以单独使用,也可以在特定场合下结合使用. 在linux

Java命令学习系列(零)——常见命令及Java Dump介绍

一.常用命令: 在JDK的bin目彔下,包含了java命令及其他实用工具. jps:查看本机的Java中进程信息. jstack:打印线程的栈信息,制作线程Dump. jmap:打印内存映射,制作堆Dump. jstat:性能监控工具. jhat:内存分析工具. jconsole:简易的可视化控制台. jvisualvm:功能强大的控制台. 二.认识Java Dump: 什么是Java Dump? Java虚拟机的运行时快照.将Java虚拟机运行时的状态和信息保存到文件. 线程Dump,包含所有

Systemstate Dump分析经典案例(下)

前言 接上一期:(上一期的阅读方法:关注"中亦安图"公众号后回复'007') 4.3.4 SSD中library cache lock的分析 接上一期: 分析到这步,前边看似毫无头绪的问题似乎理清了,大量cursor:pin S wait on X已经理清楚,所有的矛头走指向了sid 859 离真相只差一步了,我们只需要分析library cache lock的源头就能解释整个谜团了,前面老K已经提到了分析library cache lock等待事件的方法了,现在我们就来结合trace

性能分析之-- JAVA Thread Dump 分析综述

性能分析之-- JAVA Thread Dump 分析综述 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数. 1.2 T

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

ORACLE数据库的systemstat dump生成trace文件虽然比较简单,但是怎么从trace文件中浩如烟海的信息中提炼有用信息,并作出分析诊断是一件技术活,下面收集.整理如何分析解读systemstat dump产生的trace文件. 如果要人工去解读systemstat dump生成的trace文件,真是一件体力活,因为这些trace文件动不动就几百M甚至更大,它产生的跟踪文件包含了系统中所有进程的进程状态等信息.每个进程对应跟踪文件中的一段内容,反映该进程的状态信息,包括进程信息,

How to hanganalyze and systemstate dumps

Oracle support request hang analysis and system state dumps when rasing SR. One 10.1 or higher versions login as sqlplus -prelim / as sysdbaTo do a hanganalyze oradebug setmypid;oradebug unlimit;oradebug hanganalyze 3;Wait 60 – 90 seconds and run the