那时候您会发现flush table处于阻塞状态,此时你会意识flush table处于阻塞状态

 

 

前不久遇上四个案例,很多询问被卡住没有重临结果,使用show
processlist查看,发现许多MySQL线程处于Waiting for table
flush状态,查询语句一贯被打断,只可以通过Kill进度来消除。那么大家先来看看Waiting
for table
flush的官方表达:https://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html

最近遇上1个案例,很多询问被打断没有回来结果,使用show
processlist查看,发现许多MySQL线程处于Waiting for table
flush状态,查询语句一向被卡住,只可以通过Kill进程来解决。那么大家先来探望Waiting
for table
flush的官方表达:https://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html

 

 

Waiting
for table flush

Waiting
for table flush

 

 

The
thread is executing FLUSH TABLES and is
waiting for all threads to close their tables, or 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.

The
thread is executing FLUSH TABLES and is
waiting for all threads to close their tables, or 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, or OPTIMIZE
TABLE.

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, or OPTIMIZE
TABLE.

 

 

 

 

那么我们接下去模拟一下线程处于Waiting
for table flush状态的情事,如所示:

那就是说大家接下去模拟一下线程处于Waiting
for table flush状态的状态,如所示:

 

 

在率先个会话连接(connection
id=13)中,大家利用lock table 锁定表test。 

在第贰个会话连接(connection
id=13)中,大家使用lock table 锁定表test。 

 

 

mysql> use MyDB;

Database changed

mysql> select connection_id();

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

| connection_id() |

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

|              13 |

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

1 row in set (0.00 sec)

 

mysql> lock table test read;

Query OK, 0 rows affected (0.00 sec)

 

mysql> 
mysql> use MyDB;

Database changed

mysql> select connection_id();

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

| connection_id() |

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

|              13 |

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

1 row in set (0.00 sec)

 

mysql> lock table test read;

Query OK, 0 rows affected (0.00 sec)

 

mysql> 

 

 

 

 

 

 

在其次个会话连接(connection
id=17)中,我们履行flush table 或 flush table test
皆可。此时你会发现flush table处于阻塞状态。

在其次个会话连接(connection
id=17)中,大家履行flush table 或 flush table test
皆可。此时您会发觉flush table处于阻塞状态。

 

 

mysql> use MyDB;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> select connection_id();

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

| connection_id() |

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

|              17 |

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

1 row in set (0.00 sec)

 

mysql> flush table test;
mysql> use MyDB;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> select connection_id();

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

| connection_id() |

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

|              17 |

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

1 row in set (0.00 sec)

 

mysql> flush table test;

 

 

 

 

图片 1

图片 2

 

 

 

 

在第多个会话/连接中,当你切换到MyDB时,就会提示“You
can turn off this feature to get a quicker startup with -A”
,此时地处阻塞状态。此时你退出会话,使用参数-A登录数据库后,你假若查询test表,就会处于阻塞状态(当然查询其余表不会被打断)。如下所示:

在第④个会话/连接中,当您切换来MyDB时,就会提醒“You
can turn off this feature to get a quicker startup with -A”
,此时居于阻塞状态。此时你退出会话,使用参数-A登录数据库后,你如若查询test表,就会处于阻塞状态(当然查询其余表不会被打断)。如下所示:

 

 

mysql>
use MyDB;

mysql>
use MyDB;

Reading
table information for completion of table and column names

Reading
table information for completion of table and column names

You
can turn off this feature to get a quicker startup with -A

You
can turn off this feature to get a quicker startup with -A

 

 

 

 

mysql>
use MyDB;

mysql>
use MyDB;

Database
changed

Database
changed

mysql>
select * from test;

mysql>
select * from test;

 

 

图片 3

图片 4

 

 

 

 

在第四个会话/连接,大家用show
processlist查看到日前数据库全数连接线程状态,你会师到1⑦ 、18都远在Waiting
for table flush的景观。如下截图所示:

在第多个会话/连接,大家用show
processlist查看到眼下数据库全部连接线程状态,你会面到1⑦ 、18都处在Waiting
for table flush的情事。如下截图所示:

 

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info               |

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

| 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |

| 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |

| 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |

| 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |

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

4 rows in set (0.00 sec)

 

mysql> 
mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info               |

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

| 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |

| 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |

| 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |

| 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |

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

4 rows in set (0.00 sec)

 

mysql> 

 

 

图片 5

图片 6

 

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info               |

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

| 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |

| 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |

| 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |

| 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |

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

4 rows in set (0.00 sec)

 

mysql> 

mysql> 

mysql> 

mysql> 

mysql> show open tables where in_use >=1;

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

| Database | Table | In_use | Name_locked |

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

| MyDB     | test  |      1 |           0 |

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

1 row in set (0.00 sec)

 

mysql> kill 17;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info               |

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

| 13 | root | localhost | MyDB | Sleep   |  442 |                         | NULL               |

| 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |

| 18 | root | localhost | MyDB | Query   |  361 | Waiting for table flush | select * from test |

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

3 rows in set (0.00 sec)

 

mysql> kill 13;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State | Info             |

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

| 14 | root | localhost | NULL | Query   |    0 | init  | show processlist |

| 18 | root | localhost | MyDB | Sleep   |  427 |       | NULL             |

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

2 rows in set (0.00 sec)

 

mysql> 
mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info               |

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

| 13 | root | localhost | MyDB | Sleep   |   90 |                         | NULL               |

| 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |

| 17 | root | localhost | MyDB | Query   |   52 | Waiting for table flush | flush table test   |

| 18 | root | localhost | MyDB | Query   |    9 | Waiting for table flush | select * from test |

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

4 rows in set (0.00 sec)

 

mysql> 

mysql> 

mysql> 

mysql> 

mysql> show open tables where in_use >=1;

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

| Database | Table | In_use | Name_locked |

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

| MyDB     | test  |      1 |           0 |

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

1 row in set (0.00 sec)

 

mysql> kill 17;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info               |

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

| 13 | root | localhost | MyDB | Sleep   |  442 |                         | NULL               |

| 14 | root | localhost | NULL | Query   |    0 | init                    | show processlist   |

| 18 | root | localhost | MyDB | Query   |  361 | Waiting for table flush | select * from test |

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

3 rows in set (0.00 sec)

 

mysql> kill 13;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State | Info             |

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

| 14 | root | localhost | NULL | Query   |    0 | init  | show processlist |

| 18 | root | localhost | MyDB | Sleep   |  427 |       | NULL             |

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

2 rows in set (0.00 sec)

 

mysql> 

 

 

|
图片 7

|
图片 8

 

 

留神:大家必要Kill线程13,
Kill掉线程17是解决不了难题的。

注意:大家须求Kill线程13,
Kill掉线程17是消除不了难题的。

 

 

 

 

 

 

生育条件中,很多时候大概不是lock
table read引起的围堵,而是由于慢查询,导致flush
table平素不能够关闭该表而直接处于等候景况,例如下边测试案例中,作者利用同样张大表做笛Carl积模拟三个慢查询,其余操作相同,如下所示,你会晤到同一产生了Waiting
for table flush

传延宗族条件中,很多时候大概不是lock
table read引起的梗塞,而是由于慢查询,导致flush
table一直不恐怕关闭该表而直白处在等候状态,例如上边测试案例中,作者使用相同张大表做笛Carl积模拟一个慢查询,其余操作相同,如下所示,你会看到同样发出了Waiting
for table flush

 

 

mysql>
SELECT T.* FROM TEST1 T, TEST1 L;

mysql>
SELECT T.* FROM TEST1 T, TEST1 L;

 

 

图片 9

图片 10

 

 

 

 

此外,网上有个案例,mysqldump备份时,假如没有运用参数—single-transaction
或由于同时利用了flush-logs与—single-transaction八个参数也只怕引起这么的等候场景,这些三个参数放在一块儿,会在发轫dump数据以前先实行三个FLUSH
TABLES操作。

除此以外,网上有个案例,mysqldump备份时,假使没有动用参数—single-transaction
或出于同时接纳了flush-logs与—single-transaction多个参数也说不定引起这么的等候场景,这个三个参数放在一块儿,会在先导dump数据从前先进行一个FLUSH
TABLES操作。

 

 

 

 

 

 

赶尽杀绝方案:

解决方案:

** 

** 

 

 

出现Waiting
for table flush时,大家一般须求找到那3个表被lock住或那几个慢查询导致flush
table平素在等候而不能关闭该表。然后Kill掉对应的线程即可,不过什么精准定位是3个挑战,尤其是生产条件,你选拔show
processlist会看到大批量的线程。让你眼花缭乱的,怎么一转眼定位难点呢?

出现Waiting
for table flush时,大家一般必要找到那多少个表被lock住或那多少个慢查询导致flush
table一向在等待而望洋兴叹关闭该表。然后Kill掉对应的线程即可,不过怎么精准定位是2个挑衅,特别是生育环境,你选择show
processlist会看到多量的线程。让您眼花缭乱的,怎么一转眼定位难点呢?

 

 

对此慢查询引起的其余线程处于Waiting
for table flush状态的景观:

对于慢查询引起的别的线程处于Waiting
for table flush状态的情状:

 

 

能够查看show
processlist中Time值相当的大的线程。然后甄别确认后Kill掉,如上截图所示,会话连接14正是挑起短路的源流SQL。有种规律就是以此线程的Time列值必定比被封堵的线程要高。这几个就能过滤很多记录。

能够查阅show
processlist中Time值十分大的线程。然后甄别确认后Kill掉,如上截图所示,会话连接14就是挑起短路的源头SQL。有种规律正是以此线程的Time列值必定比被卡住的线程要高。那几个就能过滤很多笔录。

 

 

对此lock
table read引起的此外线程处于Waiting for table flush状态的情景:

对于lock
table read引起的此外线程处于Waiting for table flush状态的气象:

 

 

对于实验中动用lock
table read那种气象,那种对话恐怕处于Sleep状态,而且它也不会冒出在show
engine innodb status \G命令的输出音信中。 即便show open tables where
in_use
>=1;能找到是那张表被lock住了,不过不能稳定到具体的线程(连接),其实那些是3个讨厌的题材。不过inntop这款利器就能够一定到,如下所示,线程17锁住了表test,在innotop里面就能定点到是线程17。所谓工欲善其事必先利其器!

对此实验中使用lock
table read那种情状,那种对话大概处于Sleep状态,而且它也不会见世在show
engine innodb status \G命令的输出音信中。 尽管show open tables where
in_use
>=1;能找到是那张表被lock住了,可是力不从心稳定到具体的线程(连接),其实这么些是三个讨厌的题材。不过inntop那款利器就足以一定到,如下所示,线程17锁住了表test,在innotop里面就能一定到是线程17。所谓工欲善其事必先利其器!

 

 

图片 11

图片 12

 

 

图片 13

图片 14

 

 

 

 

 

 

别的,在法定文档中ALTERAV4TABLE, RENAME
TABLE, REPAIRAV4TABLE, ANALYZE
TABLE, or OPTIMIZE
TABLE都能引起那类等待,下边也做了一些简单易行测试,如下所示:

别的,在合法文书档案中ALTE陆风X8TABLE, RENAME
TABLE, REPAI奥迪Q5TABLE, ANALYZE
TABLE, or OPTIMIZE
TABLE都能引起那类等待,下边也做了部分粗略测试,如下所示:

 

 

 

 

 

 

Waiting
for table flush的其它三个光景

Waiting
for table flush的此外2个地方

 

 

对话连接(connection
id=18)执行上面SQL语句,模拟2个慢查询SQL

对话连接(connection
id=18)执行下边SQL语句,模拟3个慢查询SQL

 

 

mysql> select connection_id();

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

| connection_id() |

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

|              18 |

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

1 row in set (0.00 sec)

 

mysql> select name, sleep(64) from test;
mysql> select connection_id();

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

| connection_id() |

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

|              18 |

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

1 row in set (0.00 sec)

 

mysql> select name, sleep(64) from test;

 

 

对话连接(connection
id=6)执行下边SQL语句,分析表test

对话连接(connection
id=6)执行上边SQL语句,分析表test

 

 

mysql> select connection_id();

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

| connection_id() |

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

|               6 |

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

1 row in set (0.00 sec)

mysql> analyze table test;

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

| Table     | Op      | Msg_type | Msg_text |

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

| MyDB.test | analyze | status   | OK       |

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

1 row in set (0.04 sec)

 

mysql> 
mysql> select connection_id();

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

| connection_id() |

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

|               6 |

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

1 row in set (0.00 sec)

mysql> analyze table test;

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

| Table     | Op      | Msg_type | Msg_text |

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

| MyDB.test | analyze | status   | OK       |

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

1 row in set (0.04 sec)

 

mysql> 

 

 

对话连接(connection
id=8)执行上边SQL语句

对话连接(connection
id=8)执行下边SQL语句

 

 

mysql> select connection_id();

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

| connection_id() |

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

|               8 |

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

1 row in set (0.00 sec)

 

mysql> select * from test;
mysql> select connection_id();

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

| connection_id() |

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

|               8 |

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

1 row in set (0.00 sec)

 

mysql> select * from test;

 

 

查阅线程的情形,你会发觉被打断的对话处于
Waiting for table flush状态。 因为当对表做了ANALYZE
TABLE后,后台针对该表的询问须要等待,因为MySQL已经检查和测试到该表内部变化,须要使用FLUSH
TABLE关闭然后再一次打开该表,所以当您询问该表时,就会处于 Waiting for
table flush

翻开线程的气象,你会发现被卡住的对话处于
Waiting for table flush状态。 因为当对表做了ANALYZE
TABLE后,后台针对该表的询问需求等待,因为MySQL已经济检察测到该表内部变化,必要动用FLUSH
TABLE关闭然后重新打开该表,所以当您询问该表时,就会处于 Waiting for
table flush

 

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info                             |

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

|  6 | root | localhost | MyDB | Sleep   |   22 |                         | NULL                             |

|  8 | root | localhost | MyDB | Query   |   14 | Waiting for table flush | select * from test               |

| 15 | root | localhost | NULL | Sleep   |    3 |                         | NULL                             |

| 16 | root | localhost | NULL | Query   |    0 | init                    | show processlist                 |

| 18 | root | localhost | MyDB | Query   |   46 | User sleep              | select name, sleep(64) from test |

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

5 rows in set (0.00 sec)

 

mysql> 
mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                   | Info                             |

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

|  6 | root | localhost | MyDB | Sleep   |   22 |                         | NULL                             |

|  8 | root | localhost | MyDB | Query   |   14 | Waiting for table flush | select * from test               |

| 15 | root | localhost | NULL | Sleep   |    3 |                         | NULL                             |

| 16 | root | localhost | NULL | Query   |    0 | init                    | show processlist                 |

| 18 | root | localhost | MyDB | Query   |   46 | User sleep              | select name, sleep(64) from test |

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

5 rows in set (0.00 sec)

 

mysql> 

 

 

图片 15

图片 16

 

 

 

 

 

 

Waiting
for table metadata lock

Waiting
for table metadata lock

 

 

 

 

对话连接(connection
id=17)执行上边SQL语句,模拟贰个慢查询SQL

对话连接(connection
id=17)执行上面SQL语句,模拟1个慢查询SQL

 

 

 

 

mysql> select connection_id();

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

| connection_id() |

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

|              17 |

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

1 row in set (0.00 sec)

 

mysql> select name, sleep(100) from test;
mysql> select connection_id();

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

| connection_id() |

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

|              17 |

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

1 row in set (0.00 sec)

 

mysql> select name, sleep(100) from test;

 

 

 

 

对话连接(connection
id=6)执行上边SQL语句, 修改表结构操作

对话连接(connection
id=6)执行上面SQL语句, 修改表结构操作

 

 

mysql> select connection_id();

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

| connection_id() |

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

|               6 |

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

1 row in set (0.00 sec)

 

mysql> alter table test add tname varchar(10); // rename table test to kkk 同样会引起Waiting for table metadata lock
mysql> select connection_id();

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

| connection_id() |

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

|               6 |

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

1 row in set (0.00 sec)

 

mysql> alter table test add tname varchar(10); // rename table test to kkk 同样会引起Waiting for table metadata lock

 

 

 

 

对话连接(connection
id=8)执行上面SQL语句,查询表test

对话连接(connection
id=8)执行上边SQL语句,查询表test

 

 

mysql> select connection_id();

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

| connection_id() |

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

|               8 |

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

1 row in set (0.00 sec)

 

mysql> select * from test;
mysql> select connection_id();

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

| connection_id() |

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

|               8 |

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

1 row in set (0.00 sec)

 

mysql> select * from test;

 

 

 

 

翻开线程的动静,你会意识被卡住的对话处于
Waiting for table metadata lock状态。

翻开线程的意况,你会意识被封堵的对话处于
Waiting for table metadata lock状态。

 

 

 

 

mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                           | Info                                   |

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

|  6 | root | localhost | MyDB | Query   |   19 | Waiting for table metadata lock | alter table test add tname varchar(10) |

|  8 | root | localhost | MyDB | Query   |    6 | Waiting for table metadata lock | select * from test                     |

| 15 | root | localhost | NULL | Sleep   |    8 |                                 | NULL                                   |

| 16 | root | localhost | NULL | Query   |    0 | init                            | show processlist                       |

| 17 | root | localhost | MyDB | Query   |   55 | User sleep                      | select name, sleep(100) from test      |

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

5 rows in set (0.00 sec)

 

mysql> 
mysql> show processlist;

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

| Id | User | Host      | db   | Command | Time | State                           | Info                                   |

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

|  6 | root | localhost | MyDB | Query   |   19 | Waiting for table metadata lock | alter table test add tname varchar(10) |

|  8 | root | localhost | MyDB | Query   |    6 | Waiting for table metadata lock | select * from test                     |

| 15 | root | localhost | NULL | Sleep   |    8 |                                 | NULL                                   |

| 16 | root | localhost | NULL | Query   |    0 | init                            | show processlist                       |

| 17 | root | localhost | MyDB | Query   |   55 | User sleep                      | select name, sleep(100) from test      |

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

5 rows in set (0.00 sec)

 

mysql> 

 

 

图片 17

图片 18

 

 

 

 

 

 

 

 

参考资料:

参考资料:

 

 

https://www.percona.com/blog/2013/02/27/mysql-optimizer-analyze-table-and-waiting-for-table-flush/

https://www.percona.com/blog/2013/02/27/mysql-optimizer-analyze-table-and-waiting-for-table-flush/

http://www.cnblogs.com/jackhub/p/3841004.html

http://www.cnblogs.com/jackhub/p/3841004.html

http://myrock.github.io/2014/11/20/mysql-waiting-for-table-flush/

http://myrock.github.io/2014/11/20/mysql-waiting-for-table-flush/

http://mysql.taobao.org/monthly/2016/03/10/

http://mysql.taobao.org/monthly/2016/03/10/

相关文章