db2trc - 跟踪命令

db2trc 命令用于控制 Db2® 实例或 Db2 管理服务器 (DAS) 的跟踪工具。运行 db2trc 命令时,跟踪工具就会记录有关操作的信息,并将这些信息格式化为可读格式。

启用跟踪工具(缺省情况下关闭)可能会影响系统性能。因此,只有在 Db2 技术支持代表的指示下,才应使用跟踪工具。

Db2 跟踪对于分析复发的可再现问题可能特别有用。

使用 Db2 数据库系统时,您有时可能会遇到错误消息,指示您“获取跟踪并致电 IBM 软件支持人员”、“开启跟踪并检查跟踪记录”或“与技术支持代表联系并提供以下信息:问题描述、SQLCODE、SQLCA 内容(如果有可能)和跟踪文件(如果有可能)”。或者,当您向 IBM 软件支持人员报告问题时,可能会要求您执行跟踪,以捕获有关环境的详细信息。

权限

要跟踪 UNIX 操作系统上的 Db2 实例,您必须具有下列其中一项权限:
  • SYSADM
  • SYSCTRL
  • SYSMAINT
要在 UNIX 操作系统上跟踪 Db2 管理服务器:
  • DASADM

需要的连接

命令语法

阅读语法图跳过直观语法图db2trc parsing-options db2dascfcfcli collection-options -u
parsing-options
阅读语法图跳过直观语法图ccfmtdestFileflowdumpFiledestFilemask-optionsflow-parsingformatdumpFiledestFilemask-optionsformat-parsingperffmtdumpFiledestFileformattedFlow|fflwdumpFiledestFilemask-optionsfflw-parsingperfrepdumpFiledestFileperfrep-optionsprintprint-optionsinfo
location-options
阅读语法图跳过直观语法图1-global-host hostname-host,hostname-member,member_number|member_rangeall-sdirshared directory path
mask-options
阅读语法图跳过直观语法图-mmask-p,pid..tid-member,member_number|member_rangeall
flow-parsing
阅读语法图跳过直观语法图-xfirstRecord- lastRecord-data-t-wc-mf-rds
format-parsing
阅读语法图跳过直观语法图-xfirstRecord- lastRecord-r-xml-c-cli-ncf-errors
fflw-parsing
阅读语法图跳过直观语法图-xfirstRecord- lastRecord-data-t-wc-rds
perfrep-options
阅读语法图跳过直观语法图-g-sortcounttimespenttimeelapsed-orderasc|ascendingdesc|descending
collection-options
阅读语法图跳过直观语法图onon-optionslocation-optionschangetrace-options-resumelocation-optionsdumpdumpFile-qlocation-optionsinfoclearstoplocation-optionsofflocation-optionsidcfid
on-options
阅读语法图跳过直观语法图-trccom-lbufferSizeM|m-ibufferSizeM|m-ffilenamelcidcfid-global-hostdatabase host name-sdirshared directory pathtrace-options-cli-dumpstmt-errorsperformance-counter
trace-options
阅读语法图跳过直观语法图-mmask-p,pid..tid-member,member_number|member_rangeall-appid,appid-apphdl,apphdl-ccpid-rcreturnCode-emaxSysErrors-t-stoptrcsqlcodes-debug
performance-counter
阅读语法图跳过直观语法图-perfcount-t-mmask
print-options
阅读语法图跳过直观语法图 -stack-s recordIDflowFile
注:
  • 1 -global 参数已不推荐使用。您可以使用 -member all 参数选项来获取全局信息。

命令参数

-appid
指定要跟踪的应用程序标识。-appid 选项与 onchange 选项配合使用。-appid 不能与 -perfcount 选项配合使用。
-apphdl
指定要跟踪的应用程序句柄。-apphdl 选项与 onchange 选项配合使用。-apphdl 不能与 -perfcount 选项配合使用。
-member member_number | member_range
指定要跟踪的数据库成员(或分区)。如果未指定此选项,那么会对发出 db2trc 命令的主机上的所有逻辑成员执行该命令。可以逗号分隔的 member_number 列表 (member1, member2) 形式指定多个成员,或使用 member_range,其中 member_range 是成员范围 (member1-member3),或者使用这两种方法的任意组合。
所有
指定要在 db2nodes.cfg 中定义的所有成员上发出该命令。

-member 选项与 onchangeformatflowformat 选项)、stop 以及 off 选项配合使用。有关更多详细信息,请参阅下面的示例 2 和 3。-member 选项不能与 -perfcount 选项配合使用。

db2
指定要在 Db2 实例上执行所有跟踪操作。这是缺省值。
das
指定要在 Db2 管理服务器实例上执行所有跟踪操作。
cf
指定要在 CF 服务器上执行所有跟踪操作。-change-clear-stop 选项不能与此选项配合使用。
cfcli
指定要在成员上执行所有跟踪操作。
注: 要启用 CF 客户机跟踪,必须将环境变量 CA_TRACE_KEY_FILE 设置为现有文件。CF 客户机库使用此文件来创建 SHARED MEMORY 集。这个集合用于收集跟踪数据。另外,此文件的许可权和所有者信息用来设置所创建的 SHARED MEMORY 的许可权和所有者。在此环境变量设置为相同值的情况下启动的任何进程都会使用同一个 SHARED MEMORY 段。Db2 所使用的缺省名称为 ${INSTHOME}/sqllib/tmp/.CF_DB2TRACE.key。此环境变量在 db2profiledb2cshrc 文件中自动设置。但是,如果未读取并应用这些文件,您必须手动设置此值。
注: CF 客户机跟踪缓冲区不能超过 10 MB。
on
使用此参数可启动跟踪工具。请参阅以下共享跟踪选项小节,以获取参数列表。
-l [bufferSize]
此选项指定跟踪缓冲区的大小和行为。-l 指定保留最新的跟踪记录(即,缓冲区填满时覆盖最前面的记录)。缓冲区大小可以字节或兆字节为单位来指定。要以兆字节为单位指定缓冲区大小,请在缓冲区大小之后添加字符 M | m。例如,要使用 4 MB 的缓冲区启动 db2trc
db2trc on -l 4m
缺省值和最大跟踪缓冲区大小随操作系统而异。最小缓冲区大小为 1 MB。缓冲区大小必须是 2 的幂。
-i [bufferSize]
此选项指定跟踪缓冲区的大小和行为。-i 指定保留初始跟踪记录(即,缓冲区填满后,就不再将更多记录写入缓冲区)。缓冲区大小可以字节或兆字节为单位来指定。要以兆字节为单位指定缓冲区大小,请在缓冲区大小之后添加字符 M | m
-f filename
跟踪到文件时,必须指定标准文件名,如果 -l-i-f 选项配合使用,那么它们的 buffersize 值会限制磁盘上文件的大小。-l 表示保留最新的跟踪记录,并且允许在文件中回绕。-i 表示保留初始跟踪记录,并在达到文件大小限制时停止跟踪。要以兆字节为单位指定文件大小,请在对 -i 和/或 -l buffersize 指定的值之后添加字符 M | m,而对于千兆字节,请添加字符 G | g
-cli
跟踪 CLI/ODBC 驱动程序和 CLI 应用程序。
-clitracelevel loglevel
此参数从 V11.1 MP2 和 FP1 开始可用。此参数控制对于 CLI/ODBC 驱动程序和 CLI 应用程序,要转储至 CLI 跟踪的信息的日志记录级别。如果开启跟踪时未提供 -cli,那么将忽略此选项。可能的 loglevel 值是 [0-3],每个值的定义如下所示:
  • 0 - 记录捕获到的所有信息(当前缺省行为)。
  • 1 - 不记录应用程序所提供的数据绑定输入数据。绑定输入数据是指应用程序通过 API 调用(例如,SQLBindParameter()、SQLBindCol() 和 SQLExtendedBind() 等等),使用 rgbValue 应用程序数据指针提供给客户机的数据。
  • 2 - 不记录返回到应用程序的绑定输出数据。绑定输出数据是指客户机通过 API 调用 SQLBindParameter()、SQLBindCol() 和 SQLExtendedBind() 等等所设置的应用程序数据指针,使用 rgbValue 应用程序数据指针返回给应用程序的数据。
  • 3 - 不记录应用程序所提供的绑定输入数据,以及返回到应用程序的绑定输出数据。
以下示例显示 -clitracelevel 参数的用法:
db2trc on -cli -clitracelevel 1 -f dumpFile
db2trc off
db2trc fmt -cli dumpFile clitrcfile.txt
如果开启跟踪时未指定 -cli,那么此选项不适用。
-pattern
此参数从 V11.1 MP2 和 FP1 开始可用。此参数允许用户根据搜索模式,将信息记录到 CLI 跟踪中。此选项接受以 ;(分号)字符分隔的多个搜索模式。指定多个搜索模式时,应将其括在双引号内。指定以分号字符分隔的模式时,最多可以指定 10 个搜索模式,而且总长度不能超过 255 个字符。如果指定 10 个以上的搜索模式,那么将只考虑前 10 个搜索模式,而其他则予以忽略。如果长度超过 255 个字符,那么将返回相应错误,并且不会执行任何操作。只能在收集转储文件期间指定此选项,不能在格式化所生成转储文件中的 CLI 跟踪期间指定。搜索模式还可以包含 SELECT%table1 格式。这表示搜索 SELECT 关键字,后跟任何字符,再后跟 table1 关键字。以下示例显示 -pattern 参数的用法:
  • 示例 1

    以下命令搜索所有含“tab1”模式的语句。与“tab1”模式匹配的语句句柄的所有相关信息都会记录到转储文件中。

    db2trc on -cli -pattern tab1 -f file1.dmp
  • 示例 2

    以下命令搜索所有含“tabl”或“tab2”模式的语句。与“tab1”或“tab2”模式匹配的语句句柄的所有相关信息都会记录到转储文件中。这将搜索每一个所准备或执行的 SQL,并记录第一个匹配的模式。

    db2trc on -cli -pattern "tab1;tab2" -f file1.dmp
  • 示例 3
    以下命令搜索所有含 SELECT 且后跟“tab1”模式的语句。与“SELECT”关键字后跟任意字符再后跟“tab1”关键字匹配的语句句柄的所有相关信息都会记录到转储文件中。
    db2trc on -cli -pattern SELECT%tab1 -f file1.dmp
如果开启跟踪时未指定 -cli 选项,那么将会忽略此选项。
-dumpstmt
获取在启用 Db2 跟踪之前,CLI 驱动程序所分配的所有语句句柄的详细信息。这些详细信息包括启用 Db2 跟踪之前分配的语句句柄的所有预编译 SQL 语句。-dumpstmt 选项可以随 -cli 选项一起指定,也可以单独指定。同时指定 -dumpstmt 选项与 -m 选项时,掩码必须包含 191 组成部分 (*.*.191.*.*),以使 -dumpstmt 选项生效。

CLI 和 ODBC 应用程序必须具备线程安全性,并且您的操作系统必须支持多线程,才能使用 -dumpstmt 选项启用 Db2 跟踪。-dumpstmt 选项会跟踪使用 CLI 驱动程序的应用程序。

-errors
仅跟踪函数出口上的错误和非零返回码。不能将此选项与 -debug-perfcount 选项一起指定。
-lc
列示 CF 服务器或 CF 客户机的所有有效 CF 跟踪组件和跟踪级别。
-id [cf-id]
db2nodes.cfg 文件中指定的 CF 服务器标识。缺省情况下,将会针对所有 CF 服务器执行操作。但是,如果指定了此选项,那么将只影响指定的 CF 服务器。
-trccom
在 CLI/ODBC 跟踪中显示网络请求。
-stoptrc [-sqlcodes]
出现 -sqlcodes 所指定的其中一个 SQLCODE 时停止跟踪。-sqlcodes 是最多 20 个 SQLCODE 的列表(以逗号分隔),这些 SQLCODE 必须以带符号整数形式指定。
change
使用 change 选项可更改生效中的跟踪选项。请参阅以下共享跟踪选项小节,以获取参数列表。
-resume
使用此选项可继续执行暂挂的进程。如果未启用 -suspend,那么无法继续执行。
共享的 trace-options
onchange 之间共享的公共跟踪选项。
-m mask
减少所收集或格式化的数据量。跟踪掩码的格式如下所示:types.products.components.functions.categories

掩码值由 IBM 支持人员提供。

该掩码由 5 个部分组成(跟踪记录类型、产品、组件、函数和函数类别)。每一部分都可以由逗号分隔的列表、连字符分隔的范围或单个条目组成。可以使用星号 (*) 来匹配任何内容。可以按名称或对应的编号来指定字段值。可以使用由 productscomponentsfunctions 部分的名称组成的短掩码格式。示例:-m "entry,exit.*.SQLO,SQLE.*.*"

将掩码设置为 "*.*.*.*.*" 相当于不指定掩码。

Db2 pureScale® 环境中,掩码已重载,因此可以启用 CF 服务器和/或 CF 客户机跟踪。处理 CF 时,使用掩码的方式略有不同。

您可使用 -lc 选项来查找掩码的值。对于 CF 服务器和 CF 客户机,跟踪掩码的各个部分有如下含义:
  • types 始终为 *
  • productsCFCFCLI(大小写无关紧要)
  • components 是可以使用 -lc 标志列出的一个或多个 CF 服务器或 CF 客户机组件的任意组合
  • functions 始终为 *,因为 CF 不支持此功能
  • categories 是可以使用 -lc 标志列出的一个或多个 CF 服务器或 CF 客户机跟踪级别的任意组合
示例:-m "*.CF.svr_list.*.CF_TRACE_ERROR,CF_TRACE_ALL"
-p pid [.tid]
仅针对指定的进程标识 (pid) 和线程标识 (tid) 启用跟踪工具。如果指定了 tid,那么必须包括句点 (.)。对于一个进程标识,可以指定多个线程标识。一个 pid 的多个 tids 以句点分隔。各个 pid tid 对之间以逗号分隔。最多可以有 64 个 tid 与一个 pid 配对。
例如,要对进程 10、20 和 30 启用跟踪,语法为:
db2trc on -p 10,20,30               
要仅对进程 100 的线程 33 以及进程 200 的线程 66 启用跟踪,语法为:
db2trc on -p 100.33,200.66
要对具有线程 1、2、3 和 4 的进程 77 以及具有线程 5、6、7 和 8 的进程 88 启用跟踪,请使用以下语法:
db2trc on -p 77.1.2.3.4,88.5.6.7.8
-c cpid
仅跟踪或格式化此同伴进程。
-rc returnCode
returnCode 视为系统错误。必须以带符号整数形式指定 returnCode
-e maxSysErrors
发生 maxSysErrors 系统错误后停止跟踪。
-t
包括时间戳记。
-debug
这是供 IBM 支持人员用于调试的内部选项。不建议使用。
info
以下是此参数所列环境信息的示例:

D:\Program Files\IBM\SQLLIB\BIN>db2trc info
Marker                  :  @TRACE@
Trace version           :      7.0
Platform                :       NT
Build level             :  s060629
maxBufferSize           : 2097152 bytes (2 MB)
auxBufferSize           : 6291456 bytes (6 MB)
allocationCount         : 1
DB2TRCD pid             : 2384
DB2TRCD64 pid           : 0
Trace destination       : <shared memory buffer>
debug                   : disabled
debug runtime passno    : 0
numSuspended            : 0
Trace starting time : 2011-03-25-15.03.58.909713-240

Buffer size             : 2097152 bytes (2 MB)
Allow buffer to wrap    : yes
Mask                    : *.*.*.*.*
Timestamps              : enabled
PID.TID mask            : all
Fixed data mask #1      : all
Fixed data mask #2      : all
Max system errors       : infinite
Treat this rc as sys err: none
Member mask             : none
Application ID mask     : none
Application Handle mask : none
dump dumpFile
将存储在缓冲区中的二进制格式跟踪信息转储至文件。以下命令将信息放入当前目录中名为 db2trc.dmp 的文件:
db2trc dump db2trc.dmp
请随此参数一起指定转储文件名。除非指定了路径,否则二进制格式转储文件会保存在当前目录中。
-q
静默方式。
ccfmt destFile
转储并格式代码覆盖范围跟踪。请指定转储目标文件名。
flow dumpFile destFile
将跟踪转储至二进制文件后,将其格式化为可读文本文件。请使用 flow 选项来格式化按进程或线程排序的记录。请指定转储文件名,以及要生成的目标文件名。例如:
db2trc flow db2trc.dmp db2trc.flw
-x firstRecord [-lastRecord]
仅显示记录号 firstRecordlastRecord
-data
将任何跟踪记录数据包括在流中。
-t
包括 sec:nsec 格式的时间戳记(如果可用)。
-wc
包括挂钟时间戳记(如果可用)。要使用此选项,必须通过同时指定 -t 选项(用于捕获时间戳记)来开启跟踪。要获取用法示例,请参阅示例 1。
-mf
为每个不同的流生成单独的目标文件。
-rds
包括 RDS 操作员信息(如果可用)。
format dumpFile destFile
将跟踪转储至二进制文件后,将其格式化为可读文本文件。使用 format 选项可按时间顺序格式化记录。
-x firstRecord [-lastRecord]
仅显示记录号 firstRecordlastRecord
-r
逆序输出。
-xml
以 XML 可解析格式输出数据。
-c
格式化通信缓冲区。
-cli
格式化跟踪二进制文件,以便在可读文本文件中显示 CLI 驱动程序函数和 CLI 应用程序缓冲区。destFile 变量可以是下列其中一个对象:
  • 要创建的格式化跟踪文件的名称。
    db2trc fmt –cli dumpFile clitrcfile.txt
  • 含路径名的格式化跟踪文件名。
    db2trc fmt –cli dumpFile /TMP/clitrcfile.txt
    
  • 用户有权写入的现有目录。
    db2trc fmt –cli dumpFile /TMP
    
如果 destFile 目录存在,并且用户对该目录具有写许可权,那么跟踪会格式化为基于进程标识和线程标识的单独文本文件。使用 -cli 选项启用并使用 -cli 选项格式化的 Db2 跟踪输出与传统 CLI 跟踪完全相同。如果已在启动 db2trc 时指定 -t,那么跟踪会包括以下格式的时间戳记:
[processor_ticks.milliseconds - mm/dd/yyyy hour:min:sec.milliseconds]
destFile 目录中跟踪文件的名称包含 p<pid>t<tid>.cli。如果存在与 destFile 值同名的目录,并且用户对该目录不具有写许可权,那么会返回错误。

从 Db2 V11.1 M4FP4 开始,使用 db2trc 命令生成的 CLI 跟踪文件也包含 db2 跟踪记录号。CLI 跟踪中 ODBC API 的记录号与生成的流文件和格式文件中存在的这些 API 的记录号相同。

-ncf
请勿使用组件定制格式化。
-errors
仅跟踪函数出口上的错误和非零返回码。
-global
指定 db2trc 也在远程主机上运行。 在 Db2 V9.7 FP4 和更高版本的修订包中,此选项已不推荐使用。
-host hostname
指定仅在指定的主机上运行 db2trc。如果未指定此参数,那么将在本地主机上发出此命令。如果指定了多台主机,那么所有主机名都必须有效,此命令才能完成。
-sdir shared directory path
指定共享目录,供 db2trc 命令用来保存适用于 -fdump 参数的文件。
perffmt dumpFile destFile
将包含性能计数器数据的转储文件格式化为可读文本。
formattedFlow| fflw dumpFile destFile
将转储到二进制文件的跟踪格式化为可读文件。此文件中的数据按时间顺序排序,而不是按 PID 和 TID 分组(指定了 -flow 参数时发生的情况)。
-x firstRecord [-lastRecord]
显示记录号 firstRecordlastRecord
-data
将任何跟踪记录数据包括在流中。
-t
包括 sec:nsec 格式的时间戳记(如果可用)。
-wc
包括挂钟时间戳记(如果可用)。要使用此参数,必须通过同时指定 -t 选项(用于捕获时间戳记)来开启跟踪。
-rds
包括关系数据服务 (RDS) 操作员信息(如果可用)。
perfrep dumpFiledestFile
将转储到二进制文件的跟踪格式化为性能报告文本文件。
-g
按跟踪的成员(节点)号、PID 和 TID 的组合对输出进行分组。
-sort count|timespent|timeelapsed
通过下列其中一种方式对输出进行排序:
count
每个函数的调用次数。
timespent
在每个函数中花费的时间。这是缺省值。
timeelapsed
在每个函数中花费的耗用时间。
-order asc|ascending|desc|descending
指定输出数据的排序顺序:
asc | ascending
升序。
desc | descending
降序。这是缺省值。
print -stack recordID flowFile
针对所指定流文件中指定的记录标识,打印所有堆栈帧的回溯。有关更多详细信息,请参阅示例 5。
clear
清除跟踪缓冲区的内容,特别是正好在连接至特定数据库之前的内容。使用此选项可以从缓冲区中清除与所需数据库建立连接之前累积的无用信息,从而减少收集的信息量。
stop
此收集选项停止随需应变的跟踪;所有进程都暂挂跟踪,但保留跟踪缓冲区的内容,以便稍后可以转储。此操作与 off 选项相对,后者会完全禁用跟踪工具。
off
禁用跟踪工具。将跟踪转储到文件后,可通过输入以下命令禁用跟踪工具:
db2trc off
-id [cf-id]
db2nodes.cfg 文件中指定的 CF 服务器标识。缺省情况下,将会针对所有 CF 服务器执行操作。但是,如果指定了此选项,那么仅影响指定的 CF 服务器。
-u
提供有关大部分命令行选项的其他信息。命令行条目的一般格式在以下用法说明一节中给出。以下示例针对 DAS 实例,获取转储命令的更多信息:
db2trc das dump -u

示例

示例 1
要捕获包含挂钟时间戳记的跟踪,在开启跟踪时必须指定 -t 选项,并且必须指定 -t -wc 选项和 flow 选项,以便将挂钟时间戳记输出到可读文本文件中。以下是您可以执行的步骤示例:
  1. 通过执行以下命令开启跟踪,捕获时间戳记信息,并指定转储文件名:
    db2trc on -t -f db2trc.dmp
  2. 在跟踪时间段结束后,通过执行以下命令关闭跟踪:
    db2trc off
  3. 要将二进制转储(.dmp)文件格式化为可读的文本文件(例如,db2trc.flw),请执行以下命令:
    db2trc flow -t -wc db2trc.dmp db2trc.flw
    以下是格式化完成时显示的输出示例:
    
    Total number of trace records     : 3349
    Trace truncated                   : NO
    Trace wrapped                     : NO
    Number of trace records formatted : 43 (pid: 5414 tid 182967198368 node: 0)
    Number of trace records formatted : 2690 (pid: 29615 tid 182960067008 node: 0)
    Number of trace records formatted : 118 (pid: 5394 tid 183102335328 node: 0)
    Number of trace records formatted : 498 (pid: 29616 tid 182965078816 node: -1)
  4. 要查看可读文本文件 db2trc.flw 的内容,请执行以下命令:
    more db2trc.flw
    以下是读取包含挂钟时间戳记信息的可读文本文件内容时显示的输出示例:
    pid = 5414 tid = 182967198368 node = 0
    
    1    0.000000000  clp_bp_con data [probe 21] 2009-06-16-11.02.32.38407400
    2    0.000038000  | sqlossig entry 2009-06-16-11.02.32.38411200
    3    0.000050000  | sqlossig exit 2009-06-16-11.02.32.38412400
    4    0.000057000  | sqlorque2 entry 2009-06-16-11.02.32.38413100
    5    0.000062000  | | sqlogmblkEx entry 2009-06-16-11.02.32.38413600
    6    0.000070000  | | | sqloGetPrivatePoolHandle entry 2009-06-16-11.02.32.38414400
    7    0.000077000  | | | sqloGetPrivatePoolHandle exit 2009-06-16-11.02.32.38415100
    8    0.000088000  | | sqlogmblkEx mbt [Marker:PD_OSS_ALLOCATED_MEMORY] 2009-06-16-11.02.32.38416200
    9    0.000092000  | | sqlogmblkEx exit 2009-06-16-11.02.32.38416600
    10   0.000094000  | | sqlorqueInternal entry 2009-06-16-11.02.32.38416800
    11   0.000096000  | | | sqloSetAlarmApp entry 2009-06-16-11.02.32.38417000
    12   0.000099000  | | | | sqloSigMask entry 2009-06-16-11.02.32.38417300
    13   0.000101000  | | | | sqloSigMask exit 2009-06-16-11.02.32.38417500
    14   0.000103000  | | | | sqlohsig entry 2009-06-16-11.02.32.38417700
    15   0.000105000  | | | | sqlohsig exit 2009-06-16-11.02.32.38417900
    16   0.000108000  | | | sqloSetAlarmApp exit 2009-06-16-11.02.32.38418200
    2825 5.000561000  | | | sqloClearAlarmApp entry 2009-06-16-11.02.37.38463500
    2826 5.000576000  | | | | sqloSigMask entry 2009-06-16-11.02.37.38465000
    2827 5.000579000  | | | | sqloSigMask exit 2009-06-16-11.02.37.38465300
    2828 5.000582000  | | | | sqlohsig entry 2009-06-16-11.02.37.38465600
    2829 5.000585000  | | | | sqlohsig exit 2009-06-16-11.02.37.38465900
    2830 5.000587000  | | | sqloClearAlarmApp exit 2009-06-16-11.02.37.38466100
    2831 5.000589000  | | sqlorqueInternal exit [rc = 0x870F00B9 = -2029059911 = SQLO_SEM_TIMEOUT] 2009-06-16...
    2832 5.000592000  | | sqlofmblkEx entry 2009-06-16-11.02.37.38466600
    2833 5.000597000  | | sqlofmblkEx mbt [Marker:PD_OSS_FREED_MEMORY] 2009-06-16-11.02.37.38467100
    2834 5.000599000  | | sqlofmblkEx exit 2009-06-16-11.02.37.38467300
    2835 5.000601000  | sqlorque2 exit [rc = 0x870F00B9 = -2029059911 = SQLO_SEM_TIMEOUT] 2009-06-16-11.02.37.38467500
    2836 5.000614000  clp_bp_con data [probe 21] 2009-06-16-11.02.37.38468800
    2837 5.000617000  | sqlossig entry 2009-06-16-11.02.37.38469100
    2838 5.000620000  | sqlossig exit 2009-06-16-11.02.37.38469400
    2839 5.000623000  | sqlorque2 entry 2009-06-16-11.02.37.38469700
    2840 5.000626000  | | sqlogmblkEx entry 2009-06-16-11.02.37.38470000
    2841 5.000628000  | | | sqloGetPrivatePoolHandle entry 2009-06-16-11.02.37.38470200
    2842 5.000631000  | | | sqloGetPrivatePoolHandle exit 2009-06-16-11.02.37.38470500
    2843 5.000636000  | | sqlogmblkEx mbt [Marker:PD_OSS_ALLOCATED_MEMORY] 2009-06-16-11.02.37.38471000
    2844 5.000638000  | | sqlogmblkEx exit 2009-06-16-11.02.37.38471200
    2845 5.000640000  | | sqlorqueInternal entry 2009-06-16-11.02.37.38471400
    2846 5.000643000  | | | sqloSetAlarmApp entry 2009-06-16-11.02.37.38471700
    2847 5.000646000  | | | | sqloSigMask entry 2009-06-16-11.02.37.38472000
    2848 5.000647000  | | | | sqloSigMask exit 2009-06-16-11.02.37.38472100
    2849 5.000649000  | | | | sqlohsig entry 2009-06-16-11.02.37.38472300
    2850 5.000651000  | | | | sqlohsig exit 2009-06-16-11.02.37.38472500
    2851 5.000654000  | | | sqloSetAlarmApp exit 2009-06-16-11.02.37.38472800
示例 2
以下是使用 -member 跟踪掩码的示例
  • db2trc on -member n1[,n2,n3,n64]
    使用此命令可指定所要跟踪的数据库成员或分区。
    注: 必须是整数。如果指定了多个成员,那么必须以逗号分隔。最多可以指定 64 个成员。
  • db2trc chg -member n1[,n2,n3,n64]

    使用此命令可将成员掩码更改为指定的数据库成员或分区。

  • db2trc stop -member n1[,n2,n3,n64]
    使用此命令可从成员掩码中移除成员。从成员掩码中移除最后一个成员时,跟踪就会完全停止,这与运行 db2trc stop 命令的效果相同。
    • 此命令所发出的成员号必须存在于当前成员掩码中。运行 db2trc info 可显示当前成员掩码。
    • 如果在未指定 -member 选项的情况下运行 db2trc on 命令,那么成员掩码中不会有任何成员。这意味着跟踪所有成员。
    • 在此命令中指定当前主机中的所有成员(由 db2nodes.cfg 文件定义)相当于运行 db2trc stop。在此情况下,运行不带 -member 选项的 db2trc stop 时,将会对该主机上的所有成员完全停止跟踪。
  • db2trc off -member n1[,n2,n3,n64]
    使用此命令可从成员掩码中移除成员。从成员掩码中移除最后一个成员时,将会关闭跟踪,这与运行 db2trc off 的效果相同。
    • 此命令所发出的成员号必须存在于当前成员掩码中。运行 db2trc info 可显示当前成员掩码。
    • 如果在未指定 -member 选项的情况下运行 db2trc on 命令,那么成员掩码中不会有任何成员。这意味着跟踪所有成员。
    • 在此命令中指定当前主机中的所有成员(由 db2nodes.cfg 文件定义)相当于运行 db2trc off。在不指定 -member 选项的情况下运行 db2trc off 时,将会在该主机上关闭跟踪
  • db2trc flw -member n1[,n2,n3,n64]db2trc fmt -member n1[,n2,n3,n64]

    使用此命令可指定要包括在格式化跟踪中的成员。

示例 3
以下是将 -member 跟踪掩码与定义为以下数据的 db2nodes.cfg 配合使用的示例:
0 host1 0
1 host1 1
2 host1 2
3 host2 0
4 host3 0
  • db2trc on[ chg] -member 1,2,3

    运行 -member 时,成员号会映射到 -member 所指定的相关主机名,然后通过 rah(或 db2_all)命令在相关主机上运行。对于此示例,db2trc -member 1,2 将在 host1 上运行,而 db2trc -member 3 将在 host2 上运行。

  • db2trc on -host host1,host2

    db2trc on 将在 host1 和 host2 上运行

  • db2trc on -member all

    db2trc on 将在 host1、host2 和 host3 上运行

示例 4
以下是使用 -appid-apphdl 参数的示例。
  • db2trc on -appid appid1,appid2

    此命令针对特定的应用程序标识开启跟踪。带有 -appid 参数的 db2trc 命令最多支持 12 个应用程序标识。

  • db2trc chg -appid appid1,appid2

    此命令更改或重置特定应用程序标识。要进行重置,请运行 db2trc chg -appid none 命令。此命令移除掩码中的所有应用程序标识。

  • db2trc on -apphdl apphdl1,apphdl2,apphdl3

    此命令针对特定的应用程序句柄开启跟踪。此命令最多支持 16 个应用程序句柄。

  • db2trc chg -apphdl apphdl1,apphdl2,apphdl3

    此命令更改或重置特定应用程序句柄。要进行重置,请运行 db2trc chg -apphdl none 命令。此命令会移除掩码中的所有应用程序句柄

示例 5
以下示例是样本流文件 test.flw
pid = 1608 tid = 47604608002368 node = 0

1           sqlossig entry [eduid 1 eduname db2sysc]
2           sqlossig exit [rc = 0x840F0001 = -2079391743 = SQLO_ACCD]
3           sqkfFastCommManager::ResourceSelfTuning entry [eduid 1 eduname db2sysc]
4           | sqlogmt entry [eduid 1 eduname db2sysc]
5           | sqlogmt exit
6           sqkfFastCommManager::ResourceSelfTuning exit
7           sqkfFastCommManager::CollectResourceUsageStats entry [eduid 1 eduname db2sysc]
8           | sqlogmt entry [eduid 1 eduname db2sysc]
9           | sqlogmt exit
10          sqkfFastCommMandager::CollectResourceUsageStats exit
11          sqkfFastCommManager::UpdateMemoryConsumptionStats entry [eduid 1 eduname db2sysc]
12          sqkfFastCommManager::UpdateMemoryConsumptionStats exit
13          sqleSyscUpdateDynamicVars entry [eduid 1 eduname db2sysc]
14          | sqloGetSysMonSetting entry [eduid 1 eduname db2sysc]
15          | | sqloGetEnvUnCached entry [eduid 1 eduname db2sysc]
16          | | | EnvPrfOpen entry [eduid 1 eduname db2sysc]
17          | | | | EnvKeyName entry [eduid 1 eduname db2sysc]

19          | | | | | | sqloxltc_app entry [eduid 1 eduname db2sysc]
20          | | | | | | sqloxltc_app exit
21          | | | | | sqloGetUserAttribByName data [probe 770]
22          | | | | | sqloGetUserAttribByName data [probe 820]
23          | | | | | | sqloxult_app entry [eduid 1 eduname db2sysc]
24          | | | | | | sqloxult_app exit
25          | | | | | sqloGetUserAttribByName exit
26          | | | | EnvKeyName exit
27          | | | EnvPrfOpen exit
28          | | sqloGetEnvUnCached exit
29          | sqloGetSysMonSetting exit
30          sqleSyscUpdateDynamicVars exit
要打印 test.flw 文件中第 5 行的所有堆栈帧回溯,请执行以下命令:
db2trc print -stack 5 test.flw
db2trc print -s 5 test.flw
以下是显示的输出:
pid = 1608 tid = 47604608002368 node = 0
3           sqkfFastCommManager::ResourceSelfTuning entry [eduid 1 eduname db2sysc]
4           | sqlogmt entry [eduid 1 eduname db2sysc]
5           | sqlogmt exit
请注意,test.flw 文件中不存在第 18 行。如果指定的记录标识不存在,您会收到错误消息:
$ db2trc print -stack 18 test.flw
ERROR: Unable to find the Record ID 18 . Exiting.
请参阅命令语法图,以了解全局选项命令语法信息。有关更多详细信息,请参阅以下 CF 和 CFCLI 用法示例小节中的示例 4。

CF 和 CFCLI 用法示例

示例 6
要针对 xport_common (CF_TRACE_WARNING)srv_init (CF_TRACE_PATH|CF_TRACE_ERROR)srv_common (CF_TRACE_ALL) 组件开启跟踪,请运行以下命令:

db2trc cf on -m "*.CF.xport_common,srv_init,srv_common.*.CF_TRACE_WARNING,0x09,CF_TRACE_ALL"
运行该命令后,所有其他组件的跟踪均已关闭。
示例 7
要针对 CF_TRACE_ALL 级别的所有 CF 客户机组件开启跟踪,请运行以下命令:
db2trc cfcli on
示例 8
要针对 srv_list (CF_TRACE_ERROR) 组件以及 CF_TRACE_ALL 级别的所有其他组件开启跟踪,请运行以下命令:
db2trc cf on -m "*.CF.srv_list.*.CF_TRACE_ERROR,CF_TRACE_ALL"
示例 9
要针对 CF_TRACE_WARNING 或 CF_TRACE_DEBUG 级别的所有 CF 组件开启跟踪,请运行以下命令:
db2trc cf on -m "*.CF.*.*.CF_TRACE_WARNING|CF_TRACE_DEBUG"
示例 10
要针对 db2nodes.cfg 文件中列示的所有 CF 服务器以及 CF_TRACE_ALL 级别的所有 CF 组件开启跟踪,请运行以下命令:
db2trc cf on
示例 11
要仅针对 db2nodes.cfg 文件中列示的 CF 服务器 129 以及 CF_TRACE_ALL 级别的所有 CF 组件开启跟踪,请运行以下命令:
db2trc cf on -id 129
示例 12
以下示例显示 perfrep 参数的用法:
  1. 通过发出以下命令开启跟踪:
    db2trc on -t
  2. 执行 Db2 操作,例如,发出以下命令:
    db2start
  3. 要将跟踪信息转储至二进制文件,请发出以下命令:
    db2trc dump db2trc.dmp
  4. 要将二进制文件格式化为按成员号、PID 和 TID 分组的可读输出,请发出以下命令:
    db2trc perfrep -g db2trc.dmp db2trc.perfrep
    样本输出如下所示:
    Node : 0 , PID : 12648456 , TID : 258
    
      nCalls   TotalElapsed     AvgElapsed     TotalSpent       AvgSpent FunctionName
           2   22.163451643   11.081725821   22.163444161   11.081722081 sqlorqueInternal
           3    0.097682328    0.032560776    0.097682328    0.032560776 OSSHLibrary::load
           1    0.015628456    0.015628456    0.015579146    0.015579146 sqlnlsgetcpcc
           1    0.015929874    0.015929874    0.010516227    0.010516227 sqloRunInstance
           1    0.007650045    0.007650045    0.006686877    0.006686877 sqloexec
           1    0.004468380    0.004468380    0.004468380    0.004468380 sqlosearchpath
           1    0.004469429    0.004469429    0.002867957    0.002867957 sqloWatchDogSetup
           2    0.049929905    0.024964952    0.002643447    0.001321724 pdLogInternal
          10    0.002660025    0.000266002    0.002576667    0.000257667 sqloGetUserAttribByName
           3    0.002527244    0.000842415    0.002504231    0.000834744 sqloopenp
           2    0.001962144    0.000981072    0.001932671    0.000966335 sqloGetUserAttribById
           5    0.001829002    0.000365800    0.001344719    0.000268944 GlobalReg::GlobalReg
          15    0.001569204    0.000104614    0.001109852    0.000073990 sqlogmblkEx
           1    0.044276370    0.044276370    0.000982115    0.000982115 ossGetCPUInfo
           1   22.178500518   22.178500518    0.000686105    0.000686105 sqleWatchDog
           3    0.000667789    0.000222596    0.000667789    0.000222596 sqloAddOneReservedHandle
          40    0.000720231    0.000018006    0.000604822    0.000015121 GlobalReg::UnpackRecord
           5    0.002412400    0.000482480    0.000589444    0.000117889 GenRegBin::GetNext
    [....]
    Node : 0 , PID : 11731144 , TID : 2
    
      nCalls   TotalElapsed     AvgElapsed     TotalSpent       AvgSpent FunctionName
           1   18.300280961   18.300280961   18.300280961   18.300280961 sqloAlarmThreadEntry
           1   18.301955934   18.301955934    0.000651340    0.000651340 sqloEDUEntry
          10    0.000346784    0.000034678    0.000216876    0.000021688 sqlogmblkEx
           1    0.000475853    0.000475853    0.000161166    0.000161166 sqlo_create_init_EDU_data
          10    0.000157996    0.000015800    0.000140807    0.000014081 sqlofmblkEx
           1    0.000178087    0.000178087    0.000124753    0.000124753 sqloGetShrEDUWaitElem
           1    0.000129908    0.000129908    0.000081576    0.000081576 SMemBasePool::getNewChunkSubgroup
           1    0.000200591    0.000200591    0.000047364    0.000047364 sqlo_destroy_EDU_data
           1    0.000045839    0.000045839    0.000045839    0.000045839 sqlo_waitlist::post
           1    0.000031140    0.000031140    0.000024636    0.000024636 SMemSet::getChunksFromTree
           1    0.000033143    0.000033143    0.000018288    0.000018288 sqloFreeShrEDUWaitElem
           2    0.000016570    0.000008285    0.000016570    0.000008285 sqloMemProtEDU_init
           2    0.000013807    0.000006904    0.000013807    0.000006904 SqloMemController::updateCachedMemory
           1    0.000059408    0.000059408    0.000013568    0.000013568 sqloPostEDUWaitPost
           1    0.000017188    0.000017188    0.000011827    0.000011827 SMemSet::returnContiguousChunks
           2    0.000011225    0.000005613    0.000011225    0.000005613 sqlogmt2
    [....]
示例 13
以下示例显示 formattedFlow 参数的用法:
  1. 通过发出以下命令开启跟踪:
    db2trc on -t
  2. 执行 Db2 操作,例如,发出以下命令:
    db2start
  3. 要将跟踪信息转储至二进制文件,请发出以下命令:
    db2trc dump db2trc.dmp
  4. 要将二进制文件格式化为可读报告,请发出以下命令:
    db2trc fflw db2trc.dmp db2trc.fflw
    样本输出如下所示:
    PID-TID       EduName  Node RecNum Function
    [...]                                 
    12648456-258  db2wdog  [ 0] 19735  |||cryptContextInit entry
    12648456-258  db2wdog  [ 0] 19736  |||cryptContextInit data [probe 10]
    12648456-258  db2wdog  [ 0] 19737  |||cryptContextInit data [probe 100]
    12648456-258  db2wdog  [ 0] 19738  |||cryptContextInit exit
    12648456-258  db2wdog  [ 0] 19739  ||sqloWatchDogSetup data [probe 2]
    12648456-258  db2wdog  [ 0] 19740  ||sqloWatchDogSetup exit
    12648456-258  db2wdog  [ 0] 19741  ||sqlogmblkEx entry
    12648456-258  db2wdog  [ 0] 19742  |||sqloGetPrivatePoolHandle entry
    12648456-258  db2wdog  [ 0] 19743  |||sqloGetPrivatePoolHandle exit
    11731144-258  db2sysc  [ 0] 19744  sqloGetEnvInternal entry
    11731144-258  db2sysc  [ 0] 19745  sqloGetEnvInternal exit [rc = 0x870F0104 = -2029059836 = RC_ENV_NOT_FOUND]
    12648456-258  db2wdog  [ 0] 19746  ||sqlogmblkEx mbt [Marker:PD_OSS_ALLOCATED_MEMORY]
    12648456-258  db2wdog  [ 0] 19747  ||sqlogmblkEx exit
    11731144-258  db2sysc  [ 0] 19748  sqloSystemControllerMain entry
    11731144-258  db2sysc  [ 0] 19749  |sqloChangeProcessName entry
    11731144-258  db2sysc  [ 0] 19750  |sqloChangeProcessName data [probe 5]
    11731144-258  db2sysc  [ 0] 19751  |sqloChangeProcessName exit
    11731144-258  db2sysc  [ 0] 19752  |sqloGetShrEDUWaitElem entry
    11731144-258  db2sysc  [ 0] 19753  ||sqlo_waitlist::initialize entry
    11731144-258  db2sysc  [ 0] 19754  ||sqlo_waitlist::initialize exit
    11731144-258  db2sysc  [ 0] 19755  ||sqlogmblkEx entry
    11731144-258  db2sysc  [ 0] 19756  ||sqlogmblkEx mbt [Marker:PD_OSS_ALLOCATED_MEMORY]
    11731144-258  db2sysc  [ 0] 19757  ||sqlogmblkEx exit
    11731144-258  db2sysc  [ 0] 19758  |sqloGetShrEDUWaitElem data [probe 10]
    11731144-258  db2sysc  [ 0] 19759  |sqloGetShrEDUWaitElem data [probe 20]
    11731144-258  db2sysc  [ 0] 19760  |sqloGetShrEDUWaitElem exit
    12648456-258  db2wdog  [ 0] 19761  |sqloRunInstance data [probe 2]
    12648456-258  db2wdog  [ 0] 19762  |sqloRunInstance exit
    11731144-258  db2sysc  [ 0] 19763  |sqloGetKernelThreadIDFromEDUID entry [eduid 258 eduname db2sysc]
    [...]

用法说明

在执行跟踪的过程中,必须多次发出 db2trc 命令。
  1. 开启跟踪,这会在 Db2 实例启动之后,立即开始收集指定数据并将其存储在缓冲区中
  2. 在连接至数据库之前清空缓冲区
  3. 将二进制格式数据转储到转储文件中
  4. 关闭跟踪
  5. 将转储文件格式化为易读文本目标文件
如果您使用 -l 参数来跟踪到内存,那么跟踪缓冲区可以设置为小于所指定跟踪值的值。进行设置之后,只要 Db2 库仍装入在操作系统中,就无法将分配的跟踪缓冲区更改为更大的值。可以使用下列步骤来增加最大跟踪缓冲区大小。
  1. 停止 Db2 实例
  2. 使用 -l 参数开启跟踪,并设置最大跟踪缓冲区大小
  3. 启动 Db2 实例
  4. 清空跟踪缓冲区
以下示例显示可供您运行以执行 SAMPLE 数据库跟踪,并将跟踪缓冲区内容写入 dmp 文件的命令:
db2trc on -i 8m -m "*.*.2.*.*" -t
db2start
db2trc clear
db2 connect to sample
db2trc dump dmp
db2trc off
注: 在 Windows 操作系统上,db2trc 命令会跟踪属于同一安装副本的所有 Db2 实例。在 Linux 和 Unix 操作系统上,可以个别地跟踪 Db2 实例。
以下示例显示 db2trc 命令的一般语法。可以将命令选项分组为两个广泛的阶段:收集和解析。
  • 收集选项包括开启或关闭跟踪,指定跟踪缓冲区大小,指定或更改跟踪选项,转储跟踪,以及清空跟踪缓冲区。
  • 解析选项包括按进程或线程对格式化跟踪记录进行时间顺序排序。
第一阶段 - 收集
        用法:db2trc [facility] <command> [-u]

          [facility]
                 db2 - Db2 实例(缺省值)
                 das - Db2 管理服务器实例

          <command>
                 change - 更改跟踪选项
                 clear  - 清空跟踪缓冲区
                 dump   - 生成跟踪转储文件
                 info   - 信息
                 off    - 禁用跟踪工具
                 on     - 启用跟踪工具
                 stop   - 停止跟踪

第二阶段 - 解析
        用法:db2trc <command> [-u]

          <command>
                 ccfmt   - 转储并格式化代码覆盖范围跟踪
                 flow    - 生成控制流图
                 format  - 格式化
                 info    - 信息
                 perffmt - 格式化性能跟踪

有关更多信息,请对上述任何命令添加“-u”选项
在以上“第二阶段 - 解析”小节中,命令 ccfmt 转储并格式化代码覆盖范围跟踪。代码覆盖范围跟踪是 db2trc 的扩展,用于保存函数入口、出口、探测点和代码路径的计数。您可以使用代码覆盖范围跟踪来收集有关哪些函数的使用量较大,或者哪些函数在测试期间未曾涉及的统计信息。

跟踪数据库服务器时,建议先开启跟踪工具,再启动数据库管理器。对于在任何 UNIX 和 Linux 平台上运行的数据库管理器,这是让其立即了解到跟踪更改的最可靠方法。

要开启跟踪并接收特定于 Db2 Text Search 的信息,可以使用含 cie 组件代码 (155) 的掩码:
db2trc on -m "*.*.155.*.*"

当您知道问题与特定数据库分区相关时,请仅跟踪该数据库分区。请使用选项 db2trc on -member NN 来指定要跟踪的数据库分区。

当问题与特定应用程序标识相关时,您可使用 db2trc 选项 db2trc on -appid <appID>,将跟踪限制为仅针对该特定应用程序标识进行。