Skip to Content
Author's profile photo Former Member

SAP HANA 数据文件导入优化技术

本文针对csv文件导入到HANA速度进行优化,以测试数据导入速度与那些因素相关,使用哪些方法能加快csv文件导入速度,以获取HANA的最快导入速度。

硬件因素

SAP HANA的极限导入速度是与硬件的配置相关的,无论我们在软件层面做多少工作,硬件的配置是影响导入速度极限的重要因素,本人总结以下几项硬件配置主要影响SAP HANA的导入极限速度。

  • 硬盘类型

由于SAP HANA导入数据会实时地将事务logdelta log写到硬盘中,因此硬盘的读写速度尤为重要。推荐使用SSD作为Log区和Data区的硬盘,并且将需导入的csv文件放入SSD中,以达到最快读取速度。

  • CPU核数

SAP HANA支持利用多线程并行导入数据,因此CPU核数决定了导入数据的并行程度。核数越多,并行程度越好,导入速度越快。

  • 内存大小

SAP HANA是内存数据库,因此数据导入到数据库内存空间是最核心的内容,如果内存不够大,导入的数据会导致SAP HANA数据库内存不足,从而需要unload其他数据以腾出空间,降低导入效率。另一个原因是,在读取csv文件的过程中,csv文件会被读取到cache中,这会占用一部分内存。当cache占用过多内存的情况下,linux系统会自动释放cache以供SAP HANA使用,这个释放的过程也会影响到导入效率。因此通过实验,若想达到最大导入速度,本人推荐剩余的内存空间需达到导入文件所占磁盘2倍。

导入文件因素

针对导入文件有以下因素可影响导入速度。

  • 导入文件格式是否全部正确

如果csv文件包含不符合元组格式的数据,则此次batch的导入全部失败,从而导入数据不一致,会降低导入速度。例如csv中某些字段长度超过SAP HANA表定义的字段长度。(在导入文件包含中文时经常发生此类问题)

  • 导入文件大小

SAP HANA导入单个csv文件时,可利用多线程技术,并行导入此文件,但如果文件太小,就无法充分利用所有线程来并行导入文件。通过实验,每个csv文件大小超过(100M*线程数)则不会影响导入速度的提升。

  • 多进程导入文件

若包含多个csv文件进行导入,有两种方式:利用足够多的线程串行导入所有csv文件或者利用多个进程并行导入csv文件。经测试,第二种方式不会加快导入速度,反而当进程数多于3个时,导入速度降低。因此推荐采用足够多的线程串行导入所有csv文件。

SAP HANA内部因素

SAP HANA中,数据既存储在内存中也存储在硬盘中,同时也会记录在日志中,因此,达到最大导入速度,最重要的是数据到达SAP HANA内存中,因此需要舍弃一些影响导入速度的设置,以达到极限速度。

Partition

在导入前对大表进行partition有助于并行插入数据,可提高导入速度。经测试,线程数是partition数的整数倍时速度较快。方式为Hash partition,并且类型为数字类型效时率最高。举例:

alter table “table name” partition by hash(col1,col2) partitions 10;

Auto merge

对列存储而言,插入的数据会存储在目标表的Delta区,在导入过程中系统会自动的将Delta区数据mergemain区,此过程不能进行数据的导入,因此需要在导入前disable auto merge保证导入过程不会进行merge,从而提升导入效率。可在导入操作结束后统一进行merge。举例:

alter table “table name” disable automerge ;

Delta log

对列存储而言,导入过程中,SAP HANA需同步将Delta log写入到硬盘以保证重启系统后,Delta 区的数据可以恢复。此过程会影响导入效率,在导入数据之前,可通过Disable delta log的方式,以牺牲数据安全性的代价来提高导入效率,在导入结束,进行merge后,enable delta log即可恢复安全。(注:若关闭Delta log,在导入过程中发生系统崩溃,则已导入数的数据将会丢失,需重新导入。)举例:

alter table “table name” disable delta log ;

导入线程数

为了充分利用多核的并行优势,在导入数据时可以指定线程数。经实验,线程数=CPU核数时,CPU使用量可超过90%。举例:

import from csv file ‘csv path’ into  “table name” with threads [CPU cores]

Batch数量

SAP HANA导入数据是分批导入的,因此每批次导入数据的条数会影响导入效率,经实验,每次导入100000导入效率最高。举例:

import from csv file ‘csv path’ into  “table name” with threads [CPU cores] batch 100000

总结

根据两款不同的硬件配置,得出最大导入速度不同,具体如下。

硬件配置

导入速度

CPU: 16 cores

Memory: 256GB

硬盘:SSD

100M/s

CPU: 80 cores

Memory: 1TB

硬盘: SSD

  1. 308.8M/s

导入操作的具体操作流程如下图所示。

/wp-content/uploads/2014/04/1_427691.jpg本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00。想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!转载本文章请注明作者和出处<http://scn.sap.com/community/chinese/hana/blog/2014/04/08/sap-hana-%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A…>,请勿用于任何商业用途。

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.