強制マージ
許可されるフェーズ: ホット、ウォーム。
強制マージは、インデックスを指定された最大数のセグメントにマージします。
`````forcemerge`````アクションを`````hot`````フェーズで使用するには、`````rollover`````アクションが**必須**です。ロールオーバーアクションが設定されていない場合、ILMはポリシーを拒否します。
[](#ilm-forcemerge-performance)
**パフォーマンスの考慮事項**
強制マージはリソース集約型の操作です。一度に多くの強制マージがトリガーされると、クラスターに悪影響を及ぼす可能性があります。これは、強制マージアクションを含むILMポリシーを既存のインデックスに適用したときに発生する可能性があります。`````min_age`````基準を満たす場合、複数のフェーズを即座に通過できます。`````min_age`````を増やすか、`````index.lifecycle.origination_date`````を設定してインデックスの年齢の計算方法を変更することで、これを防ぐことができます。
強制マージタスクキューのバックログが発生した場合、インデックスが並行して強制マージできるように、強制マージスレッドプールのサイズを増やす必要があるかもしれません。これを行うには、`````thread_pool.force_merge.size````` [クラスター設定](/read/elasticsearch-8-15/4e47631e8b46ce38.md)を構成します。
これにより、カスケード効果のあるパフォーマンスへの影響が生じる可能性があります。クラスターのパフォーマンスを監視し、バックログを減らすためにスレッドプールのサイズを徐々に増やしてください。
強制マージは、インデックスの現在のフェーズ内のノードによって実行されます。`````hot`````フェーズでの強制マージは、より高速なノードを持つホットノードを使用しますが、取り込みにより多くの影響を与えます。`````warm`````フェーズでの強制マージは、ウォームノードを使用し、実行に時間がかかる可能性がありますが、`````hot`````層での取り込みには影響を与えません。
## オプション
- `````max_num_segments
- (必須、整数) マージするセグメントの数。インデックスを完全にマージするには、
1
に設定します。 index_codec
- (オプション、文字列) ドキュメントストアを圧縮するために使用されるコーデック。受け入れられる唯一の値は
best_compression
で、DEFLATEを使用して圧縮率を高めますが、保存されたフィールドのパフォーマンスは遅くなります。デフォルトのLZ4コーデックを使用するには、この引数を省略します。best_compression
を使用する場合、ILMは強制マージの前にインデックスをクローズし、その後再オープンします。クローズ中は、インデックスは読み取りまたは書き込み操作に利用できません。
例
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"forcemerge": {
"max_num_segments": 1
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
warm: {
actions: {
forcemerge: {
max_num_segments: 1
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
warm: {
actions: {
forcemerge: {
max_num_segments: 1,
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"forcemerge" : {
"max_num_segments": 1
}
}
}
}
}
}