SAP HANA 数据文件导入优化技术
本文针对csv文件导入到HANA速度进行优化,以测试数据导入速度与那些因素相关,使用哪些方法能加快csv文件导入速度,以获取HANA的最快导入速度。
硬件因素
SAP HANA的极限导入速度是与硬件的配置相关的,无论我们在软件层面做多少工作,硬件的配置是影响导入速度极限的重要因素,本人总结以下几项硬件配置主要影响SAP HANA的导入极限速度。
- 硬盘类型
由于SAP HANA导入数据会实时地将事务log,delta 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区数据merge到main区,此过程不能进行数据的导入,因此需要在导入前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 |
|
导入操作的具体操作流程如下图所示。
本文的测试案例所使用的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…>,请勿用于任何商业用途。