Azure Data Explorer数据加载性能优化:100+GB文件导入过慢咨询
ADF向Azure Data Explorer(ADX)导入大容量数据的性能优化最佳实践
源端配置优化
- 尽量使用Parquet、ORC等列式存储格式作为源文件,避免CSV等行存格式,列式存储在ADF读取、列裁剪时效率提升3~10倍,相同数据量下文件体积更小
- 把大文件拆分为大小在100MB~1GB之间的分片文件,避免单文件过大导致的单线程读取瓶颈,ADF可以并发读取多个分片
- 源存储如果是Azure Blob/ADLS Gen2,确保和ADF集成运行时、ADX集群在同一Azure区域,避免跨区域带宽损耗
ADF复制活动配置优化
- 调整ADF复制活动的*数据集成单元(DIU)*配置,100GB以上负载推荐设置DIU为32~64,不要用默认的自动设置,更高的DIU可以提升ADF的读取、传输并行度
- 开启复制活动的并行拷贝功能,并行度设置为源分片文件数量的1/2~2/3,避免过高并发导致的源存储或ADX端限流
- 优先使用Azure集成运行时(IR),不要用自托管IR除非源端在私有网络中,自托管IR的带宽上限取决于部署机器的资源,容易成为瓶颈
ADX端接收配置优化
- 导入前临时提升ADX集群的ingestor节点数量,每100GB数据推荐至少2个ingestor节点,导入完成后可以再降回常规配置节省成本
- 在ADX的目标表上预先创建好ingestion映射,避免ADF复制时动态推断schema导致的额外开销,映射可以用如下命令提前创建:
.create table MyTable ingestion csv mapping "MyTable_CSV_Mapping" '[{"Column":"Col1","DataType":"string","Ordinal":0},{"Column":"Col2","DataType":"int","Ordinal":1}]'
- 导入期间关闭目标表的流式摄取、连续导出、物化视图等后台运行的作业,避免占用集群资源影响导入速度
- 临时调整ADX的摄取批处理策略,关闭默认等待时间,让ADX收到数据后立即处理:
.alter table MyTable policy ingestionbatching @'{"MaximumBatchingTimeSpan":"00:00:00", "MaximumNumberOfItems": 500, "MaximumRawDataSizeMB": 1024}'
注意导入完成后改回原有策略,避免小批量摄入导致的资源浪费
- 导入时不要开启ADX的摄取时间策略以外的自动索引,预先定义好需要的索引即可,避免导入过程中实时构建索引带来的额外开销
其他调优技巧
- 如果导入的源文件包含很多不需要的列,在ADF复制活动的映射阶段提前裁剪不需要的列,减少传输和处理的数据量
- 避免在ADF复制活动中添加额外的数据转换逻辑,所有转换尽量放到ADX侧做,或者提前用ADF数据流预处理完成,复制活动只做纯数据搬运
内容的提问来源于stack exchange,提问作者Shruti
相关产品推荐
相关产品推荐

