rich_ying 发表于 2010-04-27 13:58

如何通过snapshot来查询什么sql语句导致锁等待的

db2 get snapshot for locks on testdb
---------------------------------------------------
查到有锁等待现象,

那如何通过snapshot来查询什么sql语句导致锁等待的?


---------------------------------------------
就像用db2pd -db testdb -locks wait showlocks -applications -transcations - dyn查出来一样。

hooboor 发表于 2010-04-27 14:09

可以通过db2pd来查询,这个命令的具体用法在网上搜吧。

rich_ying 发表于 2010-04-27 14:14

可以通过db2pd来查询,这个命令的具体用法在网上搜吧。
hooboor 发表于 2010-04-27 14:09 http://bbs.chinaunix.net/images/common/back.gif


    这种方法在我的问题里已说过了,可以用,我直想问一下如何用snapshot来查sql语句

hooboor 发表于 2010-04-27 14:23

不好意思没注意看到下面的语句,快照的话可以用:
db2 get snapshot for dynamic SQL on dbname

rich_ying 发表于 2010-04-27 14:36

不好意思没注意看到下面的语句,快照的话可以用:
db2 get snapshot for dynamic SQL on dbname
hooboor 发表于 2010-04-27 14:23 http://bbs.chinaunix.net/images/common/back.gif


语句到是取到了多少,但到底是哪个语句出现问题?哪个语句是导致锁等待的呢?

hooboor 发表于 2010-04-27 14:47

不好意思没注意看到下面的语句,快照的话可以用:
db2 get snapshot for dynamic SQL on dbname

hooboor 发表于 2010-04-27 14:51

你可以用grep过滤下lock相关的信息看看。

rich_ying 发表于 2010-04-27 15:10

你可以用grep过滤下lock相关的信息看看。
hooboor 发表于 2010-04-27 14:51 http://bbs.chinaunix.net/images/common/back.gif


    同样查不到
/home/db2inst1>db2 +c "insert into aa values('rich')"
DB20000IThe SQL command completed successfully.
/home/db2inst1>

另一个窗口
/home/db2inst1>db2s

   Database Connection Information

Database server      = DB2/LINUX 8.2.9
SQL authorization ID   = DB2INST1
Local database alias   = TESTDB

/home/db2inst1>cx aa

   Database Connection Information

Database server      = DB2/LINUX 8.2.9
SQL authorization ID   = DB2INST1
Local database alias   = TESTDB




----------------------------------------------------------------
/home/db2inst1>db2 get monitor switches

            Monitor Recording Switches

Switch list for db partition number 0
Buffer Pool Activity Information(BUFFERPOOL) = OFF
Lock Information                        (LOCK) = ON2010-04-27 10:13:04.558058
Sorting Information                     (SORT) = OFF
SQL Statement Information          (STATEMENT) = ON2010-04-27 10:13:29.307992
Table Activity Information             (TABLE) = OFF
Take Timestamp Information         (TIMESTAMP) = ON2010-04-27 06:27:02.632310
Unit of Work Information               (UOW) = OFF


db2 get snapshot for dynamic sql on testdb|grep -i lock
没有记录

hooboor 发表于 2010-04-27 16:40

看你的参数应该是没问题的,如果没有相关的语句,那应该是没有锁等待吧。对于V9以上版本,你也可以看查这个视图:sysibmadm.snaplockwait

net_lin 发表于 2010-05-26 08:59

传统的做法:
db2 "list applications show detail"|grep -vE "UOW Waiting|Connect Completed"
找出处于lock waiting的进程
db2 "get snapshot for application agentid <lock waiting的agentid>"
在输出的最后可以看到锁等待的情况,包括等待的锁资源和锁住该锁资源的进程
再db2 "get snapshot for application agentid <lock资源的agentid>"就可以看到锁住资源的sql语句

在多层锁等待的情况下需要循环上面的做法
页: [1] 2
查看完整版本: 如何通过snapshot来查询什么sql语句导致锁等待的