GreatSQL 并行Load Data加快数据导入
数据库信息
数据库版本:GreatSQL 8.0.32-25
Clickhouse表需要导入到 GreatSQL 中,表数据量庞大所以选用导出CSV的方式。
测试数据复现操作
load data
MySQL load data 语句能快速将一个文本文件的内容导入到对应的数据库表中(一般文本的一行对应表的一条记录)。
数据库应用程序开发中,涉及大批量数据需要插入时,使用 load data 语句的效率比一般的 insert 语句的高很多
可以看成select … into outfile
语句的反操作,select … into outfile
将数据库表中的数据导出保存到一个文件中。
load data 语法
GreatSQL开启load data并行的方法
方法一:设置session变量
连接数据库,执行set session gdb_parallel_load=on
如需调整文件块大小或线程数,执行 SET SESSION gdb_parallel_load_chunk_size=65536
或 SET SESSION gdb_parallel_load_workers=16
。
使用原load data语句执行导入。
方法二:load语句增加hint
- gdb_parallel_load 是否开启并行
- gdb_parallel_load_chunk_size 文件块大小
- gdb_parallel_load_workers 开启多少个线程同时导入
开启gdb_parallel_load=ON。默认配置是gdb_parallel_load_chunk_size=4194304,gdb_parallel_load_workers=6
测试数据创建
创建GreatSQL库对应库表结构
导出导入语句样例
不同情况下,是否开启并发耗时对比
未开启并发
单表数据量 | 表个数 | 总数据量 | 迁移CK表总大小 | 并行 | 用时(s) |
---|---|---|---|---|---|
一百万 | 1 | 一百万 | 46.52 MiB | off | 21 |
一千万 | 1 | 一千万 | 465.2 MiB | off | 188 |
一百万 | 10 | 一千万 | 465.2 MiB | off | 211 |
一百万 | 20 | 两千万 | 930.4MiB | off | 413 |
开启并发
单表数据量 | 表个数 | 总数据量 | 迁移CK表总大小 | 并行行程数 | 用时(s) |
---|---|---|---|---|---|
一百万 | 1 | 一百万 | 46.52 MiB | 16 | 10 |
一千万 | 1 | 一千万 | 465.2 MiB | 16 | 120 |
一百万 | 10 | 一千万 | 465.2 MiB | 16 | 97 |
一百万 | 20 | 两千万 | 930.4MiB | 16 | 180 |
结论
从测试结果看,开启16并行线程,可以加快导入速度30%~50%,导入数据量越大,表数量越多,或者的优化效益越高。
提示:开启并发请注意服务器资源的使用。
Enjoy GreatSQL 😃
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。