资讯专栏INFORMATION COLUMN

mysql锁等待处理经验分享

IT那活儿 / 918人阅读
mysql锁等待处理经验分享
1. MySQL数据库锁等待信息

经业务侧反馈,系统MySQL数据库锁等待比较严重,查看MySQL数据库锁等待情况如下:

可知,锁等待主要在`**** `.`**** `这个表上。


2. 表结构信息

查看表结构如下:

可知,表有一个自增主键playlistid和唯一索引createuserid。


3. 死锁产生原因分析

由innodb auto_increment的锁定模式设置为1,可知此模式下所有insert...select类语句针对自增主键会使用auto_inc表级锁,并保持到语句结束。同一时刻只有一个语句可以持有auto_inc锁。
由innodb状态信息得知,同时有多个事务并发对****这张表进行insert操作。事务1的insert操作会触发unique key的冲突检查进行一个当前读并加上X锁,等待持有自增主键的auto_inc锁。事务2的insert操作首先获得自增主键的auto_inc锁,此时为表级锁,等待持有对应记录的X锁(包含Gap锁)。此时事务1和事务2造成死锁,因为事务1的权重较小,MySQL选择回滚事务1。


4. 优化建议

建议修改业务逻辑,将insert...select语句修改为insert ingore或者replace的方式。

将多个事务的执行顺序进行调整避免锁等待。


5. 总 结

业务程序中一定要做好事务控制,事务结束时务必确保显示提交,释放持有的锁避免阻塞。程序中应尽量保证事务的原子性,一个事务实现一个逻辑,避免多个逻辑混合在一个事务中。

END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129876.html

相关文章

  • 系统优化怎么做-JVM优化之开篇

    摘要:几个死锁场景两个线程相互调用导致互相等待同步结束。线程为了检测死锁,它需要递进地检测所有被请求的锁。思考题线程有哪些状态这些线程大多处于什么样的状态分布我们可以称系统运行是健康的。 前言 在上一期Tomcat优化中,针对JVM相关主要参数做过一定说明,这一期主要介绍进行一些概念及经验。后面分章节去讲述相关工具的基本使用。 优化优先级 整体来讲,系统优化应先优化架构及代码,来解决具体功能...

    gecko23 评论0 收藏0
  • 为什么开发人员必须要了解数据库

    摘要:小明马上开发完毕,成功上线。下班过后,小明回想大红说的话,什么是间隙锁,什么是插入意向锁,看来作为开发者对数据库不应该只会写啊,不然遇到一些疑难杂症完全没法解决啊。破坏了数据库中的隔离性。 1.锁? 1.1何为锁 锁在现实中的意义为:封闭的器物,以钥匙或暗码开启。在计算机中的锁一般用来管理对共享资源的并发访问,比如我们java同学熟悉的Lock,synchronized等都是我们常见的...

    AbnerMing 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<