您的位置首页百科快答

es之flush,refresh,translog,merge,forcemerge

es之flush,refresh,translog,merge,forcemerge

的有关信息介绍如下:

es之flush,refresh,translog,merge,forcemerge

POST //_flush

GET //_flush

POST /_flush

GET /_flush

清洗一个或多个索引。

清洗索引是确保当前仅存储在transaction log中的所有数据也永久存储在Lucene索引中的过程。

1.重新启动时,ES将重新操作transaction log中所有数据到Lucene索引中,使其恢复到重新启动前的状态。

2.ES也会自动触发清洗。根绝translog的大小和清洗成本而定。

path-params(路径参数):index(可选)

query-params(查询参数):

allow_no_indices 默认为true。 是否允许索引不存在或关闭且不抛异常

expand_wildcards 默认为open。 控制通配符表达式可以扩展到的索引类型。

all/open(仅拓展到打开的索引)/closed(仅拓展到封闭的索引)/hidden(通配符拓展到隐藏的索引,必须与open或者closed联合使用)/none(不接受通配符表达式)

force 默认为true。 即使没有更改要提交到索引,请求也会强制进行清洗。

ignore_unavailable 默认为false。 响应中不包含缺少或闭合的索引。

wait_if_ongoing 默认为true。 清洗操作将阻塞,直到在运行另一个清洗操作时执行。

POST /_refresh

GET /_refresh

POST /_refresh

GET /_refresh

刷新一个或多个索引。

使用refresh API显式刷新一个或多个索引。一刷新,使因为可用于搜索上次刷新的索引执行的所有操作。

默认情况下,Elasticsearch会定期每秒刷新一次索引,但仅在最近30秒内已收到一个或多个搜索请求的索引上刷新。您可以使用index.refresh_interval设置更改此默认间隔。

刷新需要大量资源。为了确保良好的集群性能,我们建议等待Elasticsearch的定期刷新,而不是在可能的情况下执行显式刷新。

如果你的索引在工作流中,必须要刷新文档才能被检索,则建议使用indexAPI的?refresh=wait_for。此选项可确保索引操作在运行搜索之前等待定期刷新。

tips:创建文档并且等待直到可以查询:PUT /test/_doc/4?refresh=wait_for

path-params(路径参数):index(可选)

query-params(查询参数):

allow_no_indices 默认为true。 是否允许索引不存在或关闭且不抛异常

expand_wildcards 默认为open。 控制通配符表达式可以扩展到的索引类型。

all/open(仅拓展到打开的索引)/closed(仅拓展到封闭的索引)/hidden(通配符拓展到隐藏的索引,必须与open或者closed联合使用)/none(不接受通配符表达式)

ignore_unavailable 默认为false。 响应中不包含缺少或闭合的索引。

对Lucene的更改仅在Lucene提交期间才保留在磁盘上,这是一个相对昂贵的操作,因此无法在每次索引或删除操作之后执行。如果发生进程退出或硬件故障,Lucene将从一次提交之后到另一次提交之前发生的更改丢弃。

Lucene提交太昂贵而无法执行每个单独的更改,因此每个分片副本还将操作写入其transaction log(称为 translog)中。在崩溃的情况下,当分片恢复时,已被确认但尚未包括在上次Lucene提交中的近期操作将从translog中恢复。

Elasticsearch flush是执行Lucene提交并开始生成新的translog的过程。

刷新会在后台自动执行,以确保Translog不会变得太大,这会使恢复过程中的重放操作花费大量时间。手动执行刷新的功能也通过API公开,尽管很少需要这样做。

仅当Translog fsync ed和committed时,translog中的数据才会持久保存到磁盘。默认index.translog.durability为request,意味着translog成功地在每个副本上fsync和committed,并成功地报告给客户端。如果设置为async,则定期提交一个事务。

以下配置可以动态更新:

index.translog.sync_interval 默认5s,不能低于100ms

index.translog.durability 默认request。(default) fsync and commit after every request. async fsync and commit in the background every sync_interval

index.translog.flush_threshold_size 默认512M 为了防止flush时间过长,一旦达到最大大小,将进行刷新,从而成为新segment的提交点

translog-retention 7.4.0之后过期 建议使用软删除(soft-delete)

index.translog.retention.size 过期 默认512M

index.translog.retention.age 过期 默认12h

history_retention_settings 历史记录保留设置-软删除设置:

index.soft_deletes.enabled 默认为true 6.5.0之后默认开启

index.soft_deletes.retention_lease.period 默认值依旧是12h

A shard in Elasticsearch is a Lucene index, and a Lucene index is broken down into segments.

Segments are internal storage elements in the index where the index data is stored, and are immutable.

Smaller segments are periodically merged into larger segments to keep the index size at bay and to expunge deletes.

The merge process uses auto-throttling to balance the use of hardware resources between merging and other activities like search.

合并调度

合并调度程序(ConcurrentMergeScheduler)在需要时控制合并操作的执行。合并在单独的线程中运行,并且当达到最大线程数时,接下来的合并将等待。

合并调度程序支持以下动态设置:

index.merge.scheduler.max_thread_count

单个分片上可能一次合并的最大线程数。默认情况下Math.max(1,Math.min(4, Runtime.getRuntime().availableProcessors() / 2)) ,对于良好的固态磁盘(SSD)而言,效果很好。如果您的索引是在旋转盘片驱动器上,则将其减小到1。

POST //_forcemerge

POST /_forcemerge

path-params(路径参数):index(可选)

query-params(查询参数):

allow_no_indices 默认为true。 是否允许索引不存在或关闭且不抛异常

expand_wildcards 默认为open。 控制通配符表达式可以扩展到的索引类型。

all/open(仅拓展到打开的索引)/closed(仅拓展到封闭的索引)/hidden(通配符拓展到隐藏的索引,必须与open或者closed联合使用)/none(不接受通配符表达式)

flush 默认为true。 开启之后foremerge之后进行一次flush

ignore_unavailable 默认false。 忽略不可用索引。默认不忽略

max_num_segments 如果要完全合并整个索引,则建议设置为1。 默认检查是否需要合并,如果需要合并,则执行它

only_expunge_deletes 默认为false。 是否仅删除标记删除的文档。参数不覆盖index.merge.policy.expunge_deletes_allowed

例子:POST /logs-000001/_forcemerge?max_num_segments=1