美文网首页
1、mysql没有设置索引引发的死锁问题

1、mysql没有设置索引引发的死锁问题

作者: xinput | 来源:发表于2018-08-13 19:20 被阅读0次

死锁日志

死锁日志

测试索引对于多事务的影响,也是并发的影响。

1、开启两个客户端工具,操作同一张表。t_notify.表目前只有主键id,没有索引。现在需要在两个事务中分别执行以下语句

UPDATE t_notify SET unread = 0 WHERE sender_id = '5b4dd776cc68c71f577e06f0' AND record_state = 0 AND unread =1 AND notify_type IN ('remind_report_update_male', 'remind_report_update_female');

UPDATE  t_notify SET unread =0 WHERE sender_id= '5b44291f40658923b71aec13' AND notify_type = 'im_patient_to_team';

如果在同一个事务下,顺序执行,则不会有问题,但是如果现在一个事务执行一个语句,还没有提交,另外一个事务也执行了,则会发生死锁。

2、使用以下语句,可以查看到最后一次死锁记录。并可以查看出死锁发生原因。如果里面的内容不明白,可以先谷歌。

show engine innodb status;

3、不加索引情况下,模拟

-- 客户端1,开启事务,但是不提交,这个执行顺序为1
START TRANSACTION;

UPDATE t_notify SET unread = 0 WHERE sender_id = '5b4dd776cc68c71f577e06f0' AND record_state = 0 AND unread =1 AND notify_type IN ('remind_report_update_male', 'remind_report_update_female');
-- 客户端2,开启事务执行完2,提交,这个执行顺序为2.这样就可以模拟出简单的并发
START TRANSACTION;

UPDATE  t_notify SET unread =0 WHERE sender_id= '5b4dd776cc68c71f577e06f0' AND notify_type = 'im_patient_to_team';

commit;

4、上述第二个客户端会发生死锁,死锁日志可以通过 步骤2 查看。

5、添加索引
alter table t_notify add index senderId_notifyType(sender_id,notify_type);

6、再重复步骤4的内容,重复4的内容前,先使用 show processList; 查看一下,看是否有锁状态。如果有,可以在客户端1中执行一次 commit; 再次查看 show processList;将其中被锁的线程kill掉。

7、原因

在没有索引的情况下,执行inser update delete是对全表的加锁,在并发比较多的情况下,我们需要尽量将锁的粒度缩小,使用行级锁。如果并发量更大,事务更多,我们需要使用缓存或者部分渗透的方法。

更多锁信息见 1-1、mysql锁机制

相关文章

  • 1、mysql没有设置索引引发的死锁问题

    死锁日志 死锁日志 测试索引对于多事务的影响,也是并发的影响。 1、开启两个客户端工具,操作同一张表。t_noti...

  • Mysql面试题

    文章目录 MySQL 索引使用有哪些注意事项呢?索引哪些情况会失效索引不适合哪些场景 MySQL 遇到过死锁问题吗...

  • mysql死锁-非主键索引更新引起的死锁

    [mysql死锁-非主键索引更新引起的死锁] 背景:最近线上经常抛出mysql的一个Deadlock,细细查来,长...

  • MySQL笔记-锁、事务与并发控制

    MySQL服务器逻辑架构 MySQL并发控制 MySQL死锁问题 MySQL中的事务

  • 经典问题处理记录

    1.mysql update操作死锁问题 故障描述 日志监控发现少量数据库死锁异常 问题原因 设计方案使用悲观锁s...

  • index_merge优化引发的死锁案例分析

    岁末年初,似乎是跟死锁杠上了。 从一次线上Mysql死锁引发的血案开始,到使用BeanUtils进行属性复制的坑,...

  • MySQL001

    1.mysql设置索引 https://www.cnblogs.com/junrong624/p/7411679....

  • mysql 知识点汇总

    1. 使用 mysql 索引都有哪些原则? 只对WHERE和ORDER BY需要查询的字段设置索引,避免无意义的硬...

  • Mysql索引相关

    此文章主要回答以下问题:1 、索引数据结构演变2 、mysql索引数据结构 mysql索引的演变 线性结构:首先不...

  • MySQL死锁案例_唯一索引

    近期在MySQL数据库中产生了死锁的情况,与通常的死锁不同,由于表中有唯一索引,所以加锁方式也比较有趣,本文将对于...

网友评论

      本文标题:1、mysql没有设置索引引发的死锁问题

      本文链接:https://www.haomeiwen.com/subject/smwubftx.html