db2锁

1、首先把数据库监控开关打开:

db2 update dbm cfg using DFT_MON_LOCK on DFT_MON_STMT on

db2  update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON

2、利用DB2表函数编写一个监控SQL脚本。

select

AGENT_ID ,

substr(STMT_TEXT,1,100) as statement,

STMT_ELAPSED_TIME_MS

from table(SNAPSHOT_STATEMENT('SAMPLE',-1)) as B

where AGENT_ID in

(select AGENT_ID_HOLDING_LK from table(SNAPSHOT_LOCKWAIT('SAMPLE',-1)) as A

order by  LOCK_WAIT_START_TIME ASC FETCH FIRST 20 ROWS ONLY

)

order by STMT_ELAPSED_TIME_MS DESC

3、我们可以把这个脚本写到一个shell脚本中,每隔三秒钟(不一定是3秒,也可以1秒)运行一次,把监控结果管道累加输出到一个文件。

#!/usr/bin/ksh

#

dbname=$1

#create a log file

filename=find.locksql.$(date+'%m%d%H%M%S')

touch $filename

#connect to database

echo now,connecting to database: $dbname

db2 "connect to $dbname"

db2 "update dbm cfg using DFT_MON_LOCK on DFT_MON_STMT on"

db2  "update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON"

echo now,finding the SQLs which made lockwait

db2  "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 in (select AGENT_ID_HOLDING_LK from table(SNAPSHOT_LOCKWAIT('$dbname',-1)) as A  order by  LOCK_WAIT_START_TIME ASC FETCH FIRST 20 ROWS ONLY ) order by STMT_ELAPSED_TIME_MS DESC" > $filename

echo The SQLs have saved to the file $filename

4、 一旦定位引起锁等待的SQL语句后,如果该SQL语句写的效率很低下,可以考虑对该SQL语句作出调整;如果该SQL语句上没有创建最合理的索引,尝试使用db2advis工具为引起锁等待的SQL语句创建最合理的索引。尝试调优引起锁等待的SQL语句。

5、 如果创建索引和调优SQL语句仍然不能解决问题,考虑能否根据业务逻辑选择UR隔离级别。但是这种方式只能解决读的问题。

6、 在业务逻辑允许的情况下,考虑设置DB2_EVALUNCOMMITTED、DB2_SKIPDELETED和DB2_SKIPINSERTED来提高并发。

7、 最后考虑能否对引起锁等待的SQL语句关联的表做数据归档,业务分离等手段。

以前,只能在数据库级别通过更改 locktimeout 数据库配置参数的值来指定锁定等待超时时间。锁定等待策略通过新的 SET CURRENT LOCK TIMEOUT 可以在语句级别指定(DB2 V9.5以后),

此语句更改 CURRENT LOCK TIMEOUT 专用寄存器的值。CURRENT LOCK TIMEOUT 专用寄存器指定在返回指示不能获取锁定的错误之前等待锁定的秒数

原文地址:http://blog.51cto.com/11310506/2118798

时间: 2024-11-09 00:11:06

db2锁的相关文章

DB2 锁问题分析与解释

DB2 应用中经常会遇到锁超时与死锁现象,那么这种现象产生的原因是什么呢.本文以试验的形式模拟锁等待.锁超时.死锁现象,并给出这些现象的根本原因. 试验环境: DB2 v9.7.0.6 AIX 6.1.0.0 采用默认的隔离级别CS STUDENT表的DDL与初始内容 ------------------------------------------------ -- DDL Statements for table "E97Q6C  "."STUDENT" --

DB2锁类型

锁状态确定了对锁的所有者允许的访问类型,以及对锁定数据资源的并发用户许可的访问类型.下面的列表说明了可用的锁状态,按照递增控制排序: 锁状态(模式):  意向无(Intent None,IN) 适用对象:  表空间和表 描述:  锁的拥有者可以读取锁定表中的数据(包括未提交数据),但不能更改这些数据.在这种模式中,锁的拥有者不获取行级别的锁:因此,其它并发应用程序可以读取和更改表中的数据. 锁状态(模式):  意向共享(Intent Share,IS) 适用对象:  表空间和表 描述:  锁的拥

2012年数据库技术大会演讲PPT打包

 2012年数据库技术大会演讲PPT打包 DB2 Overview of Disaster Recovery Options.pdf: http://www.t00y.com/file/76767890 DB2锁问题处理最佳实践.pdf: http://www.t00y.com/file/76767892 GOS-MySQL-development.pdf: http://www.t00y.com/file/76767896 IBM Big Data Platform.pdf: http:/

2012在数据库技术会议上的讲话PPT打包

 2012技术大会演讲PPT打包 DB2 Overview of Disaster Recovery Options.pdf: http://www.t00y.com/file/76767890 DB2锁问题处理最佳实践.pdf: http://www.t00y.com/file/76767892 GOS-MySQL-development.pdf: http://www.t00y.com/file/76767896 IBM Big Data Platform.pdf: http://www

db2查询锁表

--查询锁表情况,可以获取哪个表被锁,其中agent_id为哪个DB2进程锁了表(db2inst1用户下) select * from sysibmadm.LOCKS_HELD with ur; --拿到上述的agent_id,查询具体锁表的IP和应用程序 db2 list application | grep 58189 --MASADIC db2jcc_applica 58189 192.168.210.33.59145.1405052017 NGDB 1 --杀掉此进程 db2 "forc

DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用

本文主要解释下DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用 实验环境: DB2 v9.7.0.6 AIX 6.1.0.0 採用默认的隔离级别CS STUDENT表的DDL与初始内容 CREATE TABLE "E97Q6C  "."STUDENT"  ( "AGE" INTEGER , "NAME" CHAR(8) ) IN "U

DB2查看数据库中的锁信息

利用"db2 connect to <db name>"连接到数据库后,执行相关指令 查询锁快照信息 db2 get snapshot for locks on <db name> 查询目前存在的锁 db2 SELECT AGENT_ID, LOCK_OBJECT_TYPE, LOCK_MODE, LOCK_STATUS FROM SYSIBMADM.SNAPLOCK 某一个用户的锁的情况 get snapshot for locks for applicati

DB2表被锁,如何解锁

原因与解决方案 1.原因:修改表结构表结构发生变化后再对表进行任何操作都不被允许,SQLState为57016(因为表不活动,所以不能对其进行访问),由于修改了表字段权限,导致表处于不可用状态,另外一个小的建议,如果平时的工作中用到DB2的话,最好准备一份DB2错误文档 2.解决方案:对表进行重构,重构的过程,就是对部分数据打散再重新组合的过程 需要执行语句: 命令行中执行:REORG TABLE tablename 非命令行中执行:CALL SYSPROC.ADMIN_CMD('REORG T

让数据库飞起来 十大DB2优化技巧

DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台上服务.下文中将为大家讲解DB2十大优化技巧. 为了帮助DB2 DBA 避免性能灾难并获得高性能,我为我们的客户.用户和 DB2 专家同行总结了一套故障诊断流程.以下详细说明在 Unix.Windows 和 OS/2 环境下使用 DB2 UDB 的电子商务OLTP 应用程序的10 条最重要的性能改善技巧,希望下文中涉及到的内容对大家能够有所帮助. 一. 监视开关 确保已经打开监视开关.如果它们没有打开,您将无法获取您需要的性