[Warning] InnoDB: A long semaphore wait

 

mysql版本: 5.7.29

 

大量的日志
2021-08-13T00:59:23.099878Z 0 [Warning] InnoDB: A long semaphore wait:
--Thread 139974037272320 has waited at srv0srv.cc line 1989 for 614 seconds the semaphore:
X-lock on RW-latch at 0x396b1648 created in file dict0dict.cc line 1191
a writer (thread id 139973910796032) has reserved it in mode exclusive
number of readers 0, waiters flag 1, lock_word: 0
Last time read locked in file row0purge.cc line 882
Last time write locked in file /export/home/pb2/build/sb_0-37309218-1576676677.02/mysql-5.7.29/storage/innobase/row/row0mysql.cc line 4313
2021-08-13T00:59:23.099912Z 0 [Warning] InnoDB: A long semaphore wait:
--Thread 139972907202304 has waited at buf0flu.cc line 1217 for 334 seconds the semaphore:
SX-lock on RW-latch at 0x7f56938befc0 created in file buf0buf.cc line 1468
a writer (thread id 139973910796032) has reserved it in mode exclusive
number of readers 0, waiters flag 1, lock_word: 0
Last time read locked in file row0sel.cc line 1343
Last time write locked in file /export/home/pb2/build/sb_0-37309218-1576676677.02/mysql-5.7.29/storage/innobase/row/row0upd.cc line 2875
InnoDB: ###### Starts InnoDB Monitor for 30 secs to print diagnostic info:
InnoDB: Pending preads 0, pwrites 0

解决办法:

原来 Linux内核信号量默认设置太小,造成大量等待,
默认
# cat /proc/sys/kernel/sem
250 32000 32 128
说明:
第一列,表示每个信号集中的最大信号量数目。
第二列,表示系统范围内的最大信号量总数目。
第三列,表示每个信号发生时的最大系统操作数目。
第四列,表示系统范围内的最大信号集总数目。


将第三列调大一点,参考网上的数据
echo "kernel.sem=250 32000 100 128">>/etc/sysctl.conf
然后sysctl -p
重启 MySQL

错误不再出现,问题即可解决

posted @   slnngk  阅读(634)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-08-13 golang发送html邮件带附件
2019-08-13 双重循环例子
点击右上角即可分享
微信分享提示