Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos
1,972

本文针对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

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

本文的测试案例所使用的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...>,请勿用于任何商业用途。