[原创]MySQL innodb_rollback_on_timeout参数对锁的影响

Posted su-han

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原创]MySQL innodb_rollback_on_timeout参数对锁的影响相关的知识,希望对你有一定的参考价值。

环境:Server version:         5.6.21-log MySQL Community Server (GPL)

前提提要:

 

 innodb_rollback_on_timeout是啥作用?
 答:事务B在锁等待超时后是回滚事务内所有的statement还是最后一条语句;
      0表示rollback最后一条语句,默认值;有点坑
      1表示回滚事务B内所有的statements;
此参数是只读参数,需在my.cnf中配置,并且重启生效; 注意:回滚statements后不自动commit或rollback事务;坑

表结构:

mysql> show create table t12\\G;
*************************** 1. row ***************************
       Table: t12
Create Table: CREATE TABLE `t12` (
  `a` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `b` varchar(766) DEFAULT NULL,
  `c` int(11) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

 

实验一:

参数配置:
mysql> show variables like \'innodb_rollback_on_timeout\';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_rollback_on_timeout | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like \'tx_iso%\';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

mysql> show variables like \'autocommit\';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

 过程:

 

 

实验二:

参数配置:
mysql> show variables like \'innodb_rollback_on_timeout\';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_rollback_on_timeout | OFF   |
+----------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like \'tx_iso%\';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

mysql> show variables like \'autocommit\';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

过程:

 

 

 总结:

1、关闭innodb_rollback_on_timeout后,一旦以begin;start transaction;等语句开启一个事务,当锁等待超时后,该事务请求的锁将不释放,直到事务提交或回滚或会话超时;

所以autocommit参数建议设置成ON,只要程序没有显示开启事务,就可以避免上述锁未释放问题。

2、开启innodb_rollback_on_timeout后,一旦锁等待超时,是事务内sql将全部回滚,且释放之前请求的锁。

3、当autocommit=on,只要不显示开启事务,将不存在上面2个问题,即锁的问题和回滚的问题。

 转载请备注:http://www.cnblogs.com/su-han/p/6204016.html

以上是关于[原创]MySQL innodb_rollback_on_timeout参数对锁的影响的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL主从库搭建(原创)

mysql 5.7 多源复制 原创

[mysql][原创]ubuntu18.04安装mysql

原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误改动备注

一个命令查看mysql的所有配置(原创)

keeplived + mysql双主复制部署 --原创