MySQL官方版本不支持空闲事务自动kill的功能,Percona版本的MySQL引入了参数 kill_idle_transaction 和 innodb_kill_idle_transaction 来支持自动杀空闲事务。这两个参数本质上是一样的,innodb_kill_idle_transaction 是 kill_idle_transaction 参数的一个别名,在 5.7 版本,两个参数都可以使用,设置其中一个,另外一个也跟着变化。在 8.0 版本只保留了kill_idle_transaction参数。该参数设置的值为事务空闲的时间阈值,单位为秒,当一个事务空闲时间超过该阈值时,就会被强制杀掉。
kill_idle_transaction:
- 作用范围:全局,不支持session级修改
- 动态修改:是
- 默认值:0,即不杀空闲事务
看一个示例,设置kill_idle_transaction为5,然后开启一个事务,5秒之后,提交该事务,发现连接已经被杀掉,如下:
mysql> set global kill_idle_transaction=5;
Query OK, 0 rows affected (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 309
Current database: db
Query OK, 0 rows affected (0.01 sec)