mysql 未提交事务问题定位和解决 (pymysql的autocommit)
2018-03-15 23:45
1216 查看
起因:下午同事在修改表结构时,发现修改语句被阻塞无法执行。
查询后发现有几个事务已经执行了几个小时,一直没有提交,修改表结构的操作必须等待所有已经开启的事务提交后才能执行。
查看事务
select * from information_schema.INNODB_TRX\G;
查看线程
SELECT * FROM information_schema.processlist;
只能找到这个未提交的事务的事务id和线程id,但都处于sleep状态,不好分析事务内容到底是什么,但是通过processList 里的IP定位到了对应的服务器和执行的脚本。
当时先杀死了这些线程。
重新运行脚本重现了当时的问题。
查看锁等待
SELECT * FROM information_schema.innodb_lock_waits;
查看还未结束的执行sql
select * from performance_schema.events_statements_current\G;
通过这个方法找到了执行的查询语句。
MySQL 的 SELECT,INSERT,UPDATE或DELETE都会开启事务。
如果AUTOCOMMIT设置为1(默认值),每一个SQL语句都被认为是一个完整的事务。 AUTOCOMMIT设置为0时,在随后的一系列语句的作用就像一个事务,直到一个明确的COMMIT语句结束。
脚本是python 写的,用的pymysql 操作数据库。pymysql 初始化连接时,默认 autocommit=False, 代码里也没有手动commit, 脚本本身是常驻进程,所以查询事务一直没有提交。
将pymysql 的连接初始化的 autocommit 设为 True, 至此问题解决。
参考链接:
http://www.ywnds.com/?p=8841
http://blog.csdn.net/zyz511919766/article/details/49335729
查询后发现有几个事务已经执行了几个小时,一直没有提交,修改表结构的操作必须等待所有已经开启的事务提交后才能执行。
查看事务
select * from information_schema.INNODB_TRX\G;
查看线程
SELECT * FROM information_schema.processlist;
只能找到这个未提交的事务的事务id和线程id,但都处于sleep状态,不好分析事务内容到底是什么,但是通过processList 里的IP定位到了对应的服务器和执行的脚本。
当时先杀死了这些线程。
重新运行脚本重现了当时的问题。
查看锁等待
SELECT * FROM information_schema.innodb_lock_waits;
查看还未结束的执行sql
select * from performance_schema.events_statements_current\G;
通过这个方法找到了执行的查询语句。
MySQL 的 SELECT,INSERT,UPDATE或DELETE都会开启事务。
如果AUTOCOMMIT设置为1(默认值),每一个SQL语句都被认为是一个完整的事务。 AUTOCOMMIT设置为0时,在随后的一系列语句的作用就像一个事务,直到一个明确的COMMIT语句结束。
脚本是python 写的,用的pymysql 操作数据库。pymysql 初始化连接时,默认 autocommit=False, 代码里也没有手动commit, 脚本本身是常驻进程,所以查询事务一直没有提交。
将pymysql 的连接初始化的 autocommit 设为 True, 至此问题解决。
参考链接:
http://www.ywnds.com/?p=8841
http://blog.csdn.net/zyz511919766/article/details/49335729
相关文章推荐
- 终极办法:解决spring mvc+mysql+mybatis事务不提交不回滚的问题
- MySQL事务autocommit自动提交
- mysql autocommit自动提交问题
- MySQL Innodb事务自动提交(autocommit)
- MySQL事务autocommit自动提交
- MySQL事务autocommit自动提交
- MySQL事务autocommit自动提交
- MySQL事务autocommit自动提交
- 从源码安装mysql无法定位basedir问题的解决方法
- SVN提交数据(Commit)失败问题(MKACTIVITY ... 403 Forbidden)解决方法
- 服务器断网事务未提交导致MYSQL锁表问题(ADSL拨号上网)
- js光标定位文本框回车表单提交问题的解决方法
- SVN提交数据(Commit)失败问题(MKACTIVITY ... 403 Forbidden)解决方法
- XCode7中自带git出现身份不确认以及commit不能提交问题的解决办法
- mysql中使用事务和行锁解决并发修改的问题
- 定位MySQL锁和事务问题的两大利器
- 解决事务未完成提交,其它db连接查询不到的问题
- MySQL AutoCommit带来的问题
- 当anoconda安装包出现问题时解决方法&python3下安装pymysql和aiomysql方法
- mysql禁用autocommit,以及遇到的问题