問題背景
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表。
以上備忘。