记录elasticsearch 磁盘io过高的排查
GET index/settings |grep refresh_interval查看索引设置的刷新策略的间隔当数据添加到索引后并不能马上被查询到,等到索引刷新后才会被查询到。 refresh_interval 配置的刷新间隔。refresh_interval 的默认值是 1s。GET index/settings |grep flush_threshold默认设置为:每 30 分钟主动进行一次
GET index/settings |grep refresh_interval
查看索引设置的刷新策略的间隔
当数据添加到索引后并不能马上被查询到,等到索引刷新后才会被查询到。
refresh_interval
配置的刷新间隔。refresh_interval 的默认值是 1s。
GET index/settings |grep flush_threshold
默认设置为:每 30 分钟主动进行一次 flush,或者当 translog 文件大小大于 512MB 时主动触发flush。
这两个行为,可以分别通过
index.translog.flush_threshold_period 每隔多长时间执行一次flush(默认30m)
index.translog.flush_threshold_size 当事务日志大小到达此预设值,则执行flush。(默认512mb)
index.translog.flush_threshold_ops 当事务日志累积到多少条数据后flush一次
GET index/settings | indices.store.throttle.max_bytes_per_sec
ES 会不断在后台运行任务,主动将这些零散的 segment 做数据归并,尽量让索引内只保有少量的,每个都比较大的,segment 文件。这个过程是有独立的线程来进行的,并不影响新 segment 的产生。
当归并完成,较大的这个 segment 刷到磁盘后,commit 文件做出相应变更,删除之前几个小 segment,改成新的大 segment。等检索请求都从小 segment 转到大 segment 上以后,删除没用的小 segment。这时候,索引里 segment 数量就下降了
segment 归并的过程,需要先读取 segment,归并计算,再写一遍 segment,最后还要保证刷到磁盘。可以说,这是一个非常消耗磁盘 IO 和 CPU 的任务。所以,ES 提供了对归并线程的限速机制,确保这个任务不会过分影响到其他任务。
默认情况下,归并线程的限速配置 indices.store.throttle.max_bytes_per_sec 是 20MB。对于写入量较大,磁盘转速较高,甚至使用 SSD 盘的服务器来说,这个限速是明显过低的。对于 ELK Stack 应用,建议可以适当调大到 100MB或者更高。
更多推荐
所有评论(0)