批次大小对ES写入性能影响初探

news/2024/7/7 5:57:42 标签: 后端, elasticsearch, 压力测试

问题背景

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,可以说是完全没有差异了,极端值才会显著降低性能。


http://www.niftyadmin.cn/n/5402710.html

相关文章

PySide6实现word转化pdf

目录 一:实现思路 二:实现代码 三:完整代码和界面 一:实现思路 利用PySide6创建两个按钮和一个显示区域,一个选择文件按钮,一个转化按钮和信息展示,操作文件按钮选择一个待转化的word文档。并且展示文件路径到信息展示区,操作转化按钮,读取选择的文件转化为pdf。并…

使用协程库httpx并发请求

httpx和aiohttp都是比较常用的异步请求库,当然requests多线程或requestsgevent也是不错的选择。 一个使用httpx进行并发请求的脚本如下: import functools import sys import timeimport anyio import httpxasync def fetch(client, results, index) -…

链路负载均衡之ISP选路

一、默认路由与链路备份 如图,企业分别从电信、联通租用一条链路,组成双出口网络,其中,电信为主链路、联通为备用链路。 在防火墙可配置两条默认路由,其中电信出口的默认路由优先级高于联通出口的默认路由&#xff0c…

掌榕网融合通信产品:无代码开发,实现营销短信、客户咨询处理

{无代码开发,轻松连接电商平台} 在现今的快节奏电商行业中,掌榕网为企业带来了一种无需依赖传统编程技术即可实现电商平台的快速连接和集成的解决方案。通过使用掌榕网提供的融合通信服务,电商企业可以轻松地整合全球700运营商的通信资源&a…

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…

IEEE754标准的c语言阐述,以及几个浮点数常量

很多年前,调研过浮点数与整数之间的双射问题: win7 intel x64 cpu vs2013 c语言浮点数精度失真问题 最近重新学习了一下IEEE754标准,也许实际还有很多深刻问题没有被揭示。 计算机程序设计艺术,据说这本书中也有讨论。 参考&…

Linux学习笔记:进程的终止和等待

进程终止和等待 进程终止进程退出场景进程常见退出方式_exit()退出exit()退出return退出exit()与_exit()的不同之处 进程的等待什么是进程等待?为什么要进行进程等待如何进行等待wait方式:waitpid方式 进程终止 进程退出场景 一般来讲,进程的退出场景有三种: 代码运行完毕,…

c++相对路径与绝对路径

参考:https://blog.csdn.net/weixin_42175509/article/details/114360938 1、获取当前路径:用getcwd()函数,返回值是一个指向字符串的指针 2、相对路径用正斜杠“/” ./,表示当前路径;…/表示当前路径的上一级路径;…