Mic*_*art 7 mysql innodb migration
我想在 2 个 InnoDB 表之间迁移数据。
目前我正在运行这个查询:
INSERT INTO table_a SELECT * FROM table_b;
Run Code Online (Sandbox Code Playgroud)
如果数据集增长,避免 CPU 过载的最佳方法是什么?
谢谢
由于您使用的是 InnoDB 我想建议以下内容:
如果执行 INSERT、UPDATE 和 DELETE,请像这样批量加载表:
CREATE TABLE table_new LIKE table_a;
INSERT INTO table_new SELECT * FROM table_b;
ALTER TABLE table_a RENAME table_old;
ALTER TABLE table_new RENAME table_a;
DROP TABLE table_old;
Run Code Online (Sandbox Code Playgroud)
如果除了 INSERT 和 SELECT 之外不执行任何操作,请将新条目加载到表中。table_a
假设和的主键table_b
是id
,按如下方式执行加载:
CREATE TABLE table_new LIKE table_a;
INSERT INTO table_new SELECT B.* FROM table_b B
LEFT JOIN table_a A USING (id) WHERE A.id IS NULL;
INSERT INTO table_a SELECT * FROM table_new;
DROP TABLE table_new;
Run Code Online (Sandbox Code Playgroud)
确保您使用的是 MySQL 5.5。如果您有 MySQL 5.1.38 或更高版本,则必须安装 InnoDB 插件。如果您有 MySQL 5.1.37 或更低版本,只需升级到 MySQL。
完成此操作后(或者如果您已经拥有 MySQL 5.5),您必须针对多个 CPU 调整 InnoDB。这里不是重新发明轮子,而是我过去关于如何以及为什么这样做的帖子:
May 26, 2011
:关于单线程与多线程数据库性能Sep 12, 2011
:可以让MySQL使用多个核心吗?Mar 16, 2012
:在 Debian 上使用多核进行单个 MySQL 查询Apr 26, 2012
:CPU 性能与数据库服务器相关吗?试一试 !!!
我可以建议其他东西,例如缓冲区、日志文件等等。我只解决了这两个问题。
归档时间: |
|
查看次数: |
4017 次 |
最近记录: |