MST

星途 面试题库

面试题:ElasticSearch索引设置对性能影响之高级难度题

当ElasticSearch集群面临高写入负载时,从索引的refresh_interval、index.translog等设置方面,分析如何调整以优化性能,并阐述调整的原理。
25.6万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. refresh_interval 设置调整及原理

  • 调整方法:适当增大 refresh_interval 的值。默认值是 1 秒,可根据业务需求,比如将其设置为 30 秒甚至 1 分钟。
  • 原理refresh_interval 控制着索引段(segment)刷新到磁盘的频率。刷新操作会使新写入的数据对搜索可见,但它是一个开销较大的操作,涉及到文件系统缓存的刷新等。增大该值意味着减少刷新频率,从而减少了因频繁刷新带来的 I/O 和 CPU 开销,在高写入负载下可以将更多资源用于写入操作,提高写入性能。不过,这也会导致数据从写入到可搜索的延迟增加。

2. index.translog 设置调整及原理

2.1 translog 刷写策略(index.translog.durabilityindex.translog.sync_interval

  • 调整方法
    • 对于 index.translog.durability,可将其从默认的 request 改为 asyncrequest 模式下,每次写入请求完成都会刷写 translog 到磁盘,确保数据不会丢失,但 I/O 开销大。async 模式下,按照 index.translog.sync_interval 设定的时间间隔异步刷写 translog。
    • 适当增大 index.translog.sync_interval 的值,默认是 5 秒。比如可增大到 10 秒或 30 秒 。
  • 原理:采用 async 模式并增大 sync_interval,减少了 translog 刷写磁盘的频率,降低了 I/O 操作次数。虽然这样在系统崩溃时可能会丢失最多 sync_interval 时间段内的数据,但在高写入负载场景下,显著提升了写入性能。因为磁盘 I/O 往往是写入性能的瓶颈,减少不必要的 I/O 操作能使系统在高负载下更好地处理写入请求。

2.2 translog 保留策略(index.translog.retention.sizeindex.translog.retention.age

  • 调整方法:增大 index.translog.retention.sizeindex.translog.retention.age 的值。默认情况下,index.translog.retention.size 为 512mb,index.translog.retention.age 为 12 小时。可以根据实际情况,比如将 index.translog.retention.size 增大到 1GB,index.translog.retention.age 增大到 24 小时。
  • 原理:较大的保留大小和时间,意味着在更长时间或更大空间内,translog 不会被删除。这在高写入负载时,能减少 translog 滚动(rollover)和清理操作的频率,从而减少相关的 I/O 和系统资源开销,提升写入性能。同时,较长的保留时间也有助于在发生故障时进行数据恢复。