十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
大规模多线程操作事务的时候,有时候打开一个链接,会进行等待,这时候如果数据库的超时时间设置的过短,就可能会出现,数据链接自动被释放,当然设置过大也不好,慢SQL或其他因素引起的链接过长,导致整个系统被拖慢,甚至挂掉。SO,适当的设置超时时间。设置方法:
在岷县等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、网站制作 网站设计制作按需规划网站,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站,成都外贸网站制作,岷县网站建设费用合理。
SHOW GLOBAL VARIABLES LIKE '%timeout%'
SET GLOBAL wait_timeout=10000
网页链接
问题:Lock wait timeout exceeded; try restarting transaction
MySQL版本:5.6.44
官方文档
意思是:InnoDB在锁等待超时过期时报告此错误。等待时间过长的语句被回滚(而不是整个事务)。如果SQL语句需要等待其他事务完成的时间更长,则可以增加 innodb_lock_wait_timeout 配置选项的值;如果太多长时间运行的事务导致锁定问题并降低繁忙系统上的并发性,则可以减少该选项的值。
锁等待超时,可能是出现了死锁,也可能有事务长时间未提交
库:information_schema
表:
查看各表信息
innodb_trx 表
innodb_locks 表
innodb_lock_waits 表
processlist 表
模拟出现死锁
准备一张只有主键的表:t_test (id)
Navicat 新建查询1
Navicat 新建查询2
检查是否锁表
查询当前正在执行的事务
查询当前出现的锁
查询锁等待对应的关系
查询等待锁的事务所执行的SQL
最后,事务2 等待锁超时报错: Lock wait timeout exceeded; try restarting transaction;
通过事务线程ID查找进程信息
win10 查看端口信息
C3P0连接池连接mysql有时会出现如下错误:
这是C3P0配置的超时时间和mysql超时时间不一致导致的,C3P0为60秒超时,mysql为30秒超时,在30-60之间的时间mysql已经断开连接,而C3P0还维持连接,再次发送请求就会报上面的错误。
解决方法:
1、修改C3P0的maxIdleTime参数为30。
2、修改mysql的wait_timeout参数为60秒。不停机状态下进入mysql命令行,执行set global wait_timeout=60;
MySQL超时时间设置:使用Druid可以配置。
具体设置方法,代码如下:
!-- 超过时间限制是否回收 --
property name="removeAbandoned" value="true" /
!-- 超时时间;单位为秒。180秒=3分钟 --
property name="removeAbandonedTimeout" value="180" /
!-- 关闭abanded连接时输出错误日志 --
property name="logAbandoned" value="true" /
第一种途径使用命令行set
@@GLOBAL.wait_timeout=1814400
这种方式是一种临时方法,重启服务就会返回默认值了。
第二种途径修改my.ini配置文件
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
在mysqld下面添加以上两行,后面的数字是时间
首先服务中找到mysql,然后右键属性,在可执行文件的路径中,使劲向后拖动鼠标就可以看到my.ini的文件了
查看mysql server超时时间:
msyql show global variables like '%timeout%';
设置mysql server超时时间(以秒为单位):
msyql set global wait_timeout=10;
msyql set global interactive_timeout=10;