Ran*_*Ran 9 mysql replication truncate mysql-5.5
我正在运行带有主/从复制(1 个主,2 个从)的 MySQL5.5。
我有一个每周运行一次并截断特定表的进程。表不大,只有几千条记录。
出于某种原因,该TRUNCATE TABLE
命令需要很长时间才能执行(在主机和从机上)。执行大约需要 400K 毫秒!!当它在从站上运行时,会导致它滞后于主站。在后TRUNCATE TABLE
结束,一切恢复正常。
我知道其中一个从站在执行时没有收到任何读取,TRUNCATE TABLE
因为它是一个专用的从站,并且从该从站读取的进程已关闭。此外,在此从属设备上,执行所需的时间相同。
这是表结构:http : //pastebin.com/qEQB4juR
关于如何加速 TRUNCATE TABLE 的任何想法?
使用TRUNCATE TABLE
上一个InnoDB表需要全表锁,因为TRUNCATE TABLE是DDL(数据定义语言)不DML(数据操作)。
这样做DELETE FROM user_engagements;
无济于事,因为 MVCC 信息被写入 ibdata1 中的撤消日志,这可能会阻止表被清空。如果有任何未提交的事务保留在 上user_engagements
,那也可能会阻止TRUNCATE TABLE
。
您可以重命名表,使其立即可用
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE user_engagements_new LIKE user_engagements;
ALTER TABLE user_engagements RENAME user_engagements_zap;
ALTER TABLE user_engagements_new RENAME user_engagements;
DROP TABLE user_engagements_zap;
SET FOREIGN_KEY_CHECKS = 1;
Run Code Online (Sandbox Code Playgroud)
除了最后一条语句外,这应该会快速复制。
试一试 !!!
如果你有 MySQL 5.1.16+,TRUNCATE TABLE
需要DROP权限。我的回答执行TRUNCATE TABLE
现在所做的。
如果您有 MySQL 5.1.15 及以后版本,则需要DELETE权限,我的回答涵盖了该权限。
归档时间: |
|
查看次数: |
25363 次 |
最近记录: |