MySQL 出现long semaphore wait 导致数据库hang住无法提供服务

文章讲述了在系统高负载情况下,MySQL数据库出现longsemaphorewait错误,导致实例挂起。通过分析发现,这可能是由于并发访问过多、锁竞争激烈造成的。解决方法包括优化SQL语句、关闭自适应哈希索引。

背景介绍

  • 数据库症状:系统高负载情况下错误日志中出现long semaphore wait信息,数据库实例本身hang住,无法提供正常的访问服务,可登录,但登录后任何操作没有反应。
  • 数据库版本:8.0.20
  • 操作系统版本:CentOS 7.6
  • 主机信息:32GB内存,CPU 16cores
  • 数据库架构:单实例MySQL

处理方式

 鉴于业务端无法正常使用DB,故只能通过操作系统层面执行命令 kill -9的方式临时杀进程重启MySQL实例,以最短的时间恢复DB正常使用。

问题分析

 首先通过MySQL错误日志中的内容进行原因查找,错误日截图如下:(由于当时获取信息不便,临时采用截图的方式保留故障信息)

概念:
long semaphore waits 是什么? --信号量,控制资源的并发访问 这里是信号量的等待,Semaphore就像可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。
背景
Innodb使用了mutex和rw_lock来保护内存数据结构,同步的机制要么是互斥,要么是读写阻塞的模式。
Innodb认为mutex和rw_lock hold的时间足够短,所以,如果有线程wait mutex或者rw_lock时间过长,那么很可能是程序有bug,所以就会异常主动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值