情况描述:
从库出现延迟,使用select * from information_schema.innodb_trx order by trx_started desc\G; 查看当前从库中的事务, 发现有一条1周前的事务未提交记录。
有waiting for table metadata lock 的等待事件,且session 中有一条表结构变更的ddl操作,也是处于waiting for table metadata lock。
主从有延迟。
处理过程:
1. 1周前的那条事务记录时间太长, 觉得有问题, kill 掉,waiting for table metadata lock 等待事件消失,主从延迟追平。
事情处理过后回顾,猜测,未验证:
从库如果有未提交的事务,如果主库中有对未提交事务中的表做ddl 的操作在备库会有waiting for table metadata lock 等事件,会导致主从延迟。 要么kill 未提交的事务,要么kill ddl 操作。
1月26日实验验证上面猜测:主库,创建表t1:
备库, 表t1:
备库4个线程:
备库开启事务:
主库对表t1加一个字段:
查看备库状态,在生产上一般会话会非常多,此处的12线程是从库的sql_thread ,处于waiting for table metadata lock:
备库延迟:
备库上查看未提交的transaction, 未提交的transaction 线程18,kill 掉线程18备库延迟恢复正常。
