2014-01-30 41 views
0

避免InnoDB事务开销在表副本中我宁愿创建一个新表,将数据复制到它,然后移动以使用它。当InnoDB的这样,我总是有一个很难执行:使用INSERT ... SELECT

INSERT INTO new_huge_tbl (SELECT * FROM old_huge_tbl) 

由于交易性质的,如果在任何时候,我需要停止该操作,回滚是不容易的,至少可以这样说。有没有什么办法可以在InnoDB中执行这个操作,而不是一个事务?

回答

0

不,不可能以简单的方式避免事务开销。您可能有两种选择:

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

在内部,当进行表拷贝时, InnoDB确实做到了这一点,将副本分配到许多较小的事务中。