【Elasticsearch】`_refresh`和`_flush`的区别

在Elasticsearch中,`_refresh`和`_flush`操作虽然看似都与“刷新”有关,但它们的功能和作用范围有显著区别:

 

`_refresh`操作

- 目的:使索引操作(如新增、更新、删除文档)后的更改能够立即被搜索到。

- 工作原理:将内存缓冲区(in-memory buffer)中的数据写入到一个新的Lucene segment中,并将其加载到文件系统缓存(OS cache)中,此时文档可以被搜索到,但数据尚未写入磁盘。

- 触发方式:

  - 默认情况下,Elasticsearch每秒自动执行一次`_refresh`操作,但仅在最近30秒内有搜索请求的索引上执行。

  - 可以通过设置`index.refresh_interval`来调整刷新间隔,或者在索引操作时通过`?refresh=true`参数强制触发。

  - 当内存缓冲区达到一定大小(默认为节点堆内存的10%)时,也会触发`_refresh`。

- 特点:`_refresh`操作是同步的,会在操作完成前阻塞请求。

 

`_flush`操作

- 目的:将内存中的数据和事务日志(translog)中的操作永久写入磁盘,确保数据的持久性。

- 工作原理:

  - `_flush`操作会先执行`_refresh`,将内存缓冲区中的数据写入新的Lucene segment并加载到文件系统缓存中。

  - 然后,将这些segment从文件系统缓存强制刷入磁盘(通过`fsync`操作),并清空事务日志。

- 触发方式:

  - 默认情况下,Elasticsearch会在以下情况下自动触发`_flush`操作:

    - 每30分钟定时触发。

    - 当事务日志大小超过512MB时。

    - 在每次索引、批量、删除或更新操作完成后。

  - 也可以通过API手动触发`_flush`操作。

- 特点:`_flush`操作是异步的,不会阻塞请求。

 

主要区别

- 数据可见性:`_refresh`使数据在搜索中可见,而`_flush`主要用于数据的持久化,不影响数据的搜索可见性。

- 操作范围:`_refresh`操作主要涉及内存缓冲区和文件系统缓存,而`_flush`操作会将数据写入磁盘并清空事务日志。

- 性能影响:`_refresh`操作的开销相对较小,但频繁的`_refresh`可能会影响写入性能;`_flush`操作的开销较大,但可以通过调整参数优化性能。

 

总结来说,`_refresh`用于使新文档能够被搜索到,而`_flush`用于确保数据持久化到磁盘,两者在Elasticsearch的索引管理中各自扮演着重要的角色。

cpu_sys_in_millis cpu_user_in_millis merge_threads merge_queue merge_active merge_rejected merge_largest merge_completed bulk_threads bulk_queue bulk_active bulk_rejected bulk_largest bulk_completed warmer_threads warmer_queue warmer_active warmer_rejected warmer_largest warmer_completed get_largest get_completed get_threads get_queue get_active get_rejected index_threads index_queue index_active index_rejected index_largest index_completed suggest_threads suggest_queue suggest_active suggest_rejected suggest_largest suggest_completed fetch_shard_store_queue fetch_shard_store_active fetch_shard_store_rejected fetch_shard_store_largest fetch_shard_store_completed fetch_shard_store_threads management_threads management_queue management_active management_rejected management_largest management_completed percolate_queue percolate_active percolate_rejected percolate_largest percolate_completed percolate_threads listener_active listener_rejected listener_largest listener_completed listener_threads listener_queue search_rejected search_largest search_completed search_threads search_queue search_active fetch_shard_started_threads fetch_shard_started_queue fetch_shard_started_active fetch_shard_started_rejected fetch_shard_started_largest fetch_shard_started_completed refresh_rejected refresh_largest refresh_completed refresh_threads refresh_queue refresh_active optimize_threads optimize_queue optimize_active optimize_rejected optimize_largest optimize_completed snapshot_largest snapshot_completed snapshot_threads snapshot_queue snapshot_active snapshot_rejected generic_threads generic_queue generic_active generic_rejected generic_largest generic_completed flush_threads flush_queue flush_active flush_rejected flush_largest flush_completed server_open rx_count rx_size_in_bytes tx_count tx_size_in_bytes
06-02
这些指标是Elasticsearch集群监控指标,包括: - cpu_sys_in_millis:集群中所有节点的系统CPU使用时间,即内核态时间。 - cpu_user_in_millis:集群中所有节点的用户CPU使用时间,即用户态时间。 - merge_threads/merge_queue/merge_active/merge_rejected/merge_largest/merge_completed:用于合并段(segments)的线程池监控指标。 - bulk_threads/bulk_queue/bulk_active/bulk_rejected/bulk_largest/bulk_completed:用于批量操作的线程池监控指标。 - warmer_threads/warmer_queue/warmer_active/warmer_rejected/warmer_largest/warmer_completed:用于预热索引的线程池监控指标。 - get_largest/get_completed/get_threads/get_queue/get_active/get_rejected:用于处理get请求的线程池监控指标。 - index_threads/index_queue/index_active/index_rejected/index_largest/index_completed:用于处理index请求的线程池监控指标。 - suggest_threads/suggest_queue/suggest_active/suggest_rejected/suggest_largest/suggest_completed:用于处理suggest请求的线程池监控指标。 - fetch_shard_store_queue/fetch_shard_store_active/fetch_shard_store_rejected/fetch_shard_store_largest/fetch_shard_store_completed/fetch_shard_store_threads:用于获取分片数据的线程池监控指标。 - management_threads/management_queue/management_active/management_rejected/management_largest/management_completed:用于管理操作的线程池监控指标。 - percolate_queue/percolate_active/percolate_rejected/percolate_largest/percolate_completed/percolate_threads:用于处理percolate请求的线程池监控指标。 - listener_active/listener_rejected/listener_largest/listener_completed/listener_threads/listener_queue:用于处理请求的监听器监控指标。 - search_rejected/search_largest/search_completed/search_threads/search_queue/search_active:用于处理search请求的线程池监控指标。 - fetch_shard_started_threads/fetch_shard_started_queue/fetch_shard_started_active/fetch_shard_started_rejected/fetch_shard_started_largest/fetch_shard_started_completed:用于获取分片数据的线程池监控指标。 - refresh_rejected/refresh_largest/refresh_completed/refresh_threads/refresh_queue/refresh_active:用于刷新操作的线程池监控指标。 - optimize_threads/optimize_queue/optimize_active/optimize_rejected/optimize_largest/optimize_completed:用于优化操作的线程池监控指标。 - snapshot_largest/snapshot_completed/snapshot_threads/snapshot_queue/snapshot_active/snapshot_rejected:用于快照操作的线程池监控指标。 - generic_threads/generic_queue/generic_active/generic_rejected/generic_largest/generic_completed:用于处理通用请求的线程池监控指标。 - flush_threads/flush_queue/flush_active/flush_rejected/flush_largest/flush_completed:用于刷新操作的线程池监控指标。 - server_open:当前打开的HTTP连接数。 - rx_count/rx_size_in_bytes:接收的HTTP请求数数据量。 - tx_count/tx_size_in_bytes:发送的HTTP响应数数据量。 这些指标可以帮助我们监控Elasticsearch集群的运行状态性能,及时发现并解决潜在的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值