`
wuhuizhong
  • 浏览: 684343 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

了解systemstate dump

 
阅读更多

当数据库出现严重的性能问题或者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,那么占用的空间比其他级别大很多)。

分享到:
评论

相关推荐

    Oracle Systemstate dump analytic tool: ASS.AWK V1.09

    # By default, 'ass' attempts to dump as much information as possible and # assumes that the output is to be printed to screen. This means that 'ass' # runs in its slowest mode. Ass can be changed/...

    Oracle常用dump命令介绍

    - **`ALTER SESSION SET EVENTS 'immediate trace name systemstate level n'`** ##### 10\. Error State **Error State** 信息记录了错误栈信息: - **`ALTER SESSION SET EVENTS 'immediate trace name error...

    数据库项目组日常运维及应急故障处理手册.docx

    常规处理包括分析慢SQL的执行计划、优化SQL,或者使用hanganalyze和systemstate dump来诊断和解决问题。 6. **部分业务模块慢**: 对于部分业务模块运行慢的情况,需要深入分析运行的SQL语句,查看是否是新的SQL...

    Oracle常用dump命令,记录一下备查。

    ALTER SESSION SET EVENTS ‘immediate trace name systemstate level n'; 该命令可以dump出System State的信息。 10. Error State Dump ALTER SESSION SET EVENTS ‘immediate trace name errorstack level n'; ...

    Oracle ass.awk工具

    ass.awk工具用在数据库hang住时分析收集到的systemstate...这个是目前的最新版本,ass.awk 脚本可以帮助我们分析和格式化system state dump。 LTOM的MOS说明: LTOM - TheOn-Board Monitor User Guide [ID 352363.1]

    地震前兆Oracle数据库UNDO表空间持续增长修复.pdf

    使用systemstate dump工具观察SMON尝试写入数据到该表,怀疑表的索引存在错误。 在锁定问题定位后,尝试通过设置事件12500暂时阻止SMON更新此表,然后分析并尝试重建索引,但由于表被锁定,重建失败。因此,决定...

    到底能拿多少薪水 ORACLE工程师技能评估表

    - 通过oradebug收集systemstate dump/hanganalyze/processstate/errorstack/short_stack的方法。 - 收集10046、10053事件以及gather_plan_statistics信息的方法。 - 常见等待事件的分析和处理。 - 常见错误的...

    Oracle DBA日常运维及应急故障处理手册

    在处理这类问题时,建议先进行系统状态转储(systemstate dump),并多次执行3级hang analyze来定位引起问题的会话。 总之,Oracle数据库管理员需要熟练掌握各种运维工具和诊断技术,才能有效地处理各种故障,保证...

    一分钟查一个案例带你看看Oracle数据库到底有多牛逼性能难题.docx

    为了应对这种情况,制定应急预案是必要的,包括在问题发生时及时收集systemstate dump和其他诊断数据,以便在事后进行详细的故障分析。 总的来说,Oracle数据库的hangAnalyze功能在识别和解决性能问题方面表现出色...

    数据库日常运维及应急故障处理手册

    常规处理方法则需要分析alert日志,执行hanganalyze命令多次以查找导致hang住的会话,并通过systemstate dump获取数据库当前状态的详细信息。 对于数据误删除的问题,可以尝试使用Oracle 10g及以上版本的闪回特性...

    oracle系统状态trace文件分析器

      2.event = '604 trace name processstate,level 10'(INIT.ORA entry) 3.oradebug setospid 进程ID oradebug dump processstate 10; &lt;br&gt;系统状态转储可以用以下两种办法: system state dumps:...

    oracle ass.awk工具

    SQL&gt; oradebug dump systemstate 266 Statement processed. SQL&gt; oradebug tracefile_name /oracle/ora10g/admin/jscn/udump/jscn1_ora_7755.trc SQL&gt; exit Disconnected from Oracle Database 10g Enterprise ...

Global site tag (gtag.js) - Google Analytics