MySQL超时参数

在应用中经常会碰到超时类的问题,而且这种问题的特点在于,它没有返回给你结果,你不知道是执行成功了,还是执行失败了,如果没有限制,程序一直超时拖延下去,对系统是很大的危害。

除了分布式系统中的超时处理,还有就是平时我们使用的MySQL超时机制:

show variables like '%timeout%';
image-20190422154310979

参数

connect_timeout

连接超时,默认是10秒钟,用于客户端连接mysql的时候,在多少秒之后显示错误信息。

delayed_insert_timeout

默认300s,主要用于MyISAM引擎,在MySQL 8.0版本已经移除了这个变量。

innodb_flush_log_at_timeout

默认1s钟,定义了innodb引擎多久刷新一次buffer到磁盘上,它稍微有点依赖innodb_flush_log_at_trx_commit需要

innodb_flush_log_at_trx_commit=2

每次的提交日志都会从log buffer写到OS buffer。

innodb_lock_wait_timeout

定义了事务等待行锁的超时时间,默认是50s钟。

// session1中
SET autocommit = 0;
start TRANSACTION;
select * from user where a=8 for update;


// session2中
update user set a=18 where a=8;
image-20190422181949734
image-20190422182050532
innodb_rollback_on_timeout

默认是关闭的,当事务执行超时的时候,回滚事务。这样可以避免某些只执行了部分的事务。

interactive_timeout

默认是28800秒,也就是8小时,当一个连接在8个小时内没有与数据库任何交互的话,MySQL会尝试断开此次连接,并重新连接。

lock_wait_timeout

默认是31536000s,近似于没有超时。这个只有在处理元数据的锁时候才生效,很少会起作用。

net_read_timeout

默认是30s钟,如果在30s之后,数据库的读操作还没有执行完毕的话,它就会放弃当前的连接。

net_write_timeout

默认是30s,30s后,数据库的写操作还没有执行完毕,就丢弃这次写操作

wait_timeout

默认是8小时,定义的是非交互式连接的超时时长,当超时发生的时候,MySQL会退出当前的连接,并且重启一个连接。

最后

这里只是简单的总结了MySQL的几个常见超时设置,留待后续参考,后需要会进行补充

你可能感兴趣的:(MySQL超时参数)