English
购物车图片 购物车 ( )
专业的品牌服务,为您创造更高的价值
总体概述 客户评价

【干货分享】表被锁了不要慌,动态视图来帮忙



大家知道,达梦数据库支持多用户并发访问、修改数据。在实际工作中,有可能出现多个事务同时访问、修改相同数据的情况,当一个事务正在占用某个资源的锁,此时另一个事务正在请求这个资源上与第一个锁相冲突的锁类型时,就会发生阻塞。此时,被阻塞的事务将一直挂起,直到持有锁的事务放弃锁定的资源为止。本文就将给大家介绍如何使用对应的动态性能视图查看阻塞以及如何解决阻塞。


本文实验环境:演示环境:DM Database Server x64 V7.1.6.46-Build(2018.02.08-89107)ENT


1、创建测试表并插入数据

建表:


【干货分享】表被锁了不要慌,动态视图来帮忙


2.在T1上面生成TID锁

执行update操作并且不提交,具体操作如下:


【干货分享】表被锁了不要慌,动态视图来帮忙

 

3.开启新会话

3.1 在新会话下执行select操作


【干货分享】表被锁了不要慌,动态视图来帮忙


可以看到,由于MVCC的多版本机制,写不会阻塞读,所以select操作可以正常进行。但是前面的事务没有提交,所以查出来的结果还是旧版本的值,也就是update之前的值。


3.2 在新会话下执行DML操作


【干货分享】表被锁了不要慌,动态视图来帮忙


此时,由于delete操作需要加上与之前update操作相同类型的锁,所以阻塞发生,当前事务被挂起。


4.阻塞的排查

当阻塞发生时,我们可以通过v$lock视图查到当前数据库中锁的状态


【干货分享】表被锁了不要慌,动态视图来帮忙


结果中我们可以看到,事务2399被阻塞了,阻塞他的事务为2393,

同样我们也可以通过V$TRXWAIT视图查找谁阻塞谁,


【干货分享】表被锁了不要慌,动态视图来帮忙


得出同样的结果,ID为2399的事务正在等待ID为2393的事务,等待时间是1071599毫秒。

接下来,通过V$SESSIONS视图查找两个事务对应的会话


【干货分享】表被锁了不要慌,动态视图来帮忙


可以得到两个事务对应的会话ID和当前执行SQL语句,可以知道是哪些SQL语句产生的阻塞。


5.阻塞的解决方法

根据需求,可以有两种解决方案。


5.1提交或回滚产生阻塞的事务。

根据上文,我们可知产生阻塞的事务会话ID为2410147992。此时,我们只需要在该会话下提交或回滚事务,锁自然会被释放,阻塞解决。


5.2关闭产生阻塞的会话

同样,我们也可以使用系统过程SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话,具体使用方法如下。


【干货分享】表被锁了不要慌,动态视图来帮忙


此时,锁被释放,delete操作也可以顺利进行下去。



【干货分享】表被锁了不要慌,动态视图来帮忙


【干货分享】表被锁了不要慌,动态视图来帮忙



客户资料:
年缴保费:
客户需求:



大家知道,达梦数据库支持多用户并发访问、修改数据。在实际工作中,有可能出现多个事务同时访问、修改相同数据的情况,当一个事务正在占用某个资源的锁,此时另一个事务正在请求这个资源上与第一个锁相冲突的锁类型时,就会发生阻塞。此时,被阻塞的事务将一直挂起,直到持有锁的事务放弃锁定的资源为止。本文就将给大家介绍如何使用对应的动态性能视图查看阻塞以及如何解决阻塞。


本文实验环境:演示环境:DM Database Server x64 V7.1.6.46-Build(2018.02.08-89107)ENT


1、创建测试表并插入数据

建表:


【干货分享】表被锁了不要慌,动态视图来帮忙


2.在T1上面生成TID锁

执行update操作并且不提交,具体操作如下:


【干货分享】表被锁了不要慌,动态视图来帮忙

 

3.开启新会话

3.1 在新会话下执行select操作


【干货分享】表被锁了不要慌,动态视图来帮忙


可以看到,由于MVCC的多版本机制,写不会阻塞读,所以select操作可以正常进行。但是前面的事务没有提交,所以查出来的结果还是旧版本的值,也就是update之前的值。


3.2 在新会话下执行DML操作


【干货分享】表被锁了不要慌,动态视图来帮忙


此时,由于delete操作需要加上与之前update操作相同类型的锁,所以阻塞发生,当前事务被挂起。


4.阻塞的排查

当阻塞发生时,我们可以通过v$lock视图查到当前数据库中锁的状态


【干货分享】表被锁了不要慌,动态视图来帮忙


结果中我们可以看到,事务2399被阻塞了,阻塞他的事务为2393,

同样我们也可以通过V$TRXWAIT视图查找谁阻塞谁,


【干货分享】表被锁了不要慌,动态视图来帮忙


得出同样的结果,ID为2399的事务正在等待ID为2393的事务,等待时间是1071599毫秒。

接下来,通过V$SESSIONS视图查找两个事务对应的会话


【干货分享】表被锁了不要慌,动态视图来帮忙


可以得到两个事务对应的会话ID和当前执行SQL语句,可以知道是哪些SQL语句产生的阻塞。


5.阻塞的解决方法

根据需求,可以有两种解决方案。


5.1提交或回滚产生阻塞的事务。

根据上文,我们可知产生阻塞的事务会话ID为2410147992。此时,我们只需要在该会话下提交或回滚事务,锁自然会被释放,阻塞解决。


5.2关闭产生阻塞的会话

同样,我们也可以使用系统过程SP_CLOSE_SESSION(SESS_ID)来关闭对应的会话,具体使用方法如下。


【干货分享】表被锁了不要慌,动态视图来帮忙


此时,锁被释放,delete操作也可以顺利进行下去。



【干货分享】表被锁了不要慌,动态视图来帮忙


【干货分享】表被锁了不要慌,动态视图来帮忙



相关案例
2020 - 07 - 24
点击次数: 0
在生产环境中,当我们误操作删除了重要数据时,可以使用闪回查询来找回原来的数据,但当表被删除或者数据库没有开启闪回功能时,则无法使用闪回来获取原有的表数据;此时我们可以使用基于归档日志的时间点的恢复(不完全恢复)来达到恢复数据或恢复表的目的。本章介绍DM8数据库如何使用归档日志文件将数据库恢复到指定时间点的状态。本章内容已在如下环境上测试:①操作系统:中标麒麟7;②数据库版本:达梦8;相关关键字:D...
2020 - 06 - 19
点击次数: 0
DM8介绍DM8作为达梦公司新一代自研数据库,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。自DM8产品上线以来,广受应用,达梦大学已于2020年6月...
2020 - 06 - 18
点击次数: 0
学员们,大家好呀!一年一度的618电商大促又来啦大家都准备买些什么?零食、书籍、水果.....还是手机、笔电、游戏机?不趁着活动囤一波,对得起手机里的APP啵?来,一起喊口号:钱包可能干扁,购物欲望不会减!花呗可能超出,拼单付款不会输!月光可能不停,优惠算法我会赢!加购可能太多,购完手也不会剁!优惠券、专属红包、叠蛋糕、组团助力.....在优惠的套路里,哪有人能逃脱它的魔咒?!只怪,为什么身边没个...
2020 - 06 - 10
点击次数: 0
DM8介绍DM8作为达梦公司新一代自研数据库,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。自DM8产品上线以来,广受应用,达梦大学已于2020年6月...
官网微信公众号官方微信公众号
官方技术咨询一群官方技术咨询二群
官方技术咨询二群官方技术咨询三群
官网培训咨询QQ官网培训咨询QQ
支持:dmtech@dameng.com
地址:中国·武汉·东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层
咨询热线:400 991 6599
传真:+86 0755-2788 8009
友情链接:
鄂Copyright ©2017 - 2020 武汉达梦数据库有限公司
犀牛云提供企业云服务
X
3

电话号码

4

阿里旺旺设置

1

在线咨询

等待加载动态数据...

等待加载动态数据...

5

电话号码管理

6

二维码管理

  • 微信二维码

    微信二维码

等待加载动态数据...

等待加载动态数据...

展开