您的位置:首页 > 数据库

DB2中,查看某个应用正在执行的SQL语句

2016-04-26 14:30 459 查看
问题:DB2中,知道应用的application ID, 如何查看这个应用正在执行的SQL语句?

答案:这里给出两种方法,第一种是查看应用的snapshot,第二种是使用db2pd工具

方法1:使用db2 snapshot,这种方法不但可以看到正在执行的SQL语句,还可以看这个SQL语句是什么时候开始执行的,结合抓取snapshot的时间,就可以推断出它执行了多久。 但要求执行SQL之前,监控开关是开的。

如何正确地打开监控开关?

C:\windows\system32>db2 get monitor switches

            Monitor Recording Switches

Switch list for member 0

Buffer Pool Activity Information  (BUFFERPOOL) = OFF

Lock Information                        (LOCK) = OFF

Sorting Information                     (SORT) = OFF
SQL Statement Information          (STATEMENT) = ON  2016-04-26 12:59:14.861177

Table Activity Information             (TABLE) = OFF

Take Timestamp Information         (TIMESTAMP) = ON  2016-04-26 11:02:21.175930
Unit of Work Information                 (UOW) = ON  2016-04-26 12:59:14.861179

C:\windows\system32>db2 "values application_id()"

1

--------------------------------------------------------------------------------

*LOCAL.DB2INST1.160426050147

  1 record(s) selected.

C:\windows\system32>db2 "insert into t2 select * from t1"

这时打开另一个session,发出get snapshot命令:

C:\windows\system32>db2 get snapshot for application applid *LOCAL.DB2INST1.160426050147

            Application Snapshot

Application handle                         = 138
Application status                         = UOW Executing

Status change time                         = 2016-04-26 13:52:07.835904

Application code page                      = 1386

Application country/region code            = 86

DUOW correlation token                     = *LOCAL.DB2INST1.160426050147

Application name                           = db2bp.exe

Application ID                             = *LOCAL.DB2INST1.160426050147

..

Database name                              = SAMPLE

Database path                              = C:\DB2INST1\NODE0000\SQL00001\MEMBER0000\

Client database alias                      = SAMPLE

Input database alias                       =

Last reset timestamp                       =
Snapshot timestamp                         = 2016-04-26 13:52:14.584789

..

Statement type                             = Dynamic SQL Statement

Statement                                  = Execute Immediate

Section number                             = 203

Application creator                        = NULLID

Package name                               = SQLC2K26

Consistency Token                          =

Package Version ID                         =

Cursor name                                =

Statement member number                    = 0
Statement start timestamp                  = 2016-04-26 13:52:07.835866

Statement stop timestamp                   =

lapsed time of last completed stmt(sec.ms)= 0.000000

Total Statement user CPU time              = 1.092008

Total Statement system CPU time            = 0.109201

SQL compiler cost estimate in timerons     = 97960

SQL compiler cardinality estimate          = 2943367

Degree of parallelism requested            = 2

Number of agents working on statement      = 2

Number of subagents created for statement  = 2

Statement sorts                            = 0

Total sort time                            = 0

Sort overflows                             = 0

Rows read                                  = 658812

Rows written                               = 654696

Internal rows deleted                      = 0

Internal rows updated                      = 0

Internal rows inserted                     = 0

Rows fetched                               = 0

Buffer pool data logical reads             = Not Collected

Buffer pool data physical reads            = Not Collected

Blocking cursor                            = NO

Dynamic SQL statement text:
insert into t2 select * from t1

从快照中可以看到,这个应用正处于uow executing状态,当前SQL的开始时间是2016-04-26 13:52:07.835866,还没有结束,目前时间是2016-04-26 13:52:14.584789,SQL语句内容为insert into t2 select * from
t1

方法2, 使用db2pd,收集如下信息

C:\windows\system32>db2pd -db sample -app -dyn

Database Member 0 -- Database SAMPLE -- Active -- Up 0 days 00:50:23 -- Date 2016-04-26-13.52.10.917000

Applications:

Address            AppHandl [nod-index] NumAgents  CoorEDUID  Status                  C-AnchID C-StmtUID  L-AnchID L-StmtUID  Appid                        

0x0000000007DB0080 138      [000-00138] 3          9220       UOW-Executing           364      1          364      1          *LOCAL.DB2INST1.160426050147 

0x0000000007D80080 144      [000-00144] 1          9628       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050154      

0x0000000007D20080 143      [000-00143] 1          9776       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050153      

0x0000000007DA0080 142      [000-00142] 1          9884       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050152      

0x0000000007C80080 148      [000-00148] 1          6156       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050158      

0x0000000007DC0080 141      [000-00141] 1          3864       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050151      

0x0000000007CD0080 147      [000-00147] 1          2472       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050157      

0x0000000007DE0080 140      [000-00140] 1          4828       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050150      

0x0000000007C70080 146      [000-00146] 1          9280       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050156      

0x00000000071A0080 139      [000-00139] 1          8448       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050149      

0x0000000007CE0080 145      [000-00145] 1          9968       ConnectCompleted        0        0          0        0          *LOCAL.DB2.160426050155      

Dynamic SQL Statements:

Address            AnchID StmtUID    NumEnv     NumVar     NumRef     NumExe     Text 

0x000000002521F000 120    1          1          1          1          1          values application_id()

0x00000000251BE3E0 364    1          1          1          4          4          insert into t2 select * from t1

Dynamic SQL Environments:

Address            AnchID StmtUID    EnvID      Iso QOpt Blk

0x000000002521F120 120    1          1          CS  5    B

0x00000000251FF3E0 364    1          1          CS  5    B

Dynamic SQL Variations:

Address            AnchID StmtUID    EnvID      VarID      NumRef     Typ Lockname                   Val Insert Time                Sect Size  Num Copies

0x000000002521F4A0 120    1          1          1          1          6   01000000010000000100000FD6 Y   2016-04-26-13.48.40.864655 7040       1     

0x0000000025219520 364    1          1          1          4          4   01000000010000000100802DD6 Y   2016-04-26-13.47.27.747480 9968       3     

可以看到应用*LOCAL.DB2INST1.160426050147 是UOW-Executing状态,对应的C-AnchID 和C-StmtUID分别是361,1,而361,1 对应的SQL语句是  insert into t2 select * from t1

补充:

以上说的皆是dynamic SQL,如果是静态SQL,只能通过snapshot来看,并且会看到显示是 Static SQL statement:

Statement type                             = Static SQL Statement

Statement                                  = Execute
Section number                             = 2

application creator                        = MIAOQINGSONG
Package name                               = P431111789

Consistency Token                          =

Package Version ID                         =

Cursor name                                =

Statement member number                    = 0

Statement start timestamp                  = 2016-04-26 14:20:27.609259

Statement stop timestamp                   =

这时可以根据package name和Section number来看一下这个包的执行计划,执行计划中包含了SQL语句

C:\windows\system32>db2expln -database SAMPLE -schema MIAOQINGSONG -package  P431111789 -graph -terminal

******************** PACKAGE ***************************************

Package Name = "MIAOQINGSONG"."P431111789"  Version = ""

        Prep Date = 2016/04/26

        Prep Time = 14:19:40

        Bind Timestamp = 2016-04-26-14.19.40.347000

        Isolation Level          = Cursor Stability

        Blocking                 = Block Unambiguous Cursors

        Query Optimization Class = 5

        Partition Parallel       = No

        Intra-Partition Parallel = Yes (Bind Degree = ANY)

        Reoptimization           = No

        SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",

                                   "MIAOQINGSONG"

-------------------- SECTION ---------------------------------------

Section = 1

Statement:

  DECLARE CURSOR1 CURSOR

  WITH RETURN

  for

     SELECT LASTNAME

     FROM MIAOQINGSONG.EMPLOYEE

Intra-Partition Parallelism Degree = 2

Section Code Page = 1208

Estimated Cost = 6.860869

Estimated Cardinality = 42.000000

Process Using 2 Subagents

|  Access Table Name = MIAOQINGSONG.EMPLOYEE  ID = 2,6

|  |  #Columns = 1

|  |  Parallel Scan

|  |  Skip Inserted Rows

|  |  May participate in Scan Sharing structures

|  |  Scan may start anywhere and wrap, for completion

|  |  Fast scan, for purposes of scan sharing management

|  |  Scan can be throttled in scan sharing management

|  |  Relation Scan

|  |  |  Prefetch: Eligible

|  |  Lock Intents

|  |  |  Table: Intent Share

|  |  |  Row  : Next Key Share

|  Insert Into Synchronous Local Table Queue  ID () = q1

Access Local Table Queue  ID () = q1  #Columns = 3

Return Data to Application

|  #Columns = 1

End of section

..

-------------------- SECTION ---------------------------------------
Section = 2

Statement:

  INSERT INTO MIAOQINGSONG.T2

     SELECT ID

     FROM T1

Intra-Partition Parallelism Degree = 2

Section Code Page = 1208

Estimated Cost = 97959.609375

Estimated Cardinality = 2943367.000000

Process Using 2 Subagents

|  Access Table Name = MIAOQINGSONG.T1  ID = 3,5

|  |  #Columns = 1

|  |  Parallel Scan

|  |  Skip Inserted Rows

|  |  Avoid Locking Committed Data

|  |  Currently Committed for Cursor Stability

|  |  May participate in Scan Sharing structures

|  |  Scan may start anywhere and wrap, for completion

|  |  Fast scan, for purposes of scan sharing management

|  |  Scan can be throttled in scan sharing management

|  |  Relation Scan

|  |  |  Prefetch: Eligible

|  |  Lock Intents

|  |  |  Table: Intent Share

|  |  |  Row  : Next Key Share

|  Insert Into Asynchronous Local Table Queue  ID () = q1

Access Local Table Queue  ID () = q1  #Columns = 1

Insert:  Table Name = MIAOQINGSONG.T2  ID = 3,6

End of section

..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: