ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DB2故障诊断工具

DB2故障诊断工具

原创 Linux操作系统 作者:keeptrying 时间:2012-12-11 17:49:24 0 删除 编辑

一、db2cklog

使用db2cklog工具来检查归档日志文件。

检查归档日志文件可确保需要前滚恢复时已知正常的日志文件可用,并且恢复操作不会因为日志文件存在问题而失败。

db2cklog工具读取单个日志文件或一定范围的编号的日志文件并检查文件的内部有效性。如果归档日志文件未通过验证并带有错误消息或返回了警报,那么不能在前滚恢复期间使用该日志文件。未通过验证的归档日志文件无法修复。

需要对归档日志文件具有读许可权,以便db2cklog工具可读取日志文件并执行检查。只有已关闭的日志文件(如归档日志文件)才能通过验证。对于仍处于活动状态的日志文件运行此工具,此工具无法准确检查该文件,并且将受到一条警报,以便知道此文件仍处于活动状态。

使用db2cklog命令时不应指定完整日志文件名,而应仅指定包含在日志文件名中的数字标识。如,S0000001.LOG日志文件的数字标识为1,检查该日志文件,应指定db2cklog 1。如果这些归档日志文件不在当前目录中,要使用ARCHLOGPATH参数添加这些日志文件的相对或绝对路径。

要检查单个归档日志文件:如:

db2cklog 1 ARCHLOGPATH /home/amytang/tests.

要检查一定范围的归档日志文件:如:

db2cklog 0 to 5 ARCHILOGPATH /home/nrichers/tests。

db2cklog对通过验证的任何文件的返回码为0,如果指定了一定范围的编号归档日志文件,那么db2cklog将按顺序读取每个文件,对每个文件执行检查并发出返回码。当遇到第一个错误时停止,即使指定了一定范围的日志文件并且还有其他文件未检查也会停止。发现错误时返回的DBT消息可提供有关归档日志文件未通过验证的原因的更多消息,但无法修正无效日志文件。

 

二、db2dart

db2dart命令验证数据库及其对象的体系结构是否正确。还可以使用它来显示数据库控制文件的内容,以便从其他情况下可能无法访问的表中抽取数据。

使用不带任何参数的db2dart命令查看所有可能的选项。

缺省情况下,db2dart实用程序将创建名为databaseName.RPT的报告文件。对于单一分区数据库分区环境,将在当前目录中创建该文件。对于多分区数据库分区环境,将在诊断目录的子目录中创建该文件。该子目录称为DART####,其中####是数据库分区号。

使用db2dart必须确保没有用户连接数据库。db2dart实用程序通过直接从磁盘中读取数据库中的数据和元数据来对其进行访问。因此,决不能对仍具有活动连接的数据库运行该工具。如果存在活动连接,那么该工具将不知道缓冲池中的页面或内存中的控制结构,可能会报告假的错误结果。同样,如果对需要进行崩溃恢复或尚未完成前滚恢复的数据库运行db2dart,由于磁盘上的数据性质不一致,可能会导致类似的不一致情况。

>>-db2dart--database-name--+---------------------+-------------><

                           '-action--+---------+-'   

                                     '-options-'

1、ACTIONS:

(1)、Inspection actions:

/DB:默认选项,检查整个数据库。

/T:检查一个或多个表。需要两个输入参数:table space ID(/TSI)和table object ID(/OI)或a list of table object IDs或table name(/TN)。

/TSF:检查table space files和containers。

/TSC:检查一个或多个表空间的table space constructs,但是不检查表。需要一个输入参数:table space ID(/TSI)或a list of table space IDs。

/TS:检查一个或多个表空间和其中的表。需要一个输入参数:table space ID(/TSI)或a list of table space IDs。

/ATSC:检查所有表空间的constructs,但是不检查表。

 

(2)、Date formatting actions:

/DD: Dumps formatted table date。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)、verbose choice(/V Y/N 其中:Y:Verbose,N:No verbose)。

/DI: Dumps formatted index date。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS) 、number of pages(/NP)、verbose choice(/V Y/N)。

      对于分区表上的非分区索引,/DI使用SYSCAT.INDEXES的INDEX_OBJECTID和TBSPACEID作为前两个输入参数(/OI和/TSI)。这种情况下不支持table name(/TN)选项。

      对于分区表上的分区索引,/DI使用SYSCAT.DATAPTITIONS的PARTITIONOBJECTID和TBSPACEID。这种情况同样不支持table name(/TN)选项。

/DM:Dumps formatted block map data。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)、verbose choice(/V Y/N)。The data shows whether a block has been reclaimed for use by the table space after a reorganization to reclaim multidimensional clustering(MDC)table blocks that were empty.

/DP:以十六进制形式Dumps pages。

     对于DMS表空间,需要三个输入参数:table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)。

     对于SMS表空间,需要五个输入参数:table space ID、object ID、page number to start with、number of pages、object type。

/DTSF:Dumps formatted table space file information。

/DDEL:Dumps formatted table data in delimited ASCII format。需要四个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)。

       Dump的delimited ASCII文件使用数据库代码页进行编码,db2dart命令不执行代码页转换。

       /DDEL参数只支持下面几种列类型,如果表中包含其他类型的列,这些列将会跳过,不被包含在delimited ASCII文件中:

       SMALLINT、FLOAT、REAL、INTEGER、TIME、DECIMAL、CHAR()、VARCHAR()、DATE、TIMESTAMP、BIGINT。

       如果CHAR和VARCHAR类型的列包含二进制数据,或者使用FOR BIT DATA定义,/DDEL参数生成的DEL文件中将包含二进制数据。当使用LOAD将DEL文件进行装入时,要确保使用delprioritychar选项进行修改。当使用IMPORT将DEL文件进行导入表时,确保指定delprioritychar codepage=x(x是输入数据集的代码页)选项进行修改。

/DHWM:Dumps high water mark information。需要一个输入参数:table space ID(/TSI).

/DXA:以十六进制形式Dumps formatted XML column data。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)、verbose choice(/V Y/N)。

/LHWM:降低高水位的建议。需要两个输入参数:table space ID(/TSI)、number of pages(wanted high water mark)(/NP)。/LHWM选项不支持系统编目表空间。

 

(3)、Repair actions

/ETS:扩展表限制(only 4KB 的DMS表空间)。需要一个输入参数:table space ID(/TSI)。

/MI:标记索引无效。指定这一参数时数据库必须offline。需要两个输入参数:table space ID(/TSI)、index object ID(/OI)。对于分区索引,这些值可以从SYSCAT.INDEXPARTITIONS的INPARTITIONOBJECTID和INDPARTITIONTBSPACEID获得。

/RHWM:降低高水位through empty SMP extents。指定这一参数时数据库必须offline。需要一个输入参数:table space ID(/TSI)。不支持系统编目表空间。

 

(4)、Change state actions

/CHST:改变数据库状态。指定这一参数时,数据库必须offline。需要一个输入参数:database backup pending state(/WHAT DBBP OFF/ON)。

示例:

1、检查T表

[db2inst@localhost ~]$ db2dart sample /T /TSI 3 /TN T

       The requested DB2DART processing has completed successfully!

                        Complete DB2DART report found in:

/home/db2inst/sqllib/db2dump/DART0000/SAMPLE.RPT

2、dump格式化的表空间文件信息

[db2inst@localhost ~]$ db2dart sample /DTSF

         The requested DB2DART processing has completed successfully!

                        Complete DB2DART report found in:

/home/db2inst/sqllib/db2dump/DART0000/SAMPLE.RPT

 

 

三、db2diag

db2diag工具用于对db2diag日志文件中的大量信息进行过滤和格式化。以缩短查找所需记录的时间。

示例1:按数据库名称过滤db2diag日志文件。

db2diag –g db=SAMPLE

 

示例2:按进程标识过滤db2diag日志文件。

以下命令用来显示进程标识(PID)为2200,并且在分区0、1、2、或3上运行的进程生成的所有严重错误消息:

db2diag –g level=Severe,pid=2200 –n 0,1,2,3

也可写作:db2diag –l severe –pid 2200 –n 0,1,2,3

注意:-g选项指定区分大小写的搜索,所以此处“Server”写作“server”会失败。

 

示例3:格式化db2diag工具输出

以下命令过滤2012年1月1日之后发生,并且包含分区0、1、2上记录的所有非严重错误和严重错误的所有记录。输出内容格式化为:时间戳记、分区号和级别出现在第一行,而PID、TID和实例名出现在第二行上,之后是错误消息:

db2diag -time 2012-01-01 –node “0,1,2” –level “Severe,Error” |   db2diag –fmt “Time:%{ts}

Partition:%node Message Level:%{level}  \nPid:%{pid} Tid:%{tid}

Instance:%{instance} \nMessage:@{msg}\n”

 

示例4:过滤来自不同工具的消息

仅查看来自数据库管理器中的特定工具(或所有工具)的消息。受支持的工具包括:

l      ALL:返回来自所有工具的记录。

l      MAIN:返回来自DB2常规诊断日志的记录,例如db2diag日志文件和管理通知日志。

l      OPTSTATS:返回与优化器统计信息有关的记录。

要读取来自MAIN工具的消息:

db2diag -facility MAIN

要显示来自OPTSTATS工具的消息并过滤出级别为Severe的记录:

db2diag -fac OPTSTATS -level Severe

要显示来自所有可用工具的消息并过滤出实例为harmistr级别为Error的记录:

db2diag -fac all -g instance=harmistr,level=Error

要显示OPTSTATS工具中级别为Error并且以特定格式输出时间戳记和PID字段的所有消息:

db2diag -fac optstats -level Error -fmt “Time:%{ts} Pid:%{pid}”

 

示例5:根据时间戳记来合并文件和对记录进行排序

db2diag -merge db2diag.0.log db2diag.1.log -fmt %{ts} -level error

 

示例6:按时间戳记合并单台主机中的三个数据库分区中的文件。

以下是要合并的三个db2diag日志文件的列表:

l      ~/sqllib/db2dump/NODE0000/db2diag.log

l      ~/sqllib/db2dump/NODE0001/db2diag.log

l      ~/sqllib/db2dump/NODE0002/db2diag.log

要根据时间戳记合并这三个诊断日志文件并对记录进行排序:

db2diag -merge

 

示例7:合并多台主机和多个数据库分区中的诊断日志文件

bower和horton两台主机中每个主机上有三个数据库分区的诊断日志文件:

l      ~/sqllib/db2dump/HOST_bower/NODE0000/db2diag.log

l      ~/sqllib/db2dump/HOST_bower/NODE0001/db2diag.log

l      ~/sqllib/db2dump/HOST_bower/NODE0002/db2diag.log

l      ~/sqllib/db2dump/HOST_horton/NODE0003/db2diag.log

l      ~/sqllib/db2dump/HOST_horton/NODE0004/db2diag.log

l      ~/sqllib/db2dump/HOST_horton/NODE0005/db2diag.log

要获得所有诊断日志中所有记录:

db2diag -global

要合并这些数据库分区中的所有db2diag日志文件,并根据时间戳记设置输出格式:

db2diag -global -merge -sdir /temp/keon -fmt %{ts}

其中/temp/keon是bower和horton这两个主机共享的共享目录,在处理期间用来存储每个主机的临时合并文件。

 

示例8:仅过滤和合并最新的诊断日志条目

过滤db2diag日志文件记录以仅显示特定数目的最新条目。显示分区数据库环境(共3个分区)中每个分区的5个最新格式化记录并按时间戳记进行合并和格式化:

db2diag -lastrecords 5 -global -merge -sdir /home/vbmithun -fmt %{ts}

仅返回最新的10个记录中具有严重消息级别的记录:

db2diag db2diag.log -lastrecords 10 -level Severe -fmt %{ts}

 

实例9:归档无实例客户机上的db2diag日志文件

从 V9.7 FP4 开始,IBM® Data Server Driver Package 和 IBM Data Server for ODBC and CLI 提供了 db2diag –archive(或 –A)选项。此选项使您能够归档无实例客户机上的诊断日志文件。如:

db2diag -A

db2diag:Moving “/home/usr1/clidriver/db2dump/db2diag.log”

          to “/home/usr1/clidriver/db2dump/db2diag.log_2010-09-14-01.16.26”

如果指定除-archive或-A之外的选项,将返回错误消息。

 

 

四、db2greg

在UNIX和Linux平台上,可以使用db2greg命令来查看全局注册表。

在DB2 V9.7及更高版本中,DB2全局概要文件注册表并非在文本文件/default.env中。现在,使用全局注册表文件global.reg来注册与当前DB2安装版本相关的DB2全局概要文件设置。

全局注册表只存在于UNIX和Linux平台上:

对于root安装,全局注册表文件为/var/db2/global.reg。

对于非root安装,全局注册表文件为$HOME/sqllib/global.reg,其中$HOME是非root用户的主目录。

全局注册表由以下三种不同记录类型组成:

“服务”:服务记录包含产品级别的信息,如版本和安装路径;

“实例”:实例记录包含实例级别的信息,如实例名、实例路径、版本和“引导时启动”标志;

“变量”:变量记录包含变量级别的信息,如变量名和变量值;

注释。

可使用db2greg工具查看全局注册表。此工具位于sqllib/bin和bin下的install目录中。可使用db2greg工具编辑全局注册表。

示例:

1、查看“服务”信息:

[db2inst@localhost ~]$ db2greg -getservrec service=DB2

Retrieved record:

   Service     = |DB2|

   Version     = |9.7.0.7|

   InstallPath = |/opt/ibm/db2/V9.7|

   GCFModule   = |N/A|

   Comment     = |N/A|

   FixpackNum  = 7

   InstallerUID  = 0

   InterimFixLetter  = N/A

   Timestamp  = 1354816731

   SpecialInstallNumber  = 0

2、查看“实例”信息:

[db2inst@localhost ~]$ db2greg -getinstrec instancename=db2inst

Retrieved record:

   Service      = |DB2|

   Version      = |9.7.0.7|

   InstanceName = |db2inst|

   InstancePath = |/home/db2inst/sqllib|

   Usage        = |N/A|

   StartAtBoot  = 1

   Maintenance  = 0

   InstallPath  = |/opt/ibm/db2/V9.7|

   RemoteProf   = |N/A|

   Comment      = |N/A|

 

五、db2level

db2level命令用来确定DB2实例的版本和修订包级别。

 

六、db2look

创建一个结构相同的数据库很多时候是非常有利的。例如,不用在生产环境下测试新的应用和恢复计划,而是创建一个与之结构和数据都相似的测试环境,在测试环境上进行测试。这样,生产环境就不会受到测试所带来的性能影响以及意外的数据破坏。此外,当调查一个故障(例如不合法的结果、性能问题等)时,在一个与生产环境相同的测试环境上进行调试都要相对容易一些。

可以使用db2look工具提取需要的DDL语句以在另外一个数据库中重新构建数据库对象。也可以使用db2look工具生成需要的SQL语句以复制统计信息、数据库配置信息、数据库管理器配置信息以及注册表变量。这是非常重要的,因为新的数据库可能不会非常精确的包含同样的数据集,但是仍然希望使用相同的访问计划。

示例:

1、生成test数据库中,user1用户创建的所有对象的DDL,并输出到db2look.sql文件中:

db2look –d test –u user1 –e –o db2look.sql

2、生成test数据库中,user1用户创建的,模式名为ianhe的所有对象的DDL,并输出到db2look.sql文件中:

db2look –d test –u user1 –z ianhe –e –o db2look.sql

3、生成UPDATE语句,以复制test数据库中,user1用户创建的数据库对象的统计信息,并输出到db2look.sql文件中:

db2look –d test –u user1 –m –o db2look.sql

4、生成test数据库中,user1用户创建的对象的DDL语句和复制统计信息的UPDATE语句,输出到db2look.sql文件中:

db2look –d test –u user1 –e –m –o db2look.sql

5、生成test数据库中所有用户对象的DDL语句,输出到db2look.sql文件中:

db2look –d test –a –e –o db2look.sql

-a选项生成所有creators的统计信息,如果同时指定了-u,则-u选项被忽略。

6、生成test数据库中所有用户定义的分区组、buffer pools和表空间的DDL语句,并输出到db2look.sql文件中:

db2look –d test –l –o db2look.sql

-l选项生成:数据库分区组、bufferpools和表空间信息。

7、生成test数据库的优化器相关的数据库和数据库管理器配置参数的UPDATE语句以及优化器相关的注册表变量的db2set语句,输出到db2look.sql文件:

db2look –d test –f –o db2look.sql

-f选项生成配置参数和环境变量

8、数据库为test,生成:所有对象的DDL语句、用于复制所有表和索引的统计信息的UPDATE语句、GRANT授权语句、优化器相关的数据库和数据库管理器配置参数的UPDATE语句、优化器相关的注册表变量的db2set语句、所有用户定义的数据库分区组和buffer pools以及表空间的DDL语句。输出到db2look.sql文件:

db2look –d test –a –e –m –l –x –f –o db2look.sql

-x选项generate authorization DDL for existing granted privileges, excluding the original definer of the object

9、生成test数据库中所有用户对象的DDL语句,并以%作为分界符(默认为“;”),输出到db2look.sql文件中:

db2look –d test –a –e –td % -o db2look.sql

10、生成test数据库中所有对象授权的DDL语句,包括original creator创建的对象(这种情况下,在对象创建时由SYSIBM授权)。输出到db2look.sql文件中:

db2look –d test –xd –o db2look.sql。

11、生成test数据库对象的DDL语句,不包括create view语句:

db2look –d test –e –noview –o db2look.sql

12、生成test数据库中与指定表相关的对象的DDL语句:

db2look –d test –e –t tabl –o db2loog.sql

13、生成federated数据库FEDDEPART中所有对象(federated和non-federated)的DDL语句。

db2look –d feddepart –e –wrapper fedwrap

14、生成test数据库中所有用户对象的DDL语句。同时导出XSR对象到目录/home/ofer/ofer/。

 db2look –d test -a –e –xs –xdir /home/ofer/ofer。

15、生成test数据库中WLM详细的DDL语句:

db2look –d test –wlm

 

 

七、db2ls

在UNIX和Linux上,列出系统上安装的DB2数据库产品。

该命令可以列出DB2数据库产品在系统上安装的位置和DB2数据库产品的版本;可以列出特定安装路径上的所有或指定的DB2数据库产品和组件。

要列出DB2数据库产品在系统上安装的路径和版本:db2ls

要列出特定安装路径上的DB2数据库产品或组件:

db2ls –q –p –b baseInstallDirectory

-q:必须指定。指明正在查询DB2产品或组件。

-p:指定列出数据库产品而不是列出组件,如果不指定,则列出各个数据库组件。

-b:指定安装目录。如果不是在安装目录下执行命令,则此参数必须指定。

 

 

八、db2pd

db2pd命令用来诊断故障,因为它可以迅速的返回内存中的即时信息。

db2pd工具收集信息不需要任何latches(锁存器),也不需要使用任何引擎资源。因此,当db2pd收集信息时,它可能会检索正在更改的信息。这样,收集到的数据可能不完全准确。如果遇到正在更改的内存指针,可使用信号处理程序来防止db2pd异常结束。这可能会导致输出中出现如下消息“Changing data structure forced command termination”。尽管如此,该工具对于故障诊断非常有用。在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。

当特定的SQLCODE、ZRC code或ECF code发生时,可以使用db2pdcfg –catch命令捕获数据库管理器系统信息。当errors被捕获时,db2cos(callout script)被调用。

例如,如果要在一个锁超时错误发生时,调用db2cos脚本:

db2pdcfg –catch locktimeout db2cos

db2cos脚本可以被动态的修改以便运行任何db2pd命令、OS命令、或者任何其他需要用来解决问题的命令。在UNIX和Linux下,db2cos脚本文件在sqllib/bin目录下。在Windows下,db2cos在$DB2PATH\bin目录。

DB2安装后自带的缺省db2cos脚本有着简单的流程。DB2调用它的时候会同时传递给它一些参数。db2cos脚本通过这些参数得知调用自己的实例、进程、时间点和函数等信息。还有一个传入参数叫做typeReason,它告诉db2cos被调用的原因是什么,例如数据损坏(DATA_COR)、锁超时(LOCKTIMEOUT)、死锁(DEADLOCK)或者其他错误代码(SQLCODE)。

常见的传入参数有:#instance: instance name   #database:database name

#dbpart:database partition number

#pid:process ID

#tid:thread ID

#function:function name of function that called the panic script

#component:component of the function

#probe:probe point

#timestamp:timestamp of when the script. was called

#appid:application ID

#apphld:application handle

db2cos会遍历上面的参数,记录下它们的值,然后根据typeReason参数的定义,执行对应的动作。每次db2cos被调用,db2diag.log中都会有相应的记录。

 

要获取当前处于活动状态或者曾处于活动状态但由于某种原因而被取消的事件监视器列表,运行db2pd –gfw命令。此命令返回关于每个快速写程序EDU的目标(事件监视器将数据写入这些目标)的统计信息和信息。

 

示例:

1、诊断lockwait

db2pd –db dbname –locks –transactions –applications -dynamic

返回结果类似如下:

Locks:

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选项的数据库,第一个结果显示数据库的locks。此处结果显示TranHdl 2正在等待TranHdl 3持有的锁。

Transactions:

Address             AppHandl [nod-index]  TranHdl Locks State Tflag      Tflag2     Firstlsn Lastlsn LogSpace SpaceReserved TID AxRegCnt GXID

0x0780000020251B80  11       [000-00011]  2       4     READ  0x00000000 0x00000000 0x000000000000 0x000000000000 0 0 0x0000000000B7 1 0

0x0780000020252900  12       [000-00012]  3       4     WRITE 0x00000000 0x00000000 0x000000FA000C 0x000000FA000C 113 154 0x0000000000B8 1 0

可以看到TranHdl 2与AppHandl 11相关,TranHdl 3与AppHandl 12相关。

Applications:

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.

Dynamic SQL Statements:

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参数捕获所有正处于等待状态的锁定

db2pd –wlocks –db pdtest

Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:22

Locks being waited on :

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参数获取lock owner和lock waiter运行的详细信息。

与上例相同的条件下:

db2pd –apinfo 47 –db pdtest

输出结果如下:

Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:30

Application :

Address : 0x0780000001676480

AppHandl [nod-index] : 47 [000-00047]

Application PID : 876558

Application Node Name : boson

IP Address: n/a

Connection Start Time : (1197063450)Fri Dec 7 16:37:30 2007

Client User ID : venus

System Auth ID : VENUS

Coordinator EDU ID : 5160

Coordinator Partition : 0

Number of Agents : 1

Locks timeout value : 4294967294 seconds

Locks Escalation : No

Workload ID : 1

Workload Occurrence ID : 2

Trusted Context : n/a

Connection Trust Type : non trusted

Role Inherited : n/a

Application Status : UOW-Waiting

Application Name : db2bp

Application ID : *LOCAL.venus.071207213730

ClientUserID : n/a

ClientWrkstnName : n/a

ClientApplName : n/a

ClientAccntng : n/a

List of inactive statements of current UOW :

UOW-ID : 2

Activity ID : 1

Package Schema : NULLID

Package Name : SQLC2G13

Package Version :

Section Number : 203

SQL Type : Dynamic

Isolation : CS

Statement Type : DML, Insert/Update/Delete

Statement : insert into pdtest values 99

db2pd –apinfo 46 –db pdtest

结果如下:

Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:39

Application :

Address : 0x0780000000D77A60

AppHandl [nod-index] : 46 [000-00046]

Application PID : 881102

Application Node Name : boson

IP Address: n/a

Connection Start Time : (1197063418)Fri Dec 7 16:36:58 2007

Client User ID : venus

System Auth ID : VENUS

Coordinator EDU ID : 5913

Coordinator Partition : 0

Number of Agents : 1

Locks timeout value : 4294967294 seconds

Locks Escalation : No

Workload ID : 1

Workload Occurrence ID : 1

Trusted Context : n/a

Connection Trust Type : non trusted

Role Inherited : n/a

Application Status : Lock-wait

Application Name : db2bp

Application ID : *LOCAL.venus.071207213658

ClientUserID : n/a

ClientWrkstnName : n/a

ClientApplName : n/a

ClientAccntng : n/a

List of active statements :

*UOW-ID : 3

Activity ID : 1

Package Schema : NULLID

Package Name : SQLC2G13

Package Version :

Section Number : 201

SQL Type : Dynamic

Isolation : CS

Statement Type : DML, Select (blockable)

Statement : select * from pdtest

 

4、使用db2cos分析锁超时

要使用调出脚本,找到db2cos输出文件。该文件的位置由数据库管理器配置参数diagpath控制。输出文件的内容将根据在db2cos脚本文件中输入的命令而不同。在UNIX系统上,缺省db2cos脚本在bin目录中,此目录是只读目录,可将db2cos脚本文件复制到adm目录,必要时在该位置修改该文件。在adm目录中,db2cos目录同样可以运行。

使用默认的db2cos脚本就可以方便的分析锁超时问题。首先赋予db2cos脚本执行权限:chmod u+x $HOME/sqllib/bin/db2cos

然后使用db2dpcfg –catch命令打开捕获开关。这个命令会告诉DB2在发生锁超时(lock timeout)时执行db2cos脚本。

db2pdcfg –catch locktimeout

这个缺省的db2cos脚本会在锁超时发生后生成一个名为db2cos.rpt的文件在$HOME/sqllib/db2dump/下。

 

5、将应用程序映射至动态SQL语句

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

Applications:

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

Dynamic SQL Statements:

Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text

0x0000000220A02760 163 1 2221CREATE VIEW MYVIEW

0x0000000220A0B460 110 1 2221CREATE VIEW YOURVIEW

 

6、监视内存使用情况

使用db2pd –memblock命令了解内存使用情况。

[db2inst@localhost ~]$ db2pd -memblock | more

All memory blocks in DBMS set.

 

Address    DataAddress PoolID     PoolName    BlkAge Size(Bytes)  I LOC   File

0x10740068 0x10740080 77         fcmsess      3     849920       1 495   3002113363

0x10730048 0x10730060 77         fcmsess      2     6000         1 388   3002113363

0x106EFFC8 0x106EFFE0 77         fcmsess      1     262144       1 246   3315196337

0x10680068 0x10680080 79         fcmchan      3     93184        1 495   3002113363

0x10670048 0x10670060 79         fcmchan      2     768          1 388   3002113363

0x1065FFC8 0x1065FFE0 79         fcmchan      1     65536        1 246   3315196337

0x10580068 0x10580080 13         fcmbp        3     524288       1 495   3002113363

0x10570048 0x10570060 13         fcmbp        2     768          1 388   3002113363

0x1055FFC8 0x1055FFE0 13         fcmbp        1     65536        1 246   3315196337

0x10978C78 0x10978C90 73         fcmctl       11    160592       1 1650  2986298236

0x10948C78 0x10948C90 73         fcmctl       10    160592       1 1650  2986298236

0x1092C528 0x1092C540 73         fcmctl       5     80544        1 1476  2986298236

…

Total size for DBMS memory set: 10178767 bytes

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

Memory blocks sorted by size for fcmsess pool:

PoolID     PoolName   TotalSize(Bytes)     TotalCount LOC   File     

77         fcmsess    849920               1          495   3002113363

77         fcmsess    262144               1          246   3315196337

77         fcmsess    6000                 1          388   3002113363

Total size for fcmsess pool: 1118064 bytes

 

Memory blocks sorted by size for fcmchan pool:

PoolID     PoolName   TotalSize(Bytes)     TotalCount LOC   File     

79         fcmchan    93184                1          495   3002113363

79         fcmchan    65536                1          246   3315196337

79         fcmchan    768                  1          388   3002113363

Total size for fcmchan pool: 159488 bytes

 

…

Memory blocks sorted by size for apmh pool:

PoolID     PoolName   TotalSize(Bytes)     TotalCount LOC   File     

70         apmh       286464               12         1476  2986298236

70         apmh       260200               1          285   1586829889

70         apmh       130100               1          271   1586829889

70         apmh       16000                1          1650  2986298236

70         apmh       4404                 2          195   2986298199

70         apmh       4208                 2          815   1411768055

70         apmh       2380                 7          1581  3342001786

70         apmh       840                  2          3380  1953793439

70         apmh       840                  1          1472  3878879032

…

…

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

All memory consumers in DBMS memory set:

PoolID     PoolName   TotalSize(Bytes)     %Bytes TotalCount %Count LOC   File     

72         eduah      2816016              27.67  1          0.06   189   4210081592

50         sqlch      1205268              11.84  1          0.06   193   2576467555

73         fcmctl     854872               8.40   6          0.33   1476  2986298236

77         fcmsess    849920               8.35   1          0.06   495   3002113363

62         resynch    604820               5.94   1          0.06   128   1599127346

13         fcmbp      524288               5.15   1          0.06   495   3002113363

50         sqlch      423228               4.16   1          0.06   250   2576467555

73         fcmctl     321184               3.16   2          0.11   1650  2986298236

70         apmh       286464               2.81   12         0.67   1476  2986298236

…

在UNIX和Linux上,还会在最后报告专用内存的内存块:

All memory blocks in FMP set.

 

Address    DataAddress PoolID     PoolName    BlkAge Size(Bytes)  I LOC   File

0x126A1FB8 0x126A1FD0 59         undefh       3     122900       1 408   1937674139

0x12681FB8 0x12681FD0 59         undefh       2     122900       1 408   1937674139

0x12661FB8 0x12661FD0 59         undefh       1     122900       1 408   1937674139

Total size for FMP memory set: 368700 bytes

…

 

7、确定哪个应用程序耗尽表空间

使用db2pd –tcbstats可以确定对表执行的插入操作数。以下是sample数据库中T表的信息:(此处只说明过程,实际T表并没有耗尽表空间)

[db2inst@localhost ~]$ db2pd -db sample -tcbstats

TCB Table Information:

Address    TbspaceID TableID PartID MasterTbs MasterTab TableName          SchemaNm ObjClass DataSize   LfSize     LobSize    XMLSize

0xA5904944 3         8       n/a    3         8         T                  DB2INST  Perm     1          0          0          0        

 

TCB Table Stats:

Address    TableName          SchemaNm Scans      UDI        RTSUDI               PgReorgs   NoChgUpdts Reads      FscrUpdates Inserts    Updates    Deletes    OvFlReads  OvFlCrtes  RowsComp   RowsUncomp CCLogReads StoreBytes BytesSaved

0xA5904944 T                  DB2INST  3          0          0                    0          0          5          0           2          0          0          0          0          0          0          0          -          -        

然后,通过使用db2pd –tablespaces命令获取表空间3的信息:

Tablespace Configuration:

Address    Id    Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe  LastConsecPg Name

0xA4965D80 3     DMS  Large   8192   32       Yes  32       1     1         Off 1        0          31           IBMDB2SAMPLEREL

 

Tablespace Statistics:

Address    Id    TotalPgs   UsablePgs  UsedPgs    PndFreePgs FreePgs    HWM        Max HWM    State      MinRecTime NQuiescers PathsDropped

0xA4965D80 3     4096       4064       864        0          3200       864        864        0x00000000 0          0          No          

 

Tablespace Autoresize Statistics:

Address    Id    AS  AR  InitSize    IncSize     IIP MaxSize     LastResize                 LRF

0xA4965D80 3     Yes Yes 33554432    -1                No  None        None                       No 

 

Containers:

Address    TspId ContainNum Type    TotalPgs   UseablePgs PathID     StripeSet  Container

0xA4967230 3     0          File    4096       4064       0          0          /home/db2inst/db2inst/NODE0000/SAMPLE/T0000003/C0000000.LRG

 

FreePgs值加上UsedPgs值等于UsablePgs值。FreePgs列值下降表示可用空间减少。

然后通过运行db2pd –db sample –dyn来确定正在使用表T的动态SQL语句:

[db2inst@localhost ~]$ db2pd -db sample -dyn | more

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 02:00:19 -- Date 2012-12-11-07.15.08.862395

 

Dynamic Cache:

Current Memory Used           1265017

Total Heap Size               1271398

Cache Overflow Flag           0

Number of References          741

Number of Statement Inserts   225

Number of Statement Deletes   179

Number of Variation Inserts   63

Number of Statements          46

 

Dynamic SQL Statements:

Address    AnchID StmtUID    NumEnv     NumVar     NumRef     NumExe     Text

0xA5ADFDF0 647    1          0          0          1          1          insert into t values (2,'b')

0xA5B13F00 106    1          1          1          3          3          insert into t values(4,'d')

最后,通过运行db2pd –db sample –app将以上输出中的信息映射到应用程序输出,以便确定应用程序:

Applications:

Address    AppHandl [nod-index] NumAgents  CoorEDUID  Status                  C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid                                                            WorkloadID  WorkloadOccID CollectActData          CollectActPartition     CollectSectionActuals

0x10A908C0 270      [000-00270] 1          36         UOW-Waiting             0        0          106      1          *LOCAL.db2inst.121210233431                                      1           2             N                       C                       N 

可以使用用于标识动态SQL语句的锚点标识(AnchID)值来标识相关联的应用程序。

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

[db2inst@localhost ~]$ db2pd -agent app=270

Address    AppHandl [nod-index] AgentEDUID Priority    Type     State       ClientPid  Userid   ClientNm Rowsread   Rowswrtn   LkTmOt DBName   LastApplId                                                       LastPooled         

0x10B00060 270      [000-00270] 36         0           Coord    Inst-Active 7074       db2inst  db2bp    1          8          NotSet SAMPLE   *LOCAL.db2inst.121210233431                                      Tue Dec 11 07:30:45

可以将运行db2pd –agent命令时生成的AppHandl和AgentEDUID值映射到运行db2pd –app命令时生成的相应AppHandl和CoorEDUID值。

 

8、监视恢复

如果运行db2pd –recovery命令,输出将显示多个计数器,这些计数器可用于验证是否正在执行恢复。

 

9、确定事务正在使用的资源量

db2pd –transactions命令输出锁定数、第一个日志序号(LSN)、最后一个LSN、以用日志空间量和保留空间量。

[db2inst@localhost ~]$ db2pd -db sample  -transactions

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 04:00:20 -- Date 2012-12-11-09.15.09.876334

 

Transactions:

Address    AppHandl [nod-index] TranHdl    Locks      State   Tflag      Tflag2     Firstlsn           Lastlsn            SpaceReserved   LogSpace        TID            AxRegCnt   GXID     ClientUserID                   ClientWrkstnName               ClientApplName                 ClientAccntng                 

0xA3034B00 445      [000-00445] 2          0          READ    0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0               0               0x000000001A56 1          0        n/a                            n/a                            n/a                            n/a                           

0xA3035800 8        [000-00008] 3          0          READ    0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0               0               0x0000000011B6 1          0        n/a                            n/a                            n/a                            n/a                            

0xA3036500 9        [000-00009] 4          0          READ    0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0               0               0x000000001A57 1          0        n/a                            n/a                            n/a                            n/a                           

 

 

10、监视日志使用情况

[db2inst@localhost ~]$ db2pd -db sample –logs

Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 04:02:49 -- Date 2012-12-11-09.17.38.279599

 

Logs:

Current Log Number            0        

Pages Written                 421      

Cur Commit Disk Log Reads     0                  

Cur Commit Total Log Reads    0                  

Method 1 Archive Status       n/a

Method 1 Next Log to Archive  n/a

Method 1 First Failure        n/a

Method 2 Archive Status       n/a

Method 2 Next Log to Archive  n/a

Method 2 First Failure        n/a

Log Chain ID                  0        

Current LSN                   0x0000000003C3D376

 

Address    StartLSN         State      Size       Pages      Filename

0xA3032888 0000000003A98010 0x00000000 1000       1000       S0000000.LOG

0xA3032048 0000000003E80010 0x00000000 1000       1000       S0000001.LOG

0xA3011598 0000000004268010 0x00000000 1000       1000       S0000002.LOG

通过写入页数值,可以确定日志使用量是否正在增加。如果最近大多数的日志归档操作都失败,那么归档状态的值将被设置为失败。如果正在发生的归档失败导致完全无法对日志进行归档,那么归档状态值将被设置为首次失败。

 

11、生成堆栈跟踪

使用db2pd –stack all命令生成当前数据库分区中所有进程的堆栈跟踪。如果怀疑某个进程或线程正在循环或正被挂起,那么可能要反复使用此命令。

使用db2pd –stack eduid来获取特定引擎可分派单元(EDU)的当前调用堆栈。

可以使用dumpdir参数将db2pd –stacks命令的输出重定向至特定目录路径以及使用timeout参数仅重定向特定持续时间的输出:

[db2inst@localhost trapfiles]$ db2pd -stack all dumpdir=~/trapfiles timeout=30

 

12、查看数据库分区的内存统计信息

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

[db2inst@localhost ~]$ db2pd –dbptnmem

Database Partition 0 -- Active -- Up 0 days 04:47:32 -- Date 2012-12-11-09.58.07.495126

 

Database Partition Memory Controller Statistics

 

Controller Automatic: Y

Memory Limit:         773492 KB

Current usage:        214848 KB

HWM usage:            230336 KB

Cached memory:        48064 KB

 

Individual Memory Consumers:

 

Name             Mem Used (KB) HWM Used (KB) Cached (KB)

========================================================

APPL-SAMPLE              24768         40000       23488 

DBMS-db2inst             39232         39232        5568

FMP_RESOURCES            22528         22528           0

PRIVATE                  11456         11456           0

DB-SAMPLE               116608        116608       19008

LCL-p7074                  128           128           0

LCL-p2109                  128           128           0

说明:

Controller Automatic:指示内存控制器设置。如果instance_memory配置参数设置为AUTOMATIC,那么它将显示“Y”,意味着数据库管理器自动确定内存耗用量上限。

Memory Limit:如果强制施加了实例内存限制,那么instance_memory配置参数的值是可以耗用的DB2服务器内存的上限。

Memory Limit:服务器当前耗用的内存量。

HWM usage:自激活数据库分区(在db2start命令运行时)以来消耗的内存高水位标记(HWM)或峰值。

Cached memory:高速缓存的内存,当前使用量中未使用但为了提高将来内存请求的性能而高速缓存的内存量。

APPL-dbname:为数据库dbname耗用的应用程序内存

DBMS-name:全局数据库管理器内存需求

FMP_RESOURCES:与db2fmps进行通信所需的内存

PRIVATE:其他专用内存需求

DB-dbname:为数据库dbname耗用的数据库内存

LCL-pid:用于与本地应用程序进行通信的内存段

 

13、显示耗费处理器时间最多的几个EDU并显示EDU堆栈信息

使用db2pd –edus,输出将列示所有引擎可分派单元(EDU)。在Linux和UNIX上,可以指定interval参数,以便生成所有EDU的两个快照,这两个快照将相隔指定的时间间隔,这样输出会增加两列:USER DELTA列指示该时间间隔内处理器用户时间的增量,SYS DELTA列指示时间间隔内处理器系统时间的增量。

要仅查看有关耗费处理器时间最多的几个EDU的信息以减少返回的输出量,可以指定top参数。

[db2inst@localhost ~]$ db2pd -edus interval=5 top=5

Database Partition 0 -- Active -- Up 0 days 05:24:37 -- Date 2012-12-11-10.35.12.331994

 

List of all EDUs for database partition 0

 

db2sysc PID: 2037

db2wdog PID: 2035

db2acd  PID: 2052

 

EDU ID    TID            Kernel TID     EDU Name                               USR (s)         SYS (s)        USR DELTA    SYS DELTA

=========================================================================================================

1         2911890288     2041           db2sysc 0                              1.010000    12.190000    0.000000     0.010000

25        2928667504     2254           db2pfchr (SAMPLE) 0                    0.030000     0.030000    0.000000     0.000000

11        2943347568     2042           db2alarm 0                             0.160000     1.450000    0.000000     0.000000

12        2942298992     2043           db2thcln 0                             0.000000     0.000000    0.000000     0.000000

14        2940201840     2046           db2ipccm 0                             0.100000     0.450000    0.000000

 

 

九、db2support

使用db2support命令来收集环境信息,并将这些系统数据放到一个压缩文件中。db2support实用程序将自动收集所有可用的DB2诊断信息和系统诊断信息。它还有一个可选的交互式会话。该会话提出有关问题的详情。

使用db2support可以避免可能的用户错误,因为不必手动输入GET DATABASE CONFIGURATION FOR database-name或LIST TABLESPACES SHOW DETAIL之类的命令。而且,不需要有关要运行的命令或要收集的文件的指示信息,因此收集数据的速度会比较快。

 

十、db2val

db2val命令用于确保DB2副本在正常运行。它通过以下方法验证DB2副本的核心功能:验证安装文件、实例、数据库创建情况、与该数据库的连接以及分区数据库环境的状态。db2val命令可以快速确保已正确完成所有配置,并且确保DB2副本就是期望的副本。可以指定实例和数据库,也可以对所有实例运行db2val命令。

 

 

 

 

 

 

 

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25744374/viewspace-750932/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: vmstat详解
请登录后发表评论 登录
全部评论

注册时间:2011-04-25

  • 博文量
    130
  • 访问量
    1031760