Waiting for table阻塞查询的问题

今天看了一个案例,自己在备库上做了一下。确实会引起很多问题。
1.一些慢SQL在运行
2.一个终端发出了flush tables命令
3.很多查询都被阻塞了

假设有两个慢SQL正在运行,这时发出的flush tables命令被阻塞,
但是后续的查询重新打开表,前提条件是所有的线程关闭表,但是慢SQL还在运行。
步骤1阻塞了步骤二,步骤二导致步骤三需要等待步骤一。

The thread got a notification that the underlying structure for a table has changed and it needs to reopen the table to get the new structure. However, to reopen the table, it must wait until all other threads have closed the table in question. This notification takes place if another thread has used FLUSH TABLES or one of the following statements on the table in question: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, orOPTIMIZE TABLE.

大概的情况就是这样。
在主从读写分离的模式下,主库使用Xtrabackup备份,中间会有一个flush tables with read lock。
如果这个被复制到了从库,而不巧从库还有慢SQL,那么这个问题就很可能出现。
但是使用Xtrabackup备份是否复制flush tables,我还需要进一步实验。

实验如下:
终端一运行一个慢SQL

终端二也运行一个慢SQL

终端三运行flush tables,被两个慢SQL阻塞

终端四的普通查询被阻塞

终端五的普通查询被阻塞

查看上述终端的运行情况


参考:
http://blog.itpub.net/29254281/viewspace-1082297/
http://hidba.org/?p=421

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1157701/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29254281/viewspace-1157701/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值