问题背景
master版本: 5.6.23-72.1-log Percona版本的
slave 版本: 5.7.19-17-log Percona Server
slave是通过 innobackupex 工具导出与恢复的。
配置后执行过mysql_upgrade升级数据,并重启。
某表tb1 有partition属性如: PARTITION BY KEY (target_id) PARTITIONS 32; 数据量21亿条,硬盘中tb1.idb文件大小为37G, 带partition前共计32个文件。
问题表现
slave sql_thread 每次执行过程此表时,都会有大量的时间处于system lock;
> show slave status;
会看到Exec_Master_Log_Pos 一直不变。
> SHOW OPEN TABLES WHERE in_use != 0;
会看过程 tb1 一直在被system lock占着。
skip_external_locking是ON状态,无用,还是会阻塞锁。
mysql> show variables like '%skip_external_locking%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| skip_external_locking | ON |
+-----------------------+-------+
1 row in set (0.01 sec)
最后解决方法—无办法中的办法,删除分区
尝试过使用以下指定重建分区,均无效。
> ALTER TABLE tb1 CHECK PARTITION ALL;
> ALTER TABLE tb1 OPTIMIZE PARTITION ALL;
最后只能drop 掉 分区:
mysql> alter table tb1 REMOVE PARTITIONING;
Query OK, 218174563 rows affected (1 hour 15 min 30.80 sec)
Records: 218174563 Duplicates: 0 Warnings: 0
drop后正常。怀疑是mysql的bug,此问题基本100%重现。
我司业务中是qing_card表。
以上备忘。