【简介】
本文主要用于定位系统中导致锁等待或者死锁的原因.
【详细信息】
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
分享到:
相关推荐
- 使用如下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数据库中的锁状态,从而帮助解决可能遇到的与锁相关的性能问题或死锁问题。这些信息对于理解数据库中并发控制的行为至关重要,并且对于数据库管理员来说是非常有价值的诊断工具...
通过阅读本文档,读者将了解为什么需要进行 SQL 优化、如何判断 SQL 语句的优劣、如何优化 SQL 语句、如何建立合理的索引、如何防止死锁和锁等待,以及一些经典案例。 为什么要进行 SQL 优化 随着数据的增加和应用...
在DB2中,可以通过SQL语句来显式地控制锁的获取和释放。例如,使用`FOR UPDATE`子句来获取排他锁,使用`FOR READ ONLY`子句来获取共享锁。 #### 七、DB2锁的管理 DB2提供了多种工具和命令,用于监控和管理锁,包括...
在进行数据库操作时,遇到SQL语句错误是常有的事,尤其是对于DB2这样的大型关系型数据库管理系统而言,其丰富的功能和复杂的架构可能导致各种类型的错误。本文将详细解读DB2数据库中的SQL语句错误代码,帮助读者理解...
2. **锁等待超时配置**:适当配置锁等待超时时间,可以有效避免长时间的锁等待,减少死锁的可能性。 3. **手动锁定管理**:在某些情况下,通过手动控制锁定行为,可以更精细地控制并发访问,提高系统的整体吞吐量。 ...
- 通常情况下,可以通过调整事务的执行顺序、优化SQL查询语句或者调整锁的超时设置来避免或解决死锁问题。 #### 四、最佳实践与建议 - **定期监控:** 定期执行锁快照命令,监控数据库的锁定情况。 - **事务隔离...
2. 分析db2trc日志,找出涉及EOT锁的SQL语句和相关进程。 3. 确定并发rename index操作是否在同一时间点对相同的元数据表产生冲突。 4. 考虑调整并发控制策略,例如增加事务隔离级别,或在高并发时段避免执行rename ...
通过使用SQL语句创建触发器,数据库管理员和开发人员可以有效地控制数据的修改过程,确保数据的完整性和一致性。无论是简单的数据验证还是复杂的业务逻辑,触发器都能提供一种强大而灵活的机制。然而,触发器的设计...
通过监控数据和日志,识别频繁引发锁升级的事务或查询,进而优化SQL语句、调整索引策略或重新设计数据库结构。 **3.2 调整锁升级策略** DB2提供了多种参数和配置选项来控制锁升级行为,如`LOCKSIZE`和`LOCKSURGE`...
12. **SQL设计**:编写高效的SQL语句,避免复杂的查询逻辑,减少锁的等待时间。 13. **热点数据**:识别并优化频繁访问的数据,以减少锁的竞争。 14. **应用访问策略**:采用合理的数据访问策略,如缓存、分区等技术...
通过查看输出结果中的 Deadlocks detected 和 LockTimeouts 来判断是否存在死锁或锁等待问题。 3. **创建死锁监视器**: 当检测到死锁时,可以通过创建死锁监视器来进一步分析原因: ```shell mkdir /tmp/dlmon...
6. 死锁解决:"解决数据库的死锁问题"和"当并发遇到隔离的时候 DB2"提供了处理DB2死锁的具体步骤和策略,包括使用DB2的死锁检测功能、事务回滚和死锁预防等技术。 7. 社区资源:这些HTML文件来自于各种技术社区,如...
这些消息通常包含了关于执行SQL语句时出现的问题详情,包括错误代码、描述以及可能的解决方案。通过理解这些SQL消息,用户可以更有效地调试和维护其数据库应用。 #### 二、SQL0440N - 找不到具有兼容自变量的类型为...
结合具体的业务场景,通过监控SQL执行,我们可以制定相应的性能优化策略,如调整数据库参数、优化存储过程、重构SQL语句等,实现DB2性能的持续改进。 总的来说,通过对DB2中的SQL执行进行监控,我们可以全面了解...
- 示例SQL语句: `INSERT INTO TEST (NAME) VALUES ('张三'), ('李四');` #### 四、配置复制环境 为了实现DB2数据库之间的数据复制,需要对SOURCE数据库进行如下配置: 1. **连接配置**: - 执行命令: `C:\Program ...
《CF12 DB2 SQL Workshop》是一份IBM官方提供的详细教程,主要针对DB2数据库管理系统中的SQL语言进行深入讲解。本教程分为七个单元,旨在帮助用户掌握SQL在DB2环境中的核心应用,提升数据管理和分析能力。以下是各...
这个压缩包包含了一个名为"db2_sqlcode.pdf"的PDF文档,我们可以从中了解到DB2在执行SQL语句时可能会遇到的各种错误代码及其含义。 SQLCODE是数据库系统中用于报告错误、警告和信息的通用代码。在DB2中,SQLCODE是...
- 锁定和并发控制:学习如何管理数据库锁定,避免死锁和资源争抢,以确保系统的并发性能。 - 错误和警告代码:识别和解决SQL执行过程中可能出现的错误和警告,以改善查询性能。 6. **性能调优实践** - SQL代码...