mysql数据的进程 rollback_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

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.00sec)

mysql> show variables like 'tx_iso%';+---------------+-----------------+

| Variable_name | Value |

+---------------+-----------------+

| tx_isolation | REPEATABLE-READ |

+---------------+-----------------+

1 row in set (0.00sec)

mysql> show variables like 'autocommit';+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit | ON |

+---------------+-------+

1 row in set (0.00 sec)

过程:

61e24be1d5b3a56b5c7cc8b28ad5fdf9.png

实验二:

参数配置:

mysql> show variables like 'innodb_rollback_on_timeout';+----------------------------+-------+

| Variable_name | Value |

+----------------------------+-------+

| innodb_rollback_on_timeout | OFF |

+----------------------------+-------+

1 row in set (0.00sec)

mysql> show variables like 'tx_iso%';+---------------+-----------------+

| Variable_name | Value |

+---------------+-----------------+

| tx_isolation | REPEATABLE-READ |

+---------------+-----------------+

1 row in set (0.00sec)

mysql> show variables like 'autocommit';+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit | ON |

+---------------+-------+

1 row in set (0.00 sec)

过程:

017453b44819d0ca005185607a3549bd.png

总结:

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

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

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

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

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值