MySQL添加索引导致表死锁问题

出现该问题描述:由于SQL慢,希望通过索引优化,发现很多单字段索引、且组合索引缺少一些关键字段,便决定删除单字段索引,补全组合索引。修改完索引后提交,发现执行时间几个小时都没有执行完成。
造成结果:测试环境数据库表死锁,一些数据库执行语句查询超时。
MySQL有三种锁的级别:页级、表级、行级。
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

问题排查

1、使用show processlist 和 show full processlist

show processlist:查询当前数据库连接、连接状态等相关信息(当前100条)
show full processlist:查询当前数据库连接、连接状态等相关信息(全部连接)

在这里插入图片描述
①.id列,用户登录mysql时,系统分配的"connection_id",可以使用函数connection_id()查看
②.user列,显示当前用户。如果不是root,这个命令就只显示用户权限范围的sql语句
③.host列,显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题语句的用户
④.db列,显示这个进程目前连接的是哪个数据库
⑤.command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect),死锁(locked)等
⑥.time列,显示这个状态持续的时间,单位是秒
⑦.state列,显示使用当前连接的sql语句的状态,很重要的列。state描述的是语句执行中的某一个状态。一个sql语句,以查询为例,可能需要经过copying to tmp table、sorting result、sending data等状态才可以完成
⑧.info列,显示这个sql语句,是判断问题语句的一个重要依据

2、找到对应的死锁(locked)的连接

我们只需通过command状态为(locked),并通过info判断是什么造成的死锁。造成死锁的时长,然后获取其ID。
例如上面ID为274589
我们该线程杀死即可

kill 274589

3、使用show processlist 和 show full processlist或重新查看

看连接Id是否存在,不存在则标识关闭成功。在验证数据库的查询性能,完美解决了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到MySQL有三种锁的级别:页级、级、行级。其中级锁是一种常见的锁定方式,它的加锁快、开销小,但锁定粒度大,可能会导致锁冲突和并发度较低。当在MySQL添加索引时,如果的数据量很大,就有可能导致被锁死,即其他操作需要等待索引添加完成才能继续执行,从而造成查询超时和死锁问题。 引用建议,在一张数据量很大的添加索引时,应该谨慎操作,尽量避免轻易添加索引。如果非要添加索引,最好先备份数据,然后对空进行添加索引的操作,这样可以减少对的锁定时间和影响。 另外,如果在添加索引的过程中发现被锁死,可以通过查看执行语句的线程状态和ID,然后使用kill命令终止该线程,从而释放对的锁定,解决死锁问题。所以,MySQL添加索引时有可能会锁,特别是在数据量很大的情况下,因此在进行索引优化时需要注意锁的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL添加索引导致死锁问题](https://blog.csdn.net/weixin_42324471/article/details/123899776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mysql添加索引导致锁死](https://blog.csdn.net/u014466635/article/details/119680075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值