面试题答案
一键面试1. refresh_interval 设置调整及原理
- 调整方法:适当增大
refresh_interval
的值。默认值是 1 秒,可根据业务需求,比如将其设置为 30 秒甚至 1 分钟。 - 原理:
refresh_interval
控制着索引段(segment)刷新到磁盘的频率。刷新操作会使新写入的数据对搜索可见,但它是一个开销较大的操作,涉及到文件系统缓存的刷新等。增大该值意味着减少刷新频率,从而减少了因频繁刷新带来的 I/O 和 CPU 开销,在高写入负载下可以将更多资源用于写入操作,提高写入性能。不过,这也会导致数据从写入到可搜索的延迟增加。
2. index.translog 设置调整及原理
2.1 translog 刷写策略(index.translog.durability
和 index.translog.sync_interval
)
- 调整方法:
- 对于
index.translog.durability
,可将其从默认的request
改为async
。request
模式下,每次写入请求完成都会刷写 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.size
和 index.translog.retention.age
)
- 调整方法:增大
index.translog.retention.size
和index.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 和系统资源开销,提升写入性能。同时,较长的保留时间也有助于在发生故障时进行数据恢复。