暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A 导入最佳实践

墨天轮 2019-10-12
1856

导入最佳实践

使用GDS导入数据

  • 数据倾斜会造成查询表性能下降。对于记录数超过千万条的表,建议在执行全量数据导入前,先导入部分数据,以进行数据倾斜检查和调整分布列,避免导入大量数据后发现数据倾斜,调整成本高。详细请参见查看数据倾斜状态。
  • 为了优化导入速度,建议拆分文件,使用多GDS进行并行导入。另外,单个导入任务可以拆分成多个导入任务并发执行导入,多个导入任务使用同一GDS时可以使用-t参数打开GDS多线程并发执行导入。GDS建议挂载在不同物理盘以及不同网卡上,避免物理IO以及网络可能出现的瓶颈。
  • 在GDS IO与网卡未达到物理瓶颈前,可以考虑在GaussDB 200开启SMP进行加速。SMP开启之后会对对应的GDS产生成倍的压力。需要特别说明的是:SMP自适应衡量的标准是GaussDB 200的CPU压力,而不是GDS所承受的压力。有关SMP的更多信息请参见SMP使用建议。
  • GDS与GaussDB 200通信要求物理网络畅通,并且尽量使用万兆网。千兆网无法承载高速的数据传输压力,极易出现断连。即使用千兆网时GaussDB 200无法提供通信保障。满足万兆网的同时,数据磁盘组I/O性能大于GDS单核处理能力上限(约400MB/s)时,方可寻求单文件导入速率最大化。
  • 并发导入场景,与单表导入相似,至少应保证I/O性能大于网络最大速率。
  • 数据服务器上,建议一个Raid只布1~2个GDS。
  • GDS跟DN的数据比例建议在1:3至1:6之间。
  • 为了优化列存分区表的批量插入效率,在批量插入过程中会对数据进行缓存后再批量写盘。通过GUC参数“partition_mem_batch”和“partition_max_cache_size”,可以设置缓存个数以及缓存区大小。这两个参数的值越小,列存分区表的批量插入越慢。当然,越大的缓存个数和缓存分区,会带来越多的内存消耗。

使用INSERT多行插入

如果不能使用COPY命令,而您需要进行SQL插入,可以根据情况使用多行插入。如果一次只添加一行或几行,则数据压缩效率低下。

多行插入是通过批量进行一系列插入而提高性能。下面的示例使用一条INSERT语句向一个三列表插入三行。这仍属于少量插入,只是用来说明多行插入的语法。创建表的步骤请参考创建和管理表。

向表customer_t1中插入多行数据:

1
2
3
4
INSERT INTO customer_t1 VALUES 
(6885, 'maps', 'Joes'),
(4321, 'tpcds', 'Lily'),
(9527, 'world', 'James');

有关更多详情和示例,请参阅INSERT 。

使用COPY命令导入数据

COPY命令从本地或其它数据库的多个数据源并行导入数据。COPY导入大量数据的效率要比INSERT语句高很多,而且存储数据也更有效率。

有关如何使用COPY命令的更多信息,请参阅使用COPY FROM STDIN导入数据。

使用gsql元命令导入数据

\copy命令在任何psql客户端登录数据库成功后可以执行导入数据。与COPY命令相比较,\copy命令不是读取或写入指定文件的服务器,而是直接读取或写入文件。

这个操作不如SQL COPY命令有效,因为所有的数据必须通过客户端/服务器的连接来传递。对于大量的数据来说SQL命令可能会更好。

有关如何使用\copy命令的更多信息,请参阅使用gsql元命令导入数据。

说明:

\COPY只适合小批量,格式良好的数据导入,容错能力较差。导入数据应优先选择GDS或COPY。


查看更多:华为GaussDB 200 最佳实践
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论