网站开发费用,网站编程学习,it运维网,天津做网站得公司问题背景
ES使用bulk写入时每批次的大小对性能有什么影响#xff1f;设置每批次多大为好#xff1f;
一般来说#xff0c;在Elasticsearch中#xff0c;使用bulk API进行批量写入时#xff0c;每批次的大小对性能有着显著的影响。具体来说#xff0c;当批量请求的大小增…问题背景
ES使用bulk写入时每批次的大小对性能有什么影响设置每批次多大为好
一般来说在Elasticsearch中使用bulk API进行批量写入时每批次的大小对性能有着显著的影响。具体来说当批量请求的大小增加时写入性能通常会提高因为减少了网络往返时间和磁盘I/O次数。然而如果批量请求过大会导致节点上的内存压力增大进而影响其他请求的性能甚至可能导致节点崩溃。
实测方案与结果
我在虚拟机环境实测了7种不同批次的大小从500到10000都有。
结果如下表 索引消耗的时间与批次大小数据图示 最慢的10000条每批吞吐量是18078/秒。最快是8000条每批吞吐量是18218/秒。
这图看着很唬人实际上设定不同的批次大小对写入性能的影响微乎其微图中所示的数据索引时间单位是毫秒。
表中程序运行时间单位是秒即便是观察程序运行总时间也都是几秒之差。因为波动太小因此不具有实际调优意义只能作为一个数据参考。
当然对于生产环境也可以通过实验来确定最佳的批量大小。可以从较小的批量开始例如5MB然后逐渐增加批量大小观察写入性能的变化。当性能开始下降时说明批量大小已经过大应该减小批量大小。通常一个好的起点是将每批次的数据量设置在5MB到15MB之间。
补充测试
那么将批次大小分别设置为10万和10呢取两个较为极端的值。
超大的10万级别运行了149秒变慢的趋势有所抬头很小10级别**运行了641秒明显变慢果然批次太小的确是浪费资源**不过一般也没有开发人员会设置成这个值。
批次大小设置为极小值10的时候数据反映了另外一个事实那就是批量写入比单条写入快了不止一倍
最终所有测试索引都有100万条数据数据存储空间大小也几乎一致 结论
经过计算上述7种单批次大小的100万数据吞吐量差异最大只有千分之7可以说是完全没有差异了极端值才会显著降低性能。