首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何监视DB2中的死锁

如何监视DB2中的死锁
EN

Stack Overflow用户
提问于 2018-03-01 07:17:23
回答 1查看 5.6K关注 0票数 0

我正在跟踪这个链接,并试图模拟死锁问题:

http://www.dba-db2.com/2012/06/how-to-monitor-a-deadlock-in-db2.html

我可以看到我的命令成功运行。

之后,我将通过DbVisualiser工具来模拟死锁错误。然而,我没有看到任何文件正在生成路径。

有人能把这个错误指向我吗?

此外,我试着读回那些旧的0000000.evt文件,它给我展示了如下内容:

代码语言:javascript
复制
                            EVENT LOG HEADER
  Event Monitor name: DB2DETAILDEADLOCK
  Server Product ID: SQL10059
  Version of event monitor data: 12
  Byte order: BIG ENDIAN
  Number of nodes in db2 instance: 1
  Codepage of database: 1208
  Territory code of database: 1
  Server instance name: db2inst1
--------------------------------------------------------------------------

--------------------------------------------------------------------------
  Database Name: MYDB   
  Database Path: /db2home/db2inst1/NODE0000/SQL00003/MEMBER0000/
  First connection timestamp: 01/29/2018 10:00:17.694784
  Event Monitor Start time:   01/29/2018 10:00:18.951331
--------------------------------------------------------------------------

--------------------------------------------------------------------------
  Database Name: MYDB   
  Database Path: /db2home/db2inst1/NODE0000/SQL00003/MEMBER0000/
  First connection timestamp: 01/29/2018 10:12:54.382936
  Event Monitor Start time:   01/29/2018 10:12:54.697223
--------------------------------------------------------------------------

这就意味着没有僵局?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-01 09:21:57

为我正确工作(linux,Db2 v11.1)。下面是一些带有注释的命令行。您需要对每个命令具有适当的授权/特权。我在使用实例所有者帐户。

首先禁用默认的db2detaildeadlock监视器,然后创建自己的:

代码语言:javascript
复制
$ db2 "set event monitor db2detaildeadlock state=0"      
DB20000I  The SQL command completed successfully.
$ 
$ db2 "create event monitor dlmon for deadlocks write to file '/tmp'"
DB20000I  The SQL command completed successfully.
$
$ db2 "set event monitor dlmon state=1"
DB20000I  The SQL command completed successfully.
$

生成一个死锁,确保看到这个带有原因代码2的SQLCODE -911。如果您没有看到原因代码2,那么您就没有任何死锁,但是您可能有超时,并且死锁监视器中不会记录超时。

在这里,我向死锁的受害者展示了回滚的通知,您可以看到正确的原因代码:

代码语言:javascript
复制
$ db2 +c "select * from db2inst1.dlk where a=4 with rr"
SQL0911N  The current transaction has been rolled back because of a deadlock 
or timeout.  Reason code "2".  SQLSTATE=40001

使用db2evmon查看监视器输出并查看结果文件

代码语言:javascript
复制
$ db2evmon -db mydb -evm dlmon > /tmp/db2evmon.dlmon.1

Reading /tmp/00000000.evt ...

$ view /tmp/db2evmon.dlmon.1
...<snip>
...
3) Deadlock Event ...
  Deadlock ID:   2
  Number of applications deadlocked: 2
  Deadlock detection time: 01/03/2018 09:06:39.019854
  Rolled back Appl participant no: 2
  Rolled back Appl Id: *LOCAL.db2inst1.180301090546
  Rolled back Appl seq number: 00001
  Rolled back Appl handle: 11872

...<snip>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49044488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档