博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL innodb_rollback_on_timeout参数对锁的影响
阅读量:5873 次
发布时间:2019-06-19

本文共 2371 字,大约阅读时间需要 7 分钟。

hot3.png

环境: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: t12Create 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=latin11 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个问题,即锁的问题和回滚的问题。

转载于:https://my.oschina.net/u/855913/blog/2086014

你可能感兴趣的文章
PHP 程序员的技术成长规划
查看>>
用于守护进程的出错处理函数
查看>>
AppCan可以视为Rexsee的存活版
查看>>
【转】SQL SERVER 2005 数据库状态为“可疑”的解决方法
查看>>
事件、委托、委托方法的总结(使用EventHandler<>)
查看>>
Revit API 创建带箭头的标注
查看>>
jetty启动报错Unsupported major.minor version 51.0
查看>>
Xamarin.Android开发实践(七)
查看>>
彩色图像上执行Mean Shift迭代搜索目标 ,维加权直方图 + 巴氏系数 + Mean Shift迭代...
查看>>
深入理解JavaScript系列
查看>>
strtol 函数用法
查看>>
eclipse内存溢出设置
查看>>
搭建jenkins环境(linux操作系统)
查看>>
VS 2015 GIT操作使用说明
查看>>
上海办理房产税变更
查看>>
每天一个linux命令(52):scp命令
查看>>
CMOS Sensor Interface(CSI)
查看>>
linq中的contains条件
查看>>
HDU 5590 ZYB's Biology 水题
查看>>
memcached 分布式聚类算法
查看>>