Elasticsearch書き込みパフォーマンスの最適化
2951 ワード
パフォーマンステスト
bulk使用推奨事項
ディスクIOの最適化
セグメントの結合
セグメントマージは、コンピューティングリソースとディスクIOを消費する操作であり、特に比較的大きなセグメントマージが発生する.セグメントのマージ速度がインデックスの書き込み速度に遅れると、Elasticsearchは、スタックされたセグメント数の爆発を避けるために、単一スレッドのインデックスの書き込み速度を低下させ、INFOのlogに「now throttling indexing」と記録する
Elasticsearchのデフォルトは保守的で、検索の性能をバックグラウンドのセグメントマージに影響させたくない.デフォルトのセグメントマージレート制限は低く、デフォルトは20 MB/sであるが、SSDを使用している場合は、このパラメータを100-200 MB/sに設定することも考えられる.
PUT /_cluster/settings
{
"persistent" : {
"indices.store.throttle.max_bytes_per_sec" : "100mb"
}
}
クエリーのパフォーマンスに関心を持たずにbulkでデータをインポートする場合は、マージのしきい値を閉じることができます.
PUT /_cluster/settings
{
"transient" : {
"indices.store.throttle.type" : "none"
}
}
次に、データをインポートした後に「merge」に復元してこのしきい値設定を復元します.
機械的なハードディスク(HDD)の場合は、elasticsearchに次の構成を追加する必要があります.yml中
index.merge.scheduler.max_thread_count: 1
機械ハードディスク(HDD)の同時IOはパフォーマンスが悪く、インデックスごとにディスクに同時アクセスするスレッド数を減らす必要があります.この設定にはmax_があります.thread_count+2スレッド同時アクセスディスクSSDであればこのパラメータを無視でき、デフォルトスレッド数はMathである.min(3, Runtime.getRuntime().AVailableProcessors()/2)は、SSDには問題ありません.
indexを大きくすることができます.translog.flush_threshold_sizeパラメータは、デフォルトでは200 Mで、例えば1 GBに大きくすることができます.このパラメータを大きくすると、translogはflushの前により大きなセグメント(segment)を格納することができる.より大きなセグメントの作成はflushの頻度を減少させ、より大きなセグメントのマージが少ないほどディスクIOを減少させ、インデックス性能を向上させる.