mysql加载数据填充-加速?

eit6fx6z  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(239)

有时,我不得不为一个项目重新导入数据,从而将大约360万行读取到一个mysql表中(目前是innodb,但实际上我并不局限于这个引擎)加载数据填充…“已被证明是最快的解决方案,但它有一个折衷:-当导入没有密钥时,导入本身需要大约45秒,但密钥创建需要时间(已经运行了20分钟…)。-使用表上的键进行导入会使导入速度慢得多
表的3个字段上都有键,引用的是数字字段。有什么办法可以加速这一进程吗?
另一个问题是:当我终止启动缓慢查询的进程时,它会继续在数据库上运行。有没有办法在不重新启动mysqld的情况下终止查询?
非常感谢dba

0sgqnhkj

0sgqnhkj1#

如果您使用的是innodb和批量加载,这里有一些提示:
将你的csv文件按目标表的主键顺序排序:记住innodb使用集群主键,所以如果排序的话,加载速度会更快!
我使用的典型负荷数据:

truncate <table>;

set autocommit = 0;

load data infile <path> into table <table>...

commit;

可用于提高加载时间的其他优化:

set unique_checks = 0;
set foreign_key_checks = 0;
set sql_log_bin=0;

将csv文件分割成更小的块
我在批量装载期间观察到的典型导入统计:

3.5 - 6.5 million rows imported per min
210 - 400 million rows per hour
kcugc4gi

kcugc4gi2#

这篇博文已经有3年的历史了,但是它仍然是相关的,并且对于优化“加载数据填充”的性能有一些很好的建议:
http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/

eivnm1vs

eivnm1vs3#

innodb是个不错的引擎。然而,它高度依赖于被“调整”。有一点是,如果您的插入不是按主键递增的顺序进行的,那么innodb可能会比myisam花费更长的时间。这可以通过设置更高的innodb\u buffer\u pool\u大小来轻松克服。我的建议是在专用mysql机器上将其设置为总ram的60-70%。

相关问题