阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL innodb_rollback_on_timeout参数对锁的影响

143次阅读
没有评论

共计 2141 个字符,预计需要花费 6 分钟才能阅读完成。

环境: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
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 innodb_rollback_on_timeout 参数对锁的影响

实验二:

 参数配置: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)

过程:

MySQL innodb_rollback_on_timeout 参数对锁的影响

总结:

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

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

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

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

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140841.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2141字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中