当前位置:首页 > elasticsearch性能调优小建议
ElasticSearch性能测试调优
版本号:5.5.2
测试数据:同一天采集的数据保存在当天创建的索引下,所有索引的类型一致 测试数据量:5.08亿条
电脑硬件:1台,CPU 8核,内存32G
1. 大批量创建索引和数据
ES集群为单节点下的情况:
A. 在不采用批量创建数据的情况下:
创建数据量8640万,用时16h35m47s,写入速度约为2270条/S。
减少写入数据量,约87万,测试50次,写入平均速度约为2300~2500条/S。
B. 批量创建数据
采用bluk大批量写入数据
设置所需创建的内容,循环执行所需次数:
写入数据量约87万条,并发数量10,请求内容条数8000,测试100次,平均耗
时约为:190S,写入速率约为:4500条/S。
写入效率有了明显的提升,但是此时发生了异常,有约80%的测试发生ES请求链接断开的异常。当并发请求大于10时,所有请求都发生了该异常。该异常导致的问题是:最后断开请求的数量丢失,丢失数据量约为1万条。
当降低并发数量或者请求内容条数时,该问题得到解决。
写入数据量
并发数量 5 10 10 8 7 内容条数 3000 5000 8000 8000 8000 测试次数 50 50 100 50 50 平均耗时 240S 210S 190S 220S 230S 写入速率 3600条/S 4300条/S 4500条/S 4000条/S 3800条/S 状态 正常 正常 发生异常 发生异常 正常 87万 87万 87万 87万 87万 87万 87万 8122万
C. 调优
6 13 8 8000 5000 5000 50 50 5 235S 218S 3700条/S 4000条/S 正常 发生异常 正常 6h41m50s 3400条/S 虽然批量添加效率有了显著提升,但是如何再继续提升性能呢? 除了新增硬件和新增节点外,合理的配置线程池,可以有效的提升性能。
5.x版本的ES,已经将线程池中的index和bulk固定为CPU核心数+1;所以调整这两个指标的对列数,可以解决上面测试中因为线程池线程数量不足导致的请求断开的异常。
但是队列数也不建议无线增大,因为这个对内存有较大的压力。一下为测试后较合理的配置:
修改的文件是:elasticsearch目录下config文件夹的elasticsearch.yml文件
调优后,可以支持多线程同时启动bulk添加数据,而不会因为线程池的问题导致写入数据丢失问题,让磁盘的读写达到最大化,从而实现对大化的写入数据。
优化后,写入效率:4500条/S,测试可同时启动5个线程。因为个人电脑性能原因,没有继续测试。
D. 其他
新增数据节点:
将新增的数据节点设置为专门存储和查询数据的数据节点,这些节点能有效的提升写入和查询效率。 node.master: false node.data: true node.ingest:false
减少shard刷新间隔:
完成bulk插入后再修改为初始值
共分享92篇相关文档