我的编程空间,编程开发者的网络收藏夹
学习永远不晚

db2死锁和锁超时

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

db2死锁和锁超时

数据库参数准备
db2 create db mydb  using codeset utf-8 territory CN
db2 update db cfg using cur_commit DISABLED

db2 get db cfg show detail |grep -i cur
 Description                                   Parameter   Current Value              Delayed Value
 Currently Committed                        (CUR_COMMIT) = DISABLED                   DISABLED 
设置参数CUR_COMMIT=OFF


死锁监视器和数据产生:

未创建监视器前的
db2 list  tables  for  all  |grep  -i lock
[db2inst1@ora10 ~]$ db2 list  tables  for  all  |grep  -i lock
LOCKS_HELD                      SYSIBMADM       V     2018-08-25-20.10.48.564505
LOCKWAITS                       SYSIBMADM       V     2018-08-25-20.10.48.568740
SNAPLOCK                        SYSIBMADM       V     2018-08-25-20.10.48.015699
SNAPLOCKWAIT                    SYSIBMADM       V     2018-08-25-20.10.48.046247


1、创建死锁监视器
db2  "create event monitor t_lockinfomation for locking  write to unformatted event table"
db2  "set  event  monitor   t_lockinfomation  state 1"(记录事件语句)
db2 "select evmonname,EVENT_MON_STATE(evmonname) as state from syscat.eventmonitors"


2、创建死锁
a、准备数据库表
db2  "create table t11 (col char(10))"
db2  "create table t21 (col char(10))"

b、开始进行死锁模拟
打开两个CLP窗口,分别连接到sample库,然后:

在CLP1中执行:
$ db2 +c  "insert into t11 values('aaa')"
db2 +c  "insert into t33 values('aaa')"

$ 在CLP2中执行:
$ db2 +c "insert into t21 values('bbb')"

 
执行完插入操作后,在CLP1和CLP2中尽量同步执行以下查询:
在CLP1中执行:
$ db2 +c "select * from t21"

在CLP2中执行:
$ db2 +c "select * from t11"
 
不用多少时间,就会发现,CLP窗口中报错:
CLP2输出:
$ db2 +c "select * from t11"
SQL0911N  The current transaction has been rolled back because of a deadlock
or timeout.  Reason code "2".  SQLSTATE=40001


3、获取锁等待事件数据
db2 "call EVMON_FORMAT_UE_TO_TABLES ( 'LOCKING', NULL, NULL, NULL, NULL, NULL, 'RECREATE_FORCE', -1, 'SELECT * FROM T_LOCKINFOMATION ORDER BY event_timestamp')"
db2  "set  event  monitor   t_lockinfomation  state 0"
db2 list  tables  for  all  |grep  -i lock
LOCK_ACTIVITY_VALUES            DB2INST1        T     2018-08-25-20.53.42.365349
LOCK_EVENT                      DB2INST1        T     2018-08-25-20.53.41.996997
LOCK_PARTICIPANTS               DB2INST1        T     2018-08-25-20.53.42.073427
LOCK_PARTICIPANT_ACTIVITIES     DB2INST1        T     2018-08-25-20.53.42.162554
T_LOCKINFOMATION                DB2INST1        T     2018-08-25-20.15.24.159899
LOCKS_HELD                      SYSIBMADM       V     2018-08-25-20.10.48.564505
LOCKWAITS                       SYSIBMADM       V     2018-08-25-20.10.48.568740
SNAPLOCK                        SYSIBMADM       V     2018-08-25-20.10.48.015699
SNAPLOCKWAIT                    SYSIBMADM       V     2018-08-25-20.10.48.046247
产生如下表
LOCK_ACTIVITY_VALUES         
LOCK_EVENT                   
LOCK_PARTICIPANTS            
LOCK_PARTICIPANT_ACTIVITIES  

4、查询死锁相关的语句
db2 "
select c.EVENT_ID,
            c.EVENT_TIMESTAMP,
            c.EVENT_TYPE,
            c.PARTICIPANT_TYPE,
            c.APPL_ID,
            c.APPL_NAME,
            c.AUTH_ID,
            c.CLIENT_WRKSTNNAME,
            c.LOCK_ESCALATION,
            c.LOCK_MODE_REQUESTED,
            c.LOCK_MODE,
            c.LOCK_OBJECT_TYPE,
            c.TABLE_NAME,
            c.TABLE_SCHEMA,
            d.ACTIVITY_TYPE,
            d.PACKAGE_NAME,
            d.PACKAGE_SCHEMA,
            d.SECTION_NUMBER,
            d.EFFECTIVE_ISOLATION,
            d.STMT_TEXT
from
   (select a.XMLID,
           a.EVENT_ID,
           a.EVENT_TIMESTAMP,
           a.EVENT_TYPE,
           b.PARTICIPANT_NO,
           b.PARTICIPANT_TYPE,
           b.APPL_ID,
           b.APPL_NAME,
           b.AUTH_ID,
           b.CLIENT_WRKSTNNAME,
           b.LOCK_NAME,
           b.LOCK_ATTRIBUTES,
           b.LOCK_ESCALATION,
          case (b.LOCK_CURRENT_MODE)
   when 0    then 'No Lock'
   when 1    then 'IS'
   when 2    then 'IX'
   when 3    then 'S'
   when 4    then 'SIX'
   when 5    then 'X'
   when 6    then 'IN'
   when 7    then 'Z'
   when 8    then 'U'
   when 9    then 'NS'
   when 10   then 'NX'
   when 11   then 'W'
   when 12   then 'NW' end LOCK_CURRENT_MODE ,
   case (b.LOCK_MODE_REQUESTED)
   when 0    then 'No Lock'
   when 1    then 'IS'
   when 2    then 'IX'
   when 3    then 'S'
   when 4    then 'SIX'
   when 5    then 'X'
   when 6    then 'IN'
   when 7    then 'Z'
   when 8    then 'U'
   when 9    then 'NS'
   when 10   then 'NX'
   when 11   then 'W'
   when 12   then 'NW' end LOCK_MODE_REQUESTED,
   case (b.LOCK_MODE)
   when 0    then 'No Lock'
   when 1    then 'IS'
   when 2    then 'IX'
   when 3    then 'S'
   when 4    then 'SIX'
   when 5    then 'X'
   when 6    then 'IN'
   when 7    then 'Z'
   when 8    then 'U'
   when 9    then 'NS'
   when 10   then 'NX'
   when 11   then 'W'
   when 12   then 'NW' end LOCK_MODE,
   b.LOCK_OBJECT_TYPE,
   b.TABLE_NAME,
   b.TABLE_SCHEMA
   ----b.LOCK_WAIT_START_TIME,
   ----b.LOCK_WAIT_END_TIME
   from LOCK_EVENT a,
        LOCK_PARTICIPANTS b
   where a.XMLID=b.XMLID) c,
   (select e.XMLID,
            e.PARTICIPANT_NO,
            e.ACTIVITY_TYPE ,
            e.PACKAGE_NAME,
            e.PACKAGE_SCHEMA,
            e.SECTION_NUMBER,
            e.EFFECTIVE_ISOLATION,
            e.STMT_TEXT
            from LOCK_PARTICIPANT_ACTIVITIES e ,
      (select XMLID,
              PARTICIPANT_NO,
              max(ACTIVITY_ID) ACTIVITY_ID
             from LOCK_PARTICIPANT_ACTIVITIES
             group by XMLID,PARTICIPANT_NO) f
   where e.XMLID=f.XMLID and e.PARTICIPANT_NO=f.PARTICIPANT_NO and
        e.ACTIVITY_ID=f.ACTIVITY_ID) d
where
c.XMLID=d.XMLID
and c.PARTICIPANT_NO=d.PARTICIPANT_NO
order by c.EVENT_ID "


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

db2死锁和锁超时

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql 死锁和死锁检测的实现

目录1、死锁的定义2、锁等待的最大时长3、死锁检测4、innodb死锁的监控和查看5、防止死锁的一些策略1、死锁的定义当mysql请求发生并发时,不同线程执行的事务操作需要获取相同资源的锁,涉及的线程都在等待别的线程释放锁,几个线程都进入
mysql 死锁和死锁检测的实现
2024-09-02

PostgreSQL中的死锁和锁等待

开始之前明确一下死锁和锁等待这两个事件的异同相同的之处:两者都是当前事物在试图请求被其他事物已经占用的锁,从而造成当前事物无法执行的现象不同的之处:死锁是相关session双方或者多方中必然要牺牲(回滚)至少一个事务,否则双方(或者多方)都无法执行;锁等待则不
PostgreSQL中的死锁和锁等待
2021-09-17

死锁终结者:顺序锁和轮询锁!

死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。

处理和优化 MySQL 死锁锁定

很抱歉,由于技术限制,我无法提供具体代码示例。但是我可以帮你提供一个讲解MySQL锁、死锁处理与优化的大纲,供你参考。MySQL 锁的死锁处理与优化一、MySQL锁的分类读锁(共享锁)写锁(排它锁)二、死锁概念什么是死锁死锁产生的条件如何避
处理和优化 MySQL 死锁锁定
2023-12-21

MySQL INSERT锁与锁超时设置

MySQL中的INSERT锁是指在向表中插入数据时,会对被插入的行进行加锁,以防止其他会话同时对同一行进行插入操作。这样可以保证数据的一致性和完整性。如果在插入数据时出现锁超时的情况,可以通过设置innodb_lock_wait_time
MySQL INSERT锁与锁超时设置
2024-08-19

Mysql两阶段锁和死锁是什么

本篇内容主要讲解“Mysql两阶段锁和死锁是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql两阶段锁和死锁是什么”吧!两阶段锁概念讲的是InnoDB如何处理行锁的上锁,释放锁的行为。
2022-12-27

MySQL的意向共享锁、意向排它锁和死锁

目录一、InnoDB的表级锁二、意向共享锁和意向排它锁三、死锁1. 数据库中的死锁2. 死锁场景以及解决方法3. 操作三、锁的优化建议一、InnoDB的表级锁在绝大多数情况下应该使用行锁,因为事务和行锁往往是选择InnoDB的理由,但个别
2022-07-14

尝试写入/读取时 io.Pipe 和死锁

问题内容我花了几个小时尝试理解底层逻辑,但没有任何进展。下面的代码在第一次迭代后返回死锁。如果我在 io.copy 之前关闭 writer,死锁就会消失,但不会打印任何内容(因为管道写入端在读取之前已关闭)func main() {re
尝试写入/读取时 io.Pipe 和死锁
2024-02-06

举例讲解Python中的死锁、可重入锁和互斥锁

一、死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。 1、迭代死锁 该情况是一个线程“迭代”请求同一个资源,直接就会造成死锁:import threading imp
2022-06-04

MySQL的意向共享锁、意向排它锁和死锁是什么

本篇内容介绍了“MySQL的意向共享锁、意向排它锁和死锁是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、InnoDB的表级锁在绝大多
2023-07-02

死锁之谜:探究数据库死锁的原因和解决方案

数据库死锁是一种常见的数据库问题,它会导致事务无法继续执行,进而影响数据库的性能和可用性。本文将探讨数据库死锁的原因并提供相应的解决方案,帮助您有效避免和解决数据库死锁问题。
死锁之谜:探究数据库死锁的原因和解决方案
2024-02-05

SqlServer定时备份数据库和定时杀死数据库死锁解决

上周五组长更我说了一句要杀死数据库的死锁进程,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定下次还是要研究呢,倒腾出来了就可以在下次用到了,后来组长又补了一句:"还有定是备份数据库的问题要解决",说干就
SqlServer定时备份数据库和定时杀死数据库死锁解决
2020-11-11

SqlServer定时备份数据库和定时杀死数据库死锁解决

上周五组长更我说了一句要杀死数据库的死锁进程,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定下次还是要研究呢,倒腾出来了就可以在下次用到了,后来组长又补了一句:"还有定是备份数据库的问题要解决",说干就

	SqlServer定时备份数据库和定时杀死数据库死锁解决
2022-01-02

编程热搜

目录