`
dch1287
  • 浏览: 122701 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

DB2 查找引起锁等待或死锁的客户端进程和SQL语句

    博客分类:
  • DB
阅读更多
【简介】
      本文主要用于定位系统中导致锁等待或者死锁的原因.

【详细信息】
1. 首先要打开DBMS监控开关和快照开关:
db2 update dbm cfg using DFT_MON_LOCK on DFT_MON_STMT on
db2 update monitor switches using lock on buffpool on sort on uow on table on statement on

2.   获取锁相关的快照信息:
db2 get snapshot for database on <dbname> |grep -i lock



Locks held currently                       = 346

Lock waits                                 = 257

Time database waited on locks (ms)         = 0

Lock list memory in use (Bytes)            = 147136

Deadlocks detected                         = 5

Lock escalations                           = 0

Exclusive lock escalations                 = 0

Agents currently waiting on locks          = 0

Lock Timeouts                              = 0

Block IOs                                  = Not Collected

Pages from block IOs                       = Not Collected

Internal rollbacks due to deadlock         = 4

Number of MDC table blocks pending cleanup = 0

    Memory Pool Type                           = Lock Manager Heap



3. 如果存在锁等待或者死锁,找到锁的信息:

db2pd -db <dbname> -locks showlocks wait



Address            TranHdl    Lockname                   Type       Mode Sts Owner      Dur HoldCount Att ReleaseFlg

0x0770000020471B00 27         0002001B000000000001000252 Row        .NS W   28         1   0          0x00 0x00000004 TbspaceID 2     TableID 27     PartitionID 0 Page 1 Slot 2

0x0770000020471840 28         0002001B000000000001000252 Row        ..X G   28         1   0          0x00 0x40000000 TbspaceID 2     TableID 27     PartitionID 0 Page 1 Slot 2



可以查找出锁名称,锁的位置(使用tablespaceID,tableID, recordID 来标识)

其中列Sts中:W 表示等待锁,G代表已经获得锁



4. 通过TranHdl的值查找等待锁的agentid.

db2pd -db <dbname> -transactions |grep 27



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

0x077000002032A300 20686    [000-20686] 27         5          READ    0x00000000 0x00000000 0x000000000000 0x000000000000 0               0               0x000000DF81D2 1          0        n/a               

AppHandl列的值表示等待锁的agentid.



5. 通过等待锁的agentid查找出等待锁的SQL和占有锁的agentid

db2 get snapshot for application agentid 20686



    Blocking cursor                            = YES

    Dynamic SQL statement text:

   select trans_st from xxxdb.tbl_xxx_trans_log1_1 where sys_tra_no='004918'

ID of agent holding lock                 = 20687

Application ID holding lock              = *LOCAL.xxxdb.110130082456

Lock name                                = 0x0002001B000000000001000252

Lock attributes                          = 0x00000000

Release flags                            = 0x00000004

Lock object type                         = Row

Lock mode                                = Exclusive Lock (X)

Lock mode requested                      = Next Key Share (NS)

Name of tablespace holding lock          = USERSPACE1

Schema of table holding lock             = XXX
Name of table holding lock               = TBL_XXX_TRANS_LOG1_1
Data Partition Id of table holding lock = 0

Lock wait start timestamp                = 01/30/2011 16:44:33.771482

还可以得到存在锁的数据库表名和schema。

6.通过占有锁的agentid找出引起锁等待的SQL和客户端进程
db2 get snapshot for application agentid 20687

Application handle                                                = 20687

Application status                         = UOW Waiting

Status change time                         = 01/30/2011 16:44:31.200616

Application code page                      = 1386

Application country/region code            = 1

DUOW correlation token                     = *LOCAL.xxx.110130082456

Application name                           = db2bp

Application ID                             = *LOCAL.xxx.110130082456

Sequence number                            = 00002

Dynamic SQL statement text:

update xxxdb.tbl_xxx_trans_log1_1 set trans_st='10000' where sys_tra_no='004918'


7. 关闭快照监控和DBMS监控开关
db2 update monitor switches using lock off buffpool off uow off sort off table off statement off
db2 update dbm cfg using DFT_MON_LOCK off DFT_MON_STMT off

分享到:
评论

相关推荐

    db2死锁问题分析及解决方案

    - 使用如下SQL命令来查找导致锁等待的SQL语句: ```sql SELECT AGENT_ID, SUBSTR(STMT_TEXT, 1, 100) AS statement, STMT_ELAPSED_TIME_MS FROM TABLE(SNAPSHOT_STATEMENT('dbname', -1)) AS B WHERE AGENT_ID ...

    db2_查询锁方法

    通过以上方法,我们可以有效地查询DB2数据库中的锁状态,从而帮助解决可能遇到的与锁相关的性能问题或死锁问题。这些信息对于理解数据库中并发控制的行为至关重要,并且对于数据库管理员来说是非常有价值的诊断工具...

    DB2_SQL优化.doc

    通过阅读本文档,读者将了解为什么需要进行 SQL 优化、如何判断 SQL 语句的优劣、如何优化 SQL 语句、如何建立合理的索引、如何防止死锁和锁等待,以及一些经典案例。 为什么要进行 SQL 优化 随着数据的增加和应用...

    DB2锁相关情况介绍

    在DB2中,可以通过SQL语句来显式地控制锁的获取和释放。例如,使用`FOR UPDATE`子句来获取排他锁,使用`FOR READ ONLY`子句来获取共享锁。 #### 七、DB2锁的管理 DB2提供了多种工具和命令,用于监控和管理锁,包括...

    DB2数据库SQL语句错误代码查询

    在进行数据库操作时,遇到SQL语句错误是常有的事,尤其是对于DB2这样的大型关系型数据库管理系统而言,其丰富的功能和复杂的架构可能导致各种类型的错误。本文将详细解读DB2数据库中的SQL语句错误代码,帮助读者理解...

    DB2 SQL性能调优秘笈

    2. **锁等待超时配置**:适当配置锁等待超时时间,可以有效避免长时间的锁等待,减少死锁的可能性。 3. **手动锁定管理**:在某些情况下,通过手动控制锁定行为,可以更精细地控制并发访问,提高系统的整体吞吐量。 ...

    DB2数据库处理表死锁

    - 通常情况下,可以通过调整事务的执行顺序、优化SQL查询语句或者调整锁的超时设置来避免或解决死锁问题。 #### 四、最佳实践与建议 - **定期监控:** 定期执行锁快照命令,监控数据库的锁定情况。 - **事务隔离...

    DB2 重命名不同的索引时出现的锁等待问题-contracted.doc

    2. 分析db2trc日志,找出涉及EOT锁的SQL语句和相关进程。 3. 确定并发rename index操作是否在同一时间点对相同的元数据表产生冲突。 4. 考虑调整并发控制策略,例如增加事务隔离级别,或在高并发时段避免执行rename ...

    触发器创建sql语句

    通过使用SQL语句创建触发器,数据库管理员和开发人员可以有效地控制数据的修改过程,确保数据的完整性和一致性。无论是简单的数据验证还是复杂的业务逻辑,触发器都能提供一种强大而灵活的机制。然而,触发器的设计...

    DB2数据库锁升级分析及处理步骤

    通过监控数据和日志,识别频繁引发锁升级的事务或查询,进而优化SQL语句、调整索引策略或重新设计数据库结构。 **3.2 调整锁升级策略** DB2提供了多种参数和配置选项来控制锁升级行为,如`LOCKSIZE`和`LOCKSURGE`...

    db2常见问题分析

    通过查看输出结果中的 Deadlocks detected 和 LockTimeouts 来判断是否存在死锁或锁等待问题。 3. **创建死锁监视器**: 当检测到死锁时,可以通过创建死锁监视器来进一步分析原因: ```shell mkdir /tmp/dlmon...

    DB2网上资源汇总

    6. 死锁解决:"解决数据库的死锁问题"和"当并发遇到隔离的时候 DB2"提供了处理DB2死锁的具体步骤和策略,包括使用DB2的死锁检测功能、事务回滚和死锁预防等技术。 7. 社区资源:这些HTML文件来自于各种技术社区,如...

    DB2 SQL 消息

    这些消息通常包含了关于执行SQL语句时出现的问题详情,包括错误代码、描述以及可能的解决方案。通过理解这些SQL消息,用户可以更有效地调试和维护其数据库应用。 #### 二、SQL0440N - 找不到具有兼容自变量的类型为...

    db2性能调优之Sql执行监控.doc

    结合具体的业务场景,通过监控SQL执行,我们可以制定相应的性能优化策略,如调整数据库参数、优化存储过程、重构SQL语句等,实现DB2性能的持续改进。 总的来说,通过对DB2中的SQL执行进行监控,我们可以全面了解...

    DB2数据库SQL复制过程参考

    - 示例SQL语句: `INSERT INTO TEST (NAME) VALUES ('张三'), ('李四');` #### 四、配置复制环境 为了实现DB2数据库之间的数据复制,需要对SOURCE数据库进行如下配置: 1. **连接配置**: - 执行命令: `C:\Program ...

    CF12 DB2 SQL Workshop

    《CF12 DB2 SQL Workshop》是一份IBM官方提供的详细教程,主要针对DB2数据库管理系统中的SQL语言进行深入讲解。本教程分为七个单元,旨在帮助用户掌握SQL在DB2环境中的核心应用,提升数据管理和分析能力。以下是各...

    db2_sqlcode.rar_db2_db2 sql

    这个压缩包包含了一个名为"db2_sqlcode.pdf"的PDF文档,我们可以从中了解到DB2在执行SQL语句时可能会遇到的各种错误代码及其含义。 SQLCODE是数据库系统中用于报告错误、警告和信息的通用代码。在DB2中,SQLCODE是...

    DB2 SQL性能调优秘笈 . 美 Tony Andrews . PDF . ckook.pdf

    - 锁定和并发控制:学习如何管理数据库锁定,避免死锁和资源争抢,以确保系统的并发性能。 - 错误和警告代码:识别和解决SQL执行过程中可能出现的错误和警告,以改善查询性能。 6. **性能调优实践** - SQL代码...

Global site tag (gtag.js) - Google Analytics