- 积分
- 33
- UID
- 19681
- 阅读权限
- 10
- 注册时间
- 2015-8-27
- 精华
- 在线时间
- 小时
- 最后登录
- 1970-1-1
- 职业
- 1
|
诸位好,最近遇到了一个问题,不得其解,向各位请教一下:
有一套主从数据库,版本为:percona mysql 5.6.22
每隔一段时间,从库的同步就会停止,报错如下:
Last_Errno: 1205
Last_Error: Slave SQL thread retried transaction 10 time(s) in vain, giving up. Consider raising the value of the slave_transaction_retries variable.
可以通过stop slave/start slave暂时解决该问题,但是过一段时间还会发生,通过error.log和slow.log定位到,每次同步停止时,都在对某张表执行一个sql,sql执行事件达到了20分钟左右,通过日志的信息,定位到该操作是某位同事执行的从数据库中抽取数据到Hbase集群,该抽取过程执行的sql类似下面:
select count(*) from a; 首先确认表a的行数,量级在6百万行左右。
select col1,col2,col3,col4 from a limit 3000000 offset 0;
select col1,col2,col3,col4 from a limit 3000000 offset 3000000;
比较疑惑的是select怎么会造成锁表,查了一下数据库的隔离级别确实为:REPEATABLE-READ
等同事再次执行该抽取的时候,查看了一下执行sql的事务隔离级别,居然变成SERIALIZABLE。
(定位的方法参考了http://www.th7.cn/db/mysql/201403/45021.shtml,该文章中遇到的问题和我一致,但没给出解决方案)
那么我的疑问就是,什么情况下select事务的隔离级别会变为SERIALIZABLE,抽取工作之后可能还会执行,又该怎么解决该问题?
目前临时的解决办法是放大了slave_transaction_retries,但是感觉治标不治本,还望各位赐教。
|
|