+-
mysql – 什么会导致TRUNCATE TABLE花费很长时间?
我正在使用Master / Slave复制运行 MySQL5.5(1个主服务器,2个从服务器).

我有一个每周运行一次并截断特定表的进程.该表不大,只有几千条记录.

由于某种原因,TRUNCATE TABLE命令需要很长时间才能执行(在主服务器和从服务器上).执行大约需要400K ms!当它在从站上运行时,会导致它从主站延迟. TRUNCATE TABLE完成后,一切都恢复正常.

我知道其中一个从服务器在执行TRUNCATE TABLE时没有收到任何读取,因为它是一个专用从服务器,并且从该服务器读取的进程已关闭.此外,在此从属设备上,执行时间相同.

这是表结构:http://pastebin.com/qEQB4juR

关于如何加速TRUNCATE TABLE的任何想法?

最佳答案
在InnoDB表上使用TRUNCATE TABLE需要一个完整的表锁,因为 TRUNCATE TABLE is DDL (Data Definition Language)不是DML(数据操作).

从user_engagements执行DELETE;将无济于事,因为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;

这应该快速复制,除了最后一个语句.

试试看 !!!

如果您有MySQL 5.1.16,则TRUNCATE TABLE需要DROP权限.我的回答执行TRUNCATE TABLE现在做的事情.

如果你有MySQL 5.1.15并返回,你需要DELETE特权,我的答案涵盖了.

点击查看更多相关文章

转载注明原文:mysql – 什么会导致TRUNCATE TABLE花费很长时间? - 乐贴网