Skip to content

Elasticsearch调优

image-20230628180805414

写入性能优化

业务优化

在业务上,最常见的优化手段就是变单条写入为批量写入。而es本身支持批量插入,就是bulk操作

常用优化方式是:数据接入时,先不写库,而是直接推送到消息队列中(参考rabbitmq)。然后监听该队列,批

量拿消息。一次拿1000条,最后将这1000条数据批量写入es。实测结果1000条批量写入耗时和单条写入耗时相差不大。

除了按数量批量写入外,还可以按照时间。比如每秒写入一次,有多少数量就写入多少。其实这种方法应该更合

理,像mysql底层数据和日志落盘的策略,其中就有每秒落盘一次的策略。

底层优化

除了业务优化外,还有就是从底层优化。而底层优化,最常见的就是刷盘策略。因为我们都知道,正在的耗时就是磁盘IO。优化参数,如下:

参数优化后值含义
index.refresh_interval10s缓存刷新时间,即10s后数据才能被搜索
index.translog.durabilityasync异步
index.translog.flush_threshold_size1024mbtranslog大小达到多大时落盘
index.translog.sync_interval30stranslog每隔多久落盘

其中,效果最明显的就是index.translog.durability。它表示的是日志持久化策略,默认情况下是同步策

略,即写一条数据要等日志落盘后才返回。这种效率慢,但能保证数据安全性。

将index.translog.durability改为async后,就是异步策略。数据写入缓存后,里面返回,不会等待日志是否落盘

成功。这种效率很快,但数据安全性差。document模型设计避免复杂的关联查询,大表设计这样。

References