0、导读
在slave上,发现SQL thread长时间处于Opening tables状态
1、问题描述
朋友的数据库,做了主从replication复制。在slave实例上,SQL thread的长时间处于Opening tables状态,复制进程异常。
mysql> show processlist;
+—-+————-+———-+——+———+——-+—————————————-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+————-+———-+——+———+——-+—————————————-+——————+
| 1 | system user | | NULL | Connect | 554 | Queueing master event to the relay log | NULL |
| 2 | system user | | NULL | Connect | 59212 | Opening tables
| NULL |
整个实例大概20个database,总共300G左右。
master是5.5版本,slave是5.6版本,master上执行xtrabackup全库备份后搭建的slave。
2、原因分析
我的第一反应是table cache是不是太小了,导致open table比较慢,所以才长时间处于这个状态。无论如何,先一层层排查吧。
先看下slave status(部分无用信息我隐掉了):
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Log_File: master-bin.000618
Read_Master_Log_Pos: 614915856
Relay_Log_File: replicate.000008
Relay_Log_Pos: 2384117
Relay_Master_Log_File: master-bin.000617