db2 使用db2pd 进行监视和故障诊断

因为 db2pd 工具可从 DB2® 内存集合迅速返回即时信息,所以该工具可用于故障诊断。

该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息。因此,在 db2pd 收集信息时,有可能(并且预计)会检索到正在更改的信息;这样,数据可能不是十分准确。如果遇到正在更改的内存指针,可使用信号处理程序来防止 db2pd 异常终止。这可能会导致输出中出现诸如以下的消息:“正在更改的数据结构已强制终止命令”。虽然如此,该工具对于故障诊断却非常有用。在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。

如果要在出现特定 SQLCODE、ZRC 代码或 ECF 代码时捕获关于数据库管理系统的信息,那么可以使用 db2pdcfg -catch 命令完成此操作。捕获到错误时,将启动 db2cos(调出脚本)。db2cos 文件可以自动改变,以便运行解决问题所需的任何 db2pd 命令、操作系统命令或任何其他命令。在 UNIX® 和 Linux® 上,模板文件 db2cos 位于 sqllib/bin 中。在 Windows® 操作系统上,db2cos 位于 $DB2PATH\bin 目录中。

以下是使用 db2pd 快速故障诊断的一组示例。

场景 1:诊断锁定等待

使用 db2pd -db <database name> -locks -transactions -applications -dynamic 命令来获取下列结果:

锁定:
Address            TranHdl Lockname                   Type Mode Sts Owner Dur HldCnt Att    ReleaseFlg
0x07800000202E5238 3       00020002000000040000000052 Row  ..X  G   3     1   0      0x0000 0x40000000
0x07800000202E4668 2       00020002000000040000000052 Row  ..X  W*  2     1   0      0x0000 0x40000000

对于使用 -db 数据库名称选项指定的数据库,开头的结果会显示该数据库的锁定。您会发现 TranHdl 2 正在等待 TranHdl 3 挂起的锁定。

您会发现 TranHdl 2 与 AppHandl 11 相关联,而 TranHdl 3 与 AppHandl 12 相关联。

应用程序:
Address            AppHandl [nod-index] NumAgents CoorPid Status        C-AnchID C-StmtUID L-AnchID L-StmtUID Appid

0x07800000006879E0 12       [000-00012] 1         1073336 UOW-Waiting   0        0         17       1         *LOCAL.burford.060303225602
0x0780000000685E80 11       [000-00011] 1         1040570 UOW-Executing 17       1         94       1         *LOCAL.burford.060303225601

您会发现 AppHandl 12 最后运行动态语句 17, 1。ApplHandl 11 是当前正在运行的动态语句 17, 1,而最后运行的语句是 94, 1。

动态 SQL 语句:
Address            AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x07800000209FD800 17     1       1      1      2      2      update pdtest set c1 = 5
0x07800000209FCCC0 94     1       1      1      2      2      set lock mode to wait 1

您会发现,文本列显示与锁定超时相关联的 SQL 语句。

场景 2:使用 -wlocks 选项捕获所有正在等待的锁定

在下面的样本输出中,应用程序 1(AppHandl 47)正在执行插入操作,而应用程序 2(AppHandl 46)正在选择该表。

venus@boson:/home/venus =>db2pd -wlocks -db pdtest

数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:22

正在等待的锁定:
AppHandl [nod-index] TranHdl  Lockname                   Type    Mode Conv Sts CoorEDU    AppName  AuthID   AppID
47       [000-00047] 8        00020004000000000840000652 Row     ..X       G   5160       db2bp    VENUS    *LOCAL.venus.071207213730
46       [000-00046] 2        00020004000000000840000652 Row     .NS       W   5913       db2bp    VENUS    *LOCAL.venus.071207213658

场景 3:使用 -apinfo 选项捕获关于锁定所有者和锁定等待者的详细运行时信息

下面的样本输出是在与上面的场景 2 相同的条件下捕获的。

venus@boson:/home/venus =>db2pd -apinfo 47 -db pdtest

数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:30

应用程序:
  地址:                   0x0780000001676480
  AppHandl [nod-index]:   47       [000-00047]
  应用程序 PID :          876558
  应用程序节点名:         boson
  IP 地址:                不适用
  连接开始时间:           (1197063450)Fri Dec  7 16:37:30 2007
  客户机用户标识:          venus
  系统授权标识:            VENUS
  协调程序 EDU 标识:       5160
  协调程序分区:            0
  代理程序数:              1
  锁定超时值:              4294967294 秒
  锁定升级:                否
  工作负载标识:            1
  工作负载出现标识:        2
  可信上下文:              不适用
  连接信任类型:            不可信
  继承的角色:              不适用
  应用程序状态:            UOW 正在等待
  应用程序名称:            db2bp
  应用程序标识:            *LOCAL.venus.071207213730
  ClientUserID:            n/a
  ClientWrkstnName:        n/a
  ClientApplName:          n/a
  ClientAccntng:           n/a

  当前 UOW 的不活动语句列表:
    UOW 标识:        2
    活动标识:        1
    程序包模式:      NULLID
    程序包名称:      SQLC2G13
    程序包版本:
    节号:            203
    SQL 类型:        动态
    隔离:            CS
    语句类型:        DML 以及 Insert/Update/Delete
    语句:            insert into pdtest values 99


venus@boson:/home/venus =>db2pd -apinfo 46 -db pdtest

数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:39

应用程序:
  地址:                   0x0780000000D77A60
  AppHandl [nod-index]:   46       [000-00046]
  应用程序 PID:           881102
  应用程序节点名:         boson
  IP 地址:                不适用
  连接开始时间:           (1197063418)Fri Dec  7 16:36:58 2007
  客户机用户标识:          venus
  系统授权标识:            VENUS
  协调程序 EDU 标识:       5913
  协调程序分区:            0
  代理程序数:              1
  锁定超时值:              4294967294 秒
  锁定升级:                否
  工作负载标识:            1
  工作负载出现标识:        1
  可信上下文:              不适用
  连接信任类型:            不可信
  继承的角色:              不适用
  应用程序状态:            锁定等待
  应用程序名称:            db2bp
  应用程序标识:            *LOCAL.venus.071207213658
  ClientUserID:            n/a
  ClientWrkstnName:        n/a
  ClientApplName:          n/a
  ClientAccntng:           n/a

  活动语句列表:
   *UOW 标识:        3
    活动标识:        1
    程序包模式:      NULLID
    程序包名称:      SQLC2G13
    程序包版本:
    节号:            201
    SQL 类型:        动态
    隔离:            CS
    语句类型:        DML 和 Select(可阻塞)
    语句:            select * from pdtest

场景 4:在考虑锁定问题时使用调出脚本

查找 db2cos 输出文件。该文件的位置由数据库管理器配置参数 DIAGPATH 控制。输出文件的内容将随您在 db2cos 文件中输入的命令不同而不同。当 db2cos 文件包含 db2pd -db sample -locks 命令时,提供的输出示例如下所示:

捕获到锁定超时
Thu Feb 17 01:40:04 EST 2006
实例 DB2 数据库:SAMPLE
分区号:0
PID:940
TID:2136
函数:sqlplnfd
组件:锁管理器
探测点:999
时间戳记:2006-02-17-01.40.04.106000
AppID:*LOCAL.DB2...
AppHdl:
...
数据库分区 0 -- 数据库 SAMPLE -- 活动 -- 正常运行 0 天 00:06:53
锁定:
Address    TranHdl Lockname                   Type Mode Sts Owner Dur HldCnt Att Rlse
0x402C6B30 3       00020003000000040000000052 Row  ..X  W*  3     1   0      0   0x40

仅查找“W*”,因为这是经历超时的锁定。当锁定转换为更高级的方式时,也会发生锁定超时。在这种情况下,您只会在输出中见到“C*”,而不会见到“W*”。但是,在此特定情况下发生了锁定等待。可使用 db2cos 文件中的其他 db2pd 命令提供的输出将结果映射至事务、应用程序、代理程序甚至是 SQL 语句。可以缩小输出范围或使用其他命令来收集需要的信息。例如,可以更改 db2pd 命令选项以使用 -locks wait 选项,后一个选项仅打印具有等待状态的锁定。如果需要 -app 和 -agent 选项,也可以输入它们。

场景 5:将应用程序映射至动态 SQL 语句

db2pd -applications 命令报告动态 SQL 语句的当前和最后一个锚点标识和语句唯一标识。这允许直接从应用程序映射至动态 SQL 语句。

db2pd -app -dyn

应用程序:
Address            AppHandl [nod-index] NumAgents  CoorPid  Status
0x00000002006D2120 780      [000-00780] 1          10615    UOW-Executing

C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid
163      1          110      1          *LOCAL.burford.050202200412

动态 SQL 语句:
Address            AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x0000000220A02760 163    1       2      2      2      1      CREATE VIEW MYVIEW
0x0000000220A0B460 110    1       2      2      2      1      CREATE VIEW YOURVIEW

场景 6:监视内存使用情况。

尝试了解内存使用情况时,db2pd -memblock 命令非常有用。例如:

DBMS 集中的所有内存块。

地址              池标识    池名称     块存活时间 大小(字节) I LOC   文件
0x0780000000740068 62       resynch    2          112         1 1746  1583816485
0x0780000000725688 62       resynch    1          108864      1 127   1599127346
0x07800000001F4348 57       ostrack    6          5160048     1 3047  698130716
0x07800000001B5608 57       ostrack    5          240048      1 3034  698130716
0x07800000001A0068 57       ostrack    1          80          1 2970  698130716
0x07800000001A00E8 57       ostrack    2          240         1 2983  698130716
0x07800000001A0208 57       ostrack    3          80          1 2999  698130716
0x07800000001A0288 57       ostrack    4          80          1 3009  698130716
0x0780000000700068 70       apmh       1          360         1 1024  3878879032
0x07800000007001E8 70       apmh       2          48          1 914   1937674139
0x0780000000700248 70       apmh       3          32          1 1000  1937674139
...

接下来是已排序的“性能池”输出:

按 ostrack 池的大小排序的内存块:
池标识     池名称   总大小(字节)     总计数         LOC   文件
57         ostrack    5160048              1          3047  698130716
57         ostrack    240048               1          3034  698130716
57         ostrack    240                  1          2983  698130716
57         ostrack    80                   1          2999  698130716
57         ostrack    80                   1          2970  698130716
57         ostrack    80                   1          3009  698130716
ostrack 池的总大小:5400576 字节

按 apmh 池的大小排序的内存块:
池标识     池名称   总大小(字节)     总计数         LOC   文件
70         apmh       40200                2          121   2986298236
70         apmh       10016                1          308   1586829889
70         apmh       6096                 2          4014  1312473490
70         apmh       2516                 1          294   1586829889
70         apmh       496                  1          2192  1953793439
70         apmh       360                  1          1024  3878879032
70         apmh       176                  1          1608  1953793439
70         apmh       152                  1          2623  1583816485
70         apmh       48                   1          914   1937674139
70         apmh       32                   1          1000  1937674139
apmh 池的总大小:60092 字节
...

最后一部分输出对整个 DBMS 集的内存使用者进行排序:

DBMS 内存集中的所有内存使用者:
池标识    池名称    总大小(字节)        字节 % 总计数     计数 %  LOC   文件
57         ostrack    5160048              71.90  1          0.07   3047  698130716
50         sqlch      778496               10.85  1          0.07   202   2576467555
50         sqlch      271784               3.79   1          0.07   260   2576467555
57         ostrack    240048               3.34   1          0.07   3034  698130716
50         sqlch      144464               2.01   1          0.07   217   2576467555
62         resynch    108864               1.52   1          0.07   127   1599127346
72         eduah      108048               1.51   1          0.07   174   4210081592
69         krcbh      73640                1.03   5          0.36   547   4210081592
50         sqlch      43752                0.61   1          0.07   274   2576467555
70         apmh       40200                0.56   2          0.14   121   2986298236
69         krcbh      32992                0.46   1          0.07   838   698130716
50         sqlch      31000                0.43   31         2.20   633   3966224537
50         sqlch      25456                0.35   31         2.20   930   3966224537
52         kerh       15376                0.21   1          0.07   157   1193352763
50         sqlch      14697                0.20   1          0.07   345   2576467555
...

在 UNIX 和 Linux 上,还可以报告专用内存的内存块。例如:

db2pd -memb pid=159770

专用内存集中的所有内存块。
地址              池标识       池名称     块存活时间 大小(字节) I LOC   文件
0x0000000110469068 88         private      1          2488        1 172   4283993058
0x0000000110469A48 88         private      2          1608        1 172   4283993058
0x000000011046A0A8 88         private      3          4928        1 172   4283993058
0x000000011046B408 88         private      4          7336        1 172   4283993058
0x000000011046D0C8 88         private      5          32          1 172   4283993058
0x000000011046D108 88         private      6          6728        1 172   4283993058
0x000000011046EB68 88         private      7          168         1 172   4283993058
0x000000011046EC28 88         private      8          24          1 172   4283993058
0x000000011046EC68 88         private      9          408         1 172   4283993058
0x000000011046EE28 88         private      10         1072        1 172   4283993058
0x000000011046F288 88         private      11         3464        1 172   4283993058
0x0000000110470028 88         private      12         80          1 172   4283993058
0x00000001104700A8 88         private      13         480         1 1534  862348285 
0x00000001104702A8 88         private      14         480         1 1939  862348285 
0x0000000110499FA8 88         private      80         65551       1 1779  4231792244
内存集总大小:94847 字节

按大小排序的内存块:
池标识     池名称   总大小(字节)     总计数         LOC   文件
88         private    65551                1          1779  4231792244
88         private    28336                12         172   4283993058
88         private    480                  1          1939  862348285 
88         private    480                  1          1534  862348285 
内存集总大小:94847 字节

场景 7:确定哪个应用程序用完了表空间

通过使用 db2pd -tcbstats,可以标识对一个表执行插入操作的次数。以下是用户定义的全局临时表 TEMP1 的样本信息:

TCB 表信息:
Address            TbspaceID TableID PartID MasterTbs MasterTab TableName  SchemaNm ObjClass DataSize  LfSize LobSize XMLSize
0x0780000020B62AB0 3         2       n/a    3         2         TEMP1      SESSION  Temp     966       0      0       0 

TCB 表状态:
Address            TableName   Scans   UDI   PgReorgs   NoChgUpdts   Reads   FscrUpdates Inserts   Updates   Deletes   OvFlReads OvFlCrtes 
0x0780000020B62AB0 TEMP1       0       0     0          0            0       0           43968     0         0          0        0         

然后,可以通过 db2pd -tablespaces 命令获取表空间 3 的信息。样本输出如下所示:

表空间 3 配置:
Address            Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe  LastConsecPg Name
0x0780000020B1B5A0 DMS  UsrTmp  4096   32       Yes  32       1     1         On  1        0          31           TEMPSPACE2

表空间 3 统计信息:
Address            TotalPgs   UsablePgs  UsedPgs    PndFreePgs FreePgs    HWM        State      MinRecTime NQuiescers
0x0780000020B1B5A0 5000       4960       1088       0          3872       1088       0x00000000 0          0          

表空间 3 自动调整大小统计信息:
Address            AS  AR  InitSize    IncSize     IIP MaxSize     LastResize
LRF
0x0780000020B1B5A0 No  No  0           0           No  0           None            No  

容器:
Address            ContainNum Type    TotalPgs   UseablePgs StripeSet  Container 
0x0780000020B1DCC0 0          File    5000       4960       0
/home/db2inst1/tempspace2a

您会注意到通过引用 FreePgs 列填满的空间。因为可用页数值下降,所以可用空间减少。还应注意,FreePgs 加上 UsedPgs 的值将等于 UsablePgs 的值。

一旦了解这一点,就可以标识使用表 TEMP1 的动态 SQL 语句:

db2pd -db sample -dyn

数据库分区 0 -- 数据库 SAMPLE -- 活动 -- 正常运行 0 天 00:13:06

动态高速缓存:
当前使用的内存               1022197
堆总大小                      1271398
高速缓存溢出标志              0
引用数                        237
语句插入数目                  32
语句删除数目                  13
变动插入数目                  21
语句数目                      19

动态 SQL 语句:
Address            AnchID StmtUID  NumEnv  NumVar  NumRef  NumExe  Text
0x0000000220A08C40 78     1        2       2       3       2       declare global temporary table temp1 (c1 char(6)) not logged
0x0000000220A8D960 253    1        1       1       24      24      insert into session.temp1 values('TEST')

最后,可以将它映射至 db2pd -app 输出以标识应用程序。

应用程序:
Address            AppHandl [nod-index] NumAgents  CoorPid Status
0x0000000200661840 501      [000-00501] 1          11246   UOW-Waiting

C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid
0        0          253      1          *LOCAL.db2inst1.050202160426

针对先前使用的 db2pd 中的动态 SQL 语句的请求产生的锚点标识(AnchID)将与针对关联应用程序的请求一起使用。应用程序结果显示最后一个锚点标识(L-AnchID)值与该锚点标识(AnchID)相同。一次运行 db2pd 产生的结果将在下一次运行 db2pd 时使用。

db2pd -agent 的输出将显示应用程序读取的行数(Rowsread 列)和写入的行数(Rowswrtn 列)。这些值将显示应用程序已完成的部分及尚未完成的部分。

Address            AppHandl [nod-index] AgentPid  Priority  Type	DBName
0x0000000200698080 501      [000-00501] 11246     0         Coord	SAMPLE

State       ClientPid  Userid   ClientNm Rowsread   Rowswrtn   LkTmOt
Inst-Active 26377      db2inst1 db2bp    22         9588       NotSet

db2pd -agent 请求中的 AppHandl 和 AgentPid 的值可映射回 db2pd -app 请求中的 AppHandl 和 CoorPiid 的对应值。

如果您怀疑内部临时表占满了表空间,那么这些步骤会稍有不同。仍然可以使用 db2pd -tcbstats 来标识具有最大插入数目的表。以下是隐式临时表的样本信息:

TCB 表信息:
Address            TbspaceID TableID PartID MasterTbs MasterTab TableName
SchemaNm ObjClass         DataSize  ...
0x0780000020CC0D30 1         2       n/a    1         2         TEMP (00001,00002)
<30>     <JMC Temp        2470      ...
0x0780000020CC14B0 1         3       n/a    1         3         TEMP (00001,00003)
<31>     <JMC Temp        2367      ...
0x0780000020CC21B0 1         4       n/a    1         4         TEMP (00001,00004)
<30>     <JMC Temp        1872      ...


TCB 表状态:
Address            TableName          Scans   UDI   PgReorgs   NoChgUpdts Reads   FscrUpdates Inserts ... 
0x0780000020CC0D30 TEMP (00001,00002) 0       0     0          0          0       0           
43219 ...
0x0780000020CC14B0 TEMP (00001,00003) 0       0     0          0          0       0           
42485 ...
0x0780000020CC21B0 TEMP (00001,00004) 0       0     0          0          0       0           
0     ...

在此示例中,使用命名约定“TEMP (TbspaceID, TableID)”的表中有大量插入。这些是隐式临时表。SchemaNm 列中的值的命名约定为 AppHandl 的值与 SchemaNm 的值并置,这使得它能够标识正在工作的应用程序。

然后,可以将这些信息映射至 db2pd -tablespaces 产生的输出,以查看表空间 1 的已使用空间。在表空间统计信息中记下已使用的页数与可用页数之间的关系。

表空间配置:
Address            Id    Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe LastConsecPg Name
0x07800000203FB5A0 1     SMS  SysTmp  4096   32       Yes  320      1     1         On  10       0         31           TEMPSPACE1

表空间统计信息:
Address            Id    TotalPgs   UsablePgs  UsedPgs    PndFreePgs FreePgs    HWM    State      MinRecTime NQuiescers
0x07800000203FB5A0 1     6516       6516       6516       0          0          0      0x00000000 0          0

表空间自动调整大小统计信息:
Address            Id    AS  AR  InitSize    IncSize     IIP MaxSize     LastResize
LRF
0x07800000203FB5A0 1     No  No  0           0           No  0           None        No

容器:
...

然后,可以使用命令 db2pd -app 标识应用程序句柄 30 和 31(因为它们出现在 -tcbstats 输出中):

应用程序:
Address            AppHandl [nod-index] NumAgents  CoorPid    Status          C-AnchID C-StmtUID  L-AnchID   L-StmtUID  Appid
0x07800000006FB880 31       [000-00031] 1          4784182    UOW-Waiting     0        0          107        1          *LOCAL.db2inst1.051215214142
0x07800000006F9CE0 30       [000-00030] 1          8966270    UOW-Executing   107      1          107        1          *LOCAL.db2inst1.051215214013

最后,使用 db2pd -dyn 命令将它映射至动态 SQL:

动态 SQL 语句:
Address            AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x0780000020B296C0 107    1          1          1          43         43         select c1, c2 from test group by c1,c2

场景 8:监视恢复

命令 db2pd -recovery 显示了几个可用于验证是否正在进行恢复的计数器。当前日志和当前 LSN 提供了日志位置。已完成的工作计算目前已完成的字节数。

恢复:
恢复状态            0x00000401
当前日志            S0000005.LOG
当前 LSN            000002551BEA
作业类型            ROLLFORWARD RECOVERY
作业标识            7
作业开始时间      (1107380474) Wed Feb  2 16:41:14 2005
作业描述          数据库前滚恢复
调用程序类型      用户
总阶段            2
当前阶段          1

进度:
地址                   阶段号 描述    开始时间             已完成的工作  总工作
0x0000000200667160 1    向前  Wed Feb  2 16:41:14 2005     2268098 字节   未知
0x0000000200667258 2    向后  NotStarted                   0 字节         未知

场景 9:确定事务正在使用的资源量

命令 db2pd -transactions 提供了锁定数、第一个日志序号(LSN)、最后一个 LSN、已使用的日志空间和保留空间。这对于了解事务行为很有用。

事务:
Address            AppHandl [nod-index] TranHdl  Locks  State  Tflag
0x000000022026D980 797      [000-00797] 2        108    WRITE  0x00000000
0x000000022026E600 806      [000-00806] 3        157    WRITE  0x00000000
0x000000022026F280 807      [000-00807] 4        90     WRITE  0x00000000

Tflag2     Firstlsn       Lastlsn        LogSpace   SpaceReserved
0x00000000 0x000001072262 0x0000010B2C8C 4518       95450
0x00000000 0x000001057574 0x0000010B3340 6576       139670
0x00000000 0x00000107CF0C 0x0000010B2FDE 3762       79266

TID            AxRegCnt   GXID
0x000000000451 1          0
0x0000000003E0 1          0
0x000000000472 1          0

场景 10:监视日志使用情况

命令 db2pd -logs 对于监视数据库的日志使用情况很有用。通过观察已写入的页面输出,可以确定是否正在使用日志。

日志:
Current Log Number            0
Pages Written                 0
Method 1 Archive Status       n/a
Method 1 Next Log to Archive  n/a
方法 1 首次失败              不适用
Method 2 Archive Status       n/a
Method 2 Next Log to Archive  n/a
方法 2 首次失败              不适用
Log Chain ID                  0
Current LSN                   0x00000177000C

Address            StartLSN       State      Size  Pages  Filename
0x0000002AC1240818 0x000001770000 0x00000000 1000      1000      S0000000.LOG
0x0000002AC12408D8 0x000001B58000 0x00000000 1000      1000      S0000001.LOG
0x0000002AC1240998 0x000001F40000 0x00000000 1000      1000      S0000002.LOG

使用此输出可以确定两个问题:

  1. 如果归档存在问题,那么“归档状态”将设置为值“失败”,表示最近的日志归档失败。或者,如果正在发生的归档失败导致根本无法归档日志,那么将设置“首次失败”。
  2. 如果日志归档速度非常慢,那么“下一个要归档的日志”值将小于“当前日志编号”值。这可能导致填满日志路径,从而在完全填满日志路径时防止数据库中出现任何数据更改。

场景 11:查看综合系统(Sysplex)列表

如果不使用 db2pd -sysplex 命令,那么报告综合系统(sysplex)列表的唯一方法是通过 DB2 跟踪。

综合系统(sysplex)列表:
别名:           HOST
位置名:         HOST1
计数:           1 
IP 地址      端口       优先级   连接状态     PRDID
 1.2.34.56    400        1          0           0

场景 12:生成堆栈跟踪

可对 Windows 操作系统使用 db2pd -stack all 命令(对 UNIX 操作系统使用时为 -stack 命令)来对当前数据库分区中的所有进程生成堆栈跟踪。如果您怀疑某个进程或线程正在循环或正被挂起,那么可能要反复使用此命令。

可以通过发出命令 db2pd -stack <eduid> 来获取特定引擎可调度单元(EDU)的当前调用堆栈。例如:

db2pd -stack 137

  正在尝试转储 eduid 137 的堆栈跟踪。
  有关陷阱文件,请参阅当前 DIAGPATH。

如果需要所有 DB2 进程的调用堆栈,请使用 db2pd -stack all 命令,例如,在 Windows 操作系统上:

 
db2pd -stack all
  尝试转储实例的所有堆栈跟踪。  有关陷阱文件,请参阅当前 DIAGPATH。

如果您正在使用具有多个物理节点的分区数据库环境,那么通过使用命令 db2_all "; db2pd -stack all" 可以获取所有分区中的信息。但是,如果分区是同一机器上的所有逻辑分区,那么使用 db2pd -alldbp -stacks 时的速度会更快。

场景 13:查看数据库分区的内存统计信息

db2pd -dbptnmem 命令显示 DB2 服务器当前消耗的内存量,并在较高级别显示使用这些内存的服务器区域。

以下是 AIX 机器上 db2pd -dbptnmem 的输出示例:

数据库分区内存控制器统计信息

控制器自动:       Y
内存限制:         122931408 KB
当前使用量:       651008 KB
使用的 HWM:       651008 KB
高速缓存的内存:   231296 KB

以下是这些数据字段和列的描述:

  • 控制器自动:当 instance_memory 配置参数设置为 AUTOMATIC 时,控制器自动的值为 Y。这意味着数据库管理器自动确定内存消耗的上限。
  • 内存限制:DB2 服务器可以消耗的内存上限。它是 instance_memory 配置参数的值。
  • 当前使用量:服务器当前消耗的内存量。
  • 使用的 HWM:自激活数据库分区(在 db2start 命令运行时)以来消耗的内存高水位标记(HWM)或峰值。
  • 高速缓存的内存:当前使用量中未使用但为了提高将来内存请求的性能而高速缓存的内存量。

下面显示了 AIX 上 db2pd -dbptnmem 的样本输出的后续部分。

各个内存使用者:
名称          使用的内存(KB)   使用的 HWM(KB)   高速缓存的内存(KB)
===========================================================
APPL-DBONE     160000               160000           159616
DBMS-name      38528                38528            3776
FMP_RESOURCES  22528                22528             0
PRIVATE        13120                13120             740
FCM_RESOURCES  10048                10048             0
LCL-p606416	   128                  128               0
DB-DBONE       406656              406656            67200

列示了 DB2 服务器中所有已注册的内存“使用者”以及它们消耗的内存总量。列描述如下:

  • 名称:内存“使用者”的简短专有名称。示例包括:
    • APPL-<dbname> 表示为数据库 <dbname> 消耗的应用程序内存
    • DBMS-xxx 表示全局数据库管理器内存要求
    • FMP_RESOURCES 表示与 db2fmps 通信需要的内存
    • PRIVATE 表示其他专用内存要求
    • FCM_RESOURCES 表示快速通信管理器资源
    • LCL-<pid> 表示用于与本地应用程序通信的内存段
    • DB-<dbname> 表示为数据库 <dbname> 消耗的数据库内存
  • 使用的内存(KB):当前分配给该使用者的内存大小。
  • 使用的 HWM(KB):使用者已使用的内存高水位标记或峰值。
  • 使用的内存中高速缓存的内存(KB):当前未使用但立即可用于将来的内存分配的内存量。

猜你喜欢

转载自blog.csdn.net/liujinwei2005/article/details/90144723