手动刷新refresh

发布时间 2023-06-19 11:32:41作者: 做时间的好朋友

refresh

1.es数据写入的流程

image
对于任何数据库的写入来讲fsync刷盘虽然保证的数据的安全但是如果每次操作都必须fsync一次,那fsync操作将是一个巨大的操作代价,在衡量对数据安全与操作代价下,ES引入了一个较轻量的操作refresh操作来避免频繁的fsync操作。

2.什么是refresh

写入document时,首先被写入内存缓存(in-memory index buffer),默认每间隔1秒将内存缓存中的文档生成一个segument(段),并清空in-memory index buffer,segument变为可读状态。但是未提交

segument会先写入文件系统缓存,保证segument文件可以被正常打开和读取,后续再进行刷盘操作

es并不是文档写入后马上就可以搜索到的,而是一个近乎实时的搜索(默认1s后)
文档写入后,处于searchable状态,仍然是未提交状态
image

每1秒生成一个新的segument(段)的过程就叫做refresh

3.手动执行refresh

-- 全局索引
POST /_refresh

-- refresh指定索引
POST /blogs/_refresh

4.设置refresh的时间间隔

PUT /my_logs
{
	"settings":{
		"refresh_interval":"30s" // 设置每30s进行一次refresh
	}
}

5.refresh特点

refresh资源消耗相对小,避免每次fsync导致资源上的瓶颈
refresh后的segument可以被打开,实现近实时搜索