mysql error [MY-012872] INNODB DATAL semaphors wait has lasted>600seconds

mysql error [MY-012872] INNODB DATAL semaphors wait has lasted>600seconds

具有抛错见图:
在这里插入图片描述

问题原因:INNODB数据字典信号量(semaphore)等待超过了600秒。数据字典信号量是InnoDB用来协调对数据字典的并发访问的内部机制。如果等待时间过长,可能会导致数据库性能问题或死锁或者数据库系统链接不上。

解决方法:

1、检查是否存在长查询,登录数据库使用SHOW FULL PROCESSLIST命令,查看Query的time值是否存在长时间
在这里插入图片描述

2、检查系统资源使用情况,如CPU和I/O负载,确认是否由于系统资源不足导致等待时间增加。

3、调整InnoDB的配置参数:
innodb_buffer_pool_size:是InnoDB引擎中最为重要的内存参数之一,也是最需要优化的参数。它指定了InnoDB缓存数据和索引所使用的内存大小。目的是将经常使用到的数据缓存到内存中,减少磁盘IO操作的次数。默认为128M,可以设置为大些,这里设置了5G,可以根据环境具体内存大小设置,据说可以设置为内存大小的70%~80%,具体没验证过。

show variables like 'innodb_buffer_pool_size';
set global innodb_buffer_pool_size=5368709120;

在这里插入图片描述
nnodb_log_buffer_size:InnoDB引擎写入事务日志缓存的内存大小。它主要影响到日志写入的速度。在高并发的情况下,如果日志写入缓存较小,则可能会出现日志写满的情况,导致系统崩溃。

优化建议:innodb_log_buffer_size的大小需要与innodb_log_file_size参数相匹配。通常建议将innodb_log_buffer_size设置为innodb_log_file_size的1/4-1/2左右。其次,如果系统中存在大量的并发事务,则需要适当增大innodb_log_buffer_size,以提高写入速度。

show variables like 'innodb_log_buffer_size';
set global innodb_log_buffer_size=213909504;

在这里插入图片描述

nnodb_thread_concurrency:InnoDB引擎的线程并发度。它决定了InnoDB引擎中同时执行的线程数量。

优化建议:通常建议将innodb_thread_concurrency设置为系统CPU核心数的2-4倍。但是,需要根据实际情况进行调整。如果系统中存在大量的并发事务,则需要适当增大

show variables like 'innodb_thread_concurrency';
set global innodb_thread_concurrency=8;

在这里插入图片描述

以上部分内容参考如下链接:
原文链接:https://blog.csdn.net/java_wxid/article/details/131755836

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值