带PARTITION 的表,在slave中会system lock

来源:互联网 发布:淘宝云客服门户 编辑:程序博客网 时间:2024/05/17 12:24

问题背景

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表。
以上备忘。

阅读全文
0 0
原创粉丝点击