0%

写入优化

elasticsearch6.x写入优化

translog 调整

冲刷操作是将分段从内存移到磁盘,并清除事务日志

默认的配置是

1
2
3
4
5
6
7
8
9
10
11
12
13
"index":{
"translog": {
"generation_threshold_size": "64mb",
"flush_threshold_size": "512mb",
"sync_interval": "5s", // 每隔5s将translog写到磁盘
"retention": {
"size": "512mb",
"age": "12h"
},
"durability": "REQUEST"
}
}

也就是说每个请求都会进行flush,这样保证了数据不会丢失,但是写入性能会很差,可以设置为异步,持久化策略为周期性和一定大小的时候flush

1
2
3
4
5
6
"index": {
"translog": {
"sync_interval": "60s",
"durability": "async"
}
}

这样就调整为60s(sync_interval)刷新一次或者当超过512m(flush_threshold_size)进行刷新

使用批量写入

使用bulk进行批量操作

增加segments的刷新时间

segment作为最小的检索单元,需要将多个segment检索到的数据进行排序合并,调整refresh_interval参数,该时间为文档被索引到数据搜索可见时间间隔,如果对于实时性不那么高的话,可以适当调高,增加该值可以使得更大的部分flush并减少未来的合并压力

刷新之后搜索才能命中新索引的数据

1
index.refresh_interval: 30s

欢迎关注我的其它发布渠道