systemstate dump是什么意思

89次阅读
没有评论

共计 2868 个字符,预计需要花费 8 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关 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,那么占用的空间比其他级别大很多)。

上述就是丸趣 TV 小编为大家分享的 systemstate dump 是什么意思了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计2868字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)