繁体   English   中英

使用INSERT…SELECT避免表复制中的InnoDB事务开销

[英]Avoiding InnoDB transaction overhead in table copy using INSERT … SELECT

我不想创建ALTER TABLE而是创建一个新表,将数据复制到该表中,然后再使用它。 在InnoDB中这样做时,我总是很难执行:

INSERT INTO new_huge_tbl (SELECT * FROM old_huge_tbl) 

由于事务的性质,至少在任何时候我都需要停止此操作时,回滚并不容易。 有什么方法可以在InnoDB中执行此操作而不将其作为事务吗?

不,不可能以简单的方式避免交易开销。 您可能有两个选择:

  1. 在您自己的应用程序中,使用许多较小的事务(例如每个事务有1万行)来小批量复制数据。
  2. 使用现有工具,该工具将使用相同策略为您执行复制。 我可以建议使用Percona工具包中的pt-archiver

在内部,例如为ALTER TABLE进行表复制时,InnoDB确实做到了这一点,将副本批量处理为许多较小的事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM