Elasticsearch書き込みパフォーマンスの最適化

2951 ワード

パフォーマンステスト

  • は1つのノードの1つのスライスで、コピーを設定せず、性能
  • をテストする.
  • 性能データは、試験の基準線
  • として完全デフォルト設定に記録する.
  • 性能テストが30分以上継続することを確保し、長時間の性能を確認する.短時間のテストではsegment合併やGCに遭遇しない可能性があり、これらの要因の影響は確認できません.
  • デフォルトの基準線に基づいてパラメータを変更するたびに、パフォーマンスが向上した場合は設定を保持し、この設定に基づいて後続のテスト
  • を行います.

    bulk使用推奨事項

  • 各要求サイズは5-15 MBで、徐々にテストを増大することを提案し、E s R e j e c t e dExecutionExceptionを受信すると、ノードのボトルネックに達したことを示し、同時またはアップグレードハードウェア増加ノード
  • を減少する必要がある.
  • データを書き込むとき、bulk要求時にすべてのノードにポーリングしてアクセスすることを確認し、すべての要求を1つのノードに送信しないでください.このノードは、すべての要求のデータをメモリに格納して
  • を処理します.

    ディスクIOの最適化

  • SSD
  • を使用
  • RAID 0を使用し、ミラーバックアップを使用せず、replicasでデータの正確性を保証し、ディスクIO
  • を増大する.
  • は複数のディスクを使用してElasticsearchにアクセスし、path.dataに
  • を追加
  • は、NFS/SMB/CIFSなどのリモートストレージを使用しない.遅延はパフォーマンスボトルネック
  • となる.

    セグメントの結合


    セグメントマージは、コンピューティングリソースとディスク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を減少させ、インデックス性能を向上させる.

    その他の最適化

  • リアルタイムで正確なクエリー結果を必要としない場合は、各インデックスのindexを使用することができる.refresh_intervalは30 sに設定、大量のデータをインポートする場合は、この値を-1に設定し、データインポートが完了したら
  • に設定することができます.
  • bulkで大量のデータをインポートする場合は、コピーせずにindexを設定することも考えられる.number_of_replicas: 0.レプリカが存在する場合、インポート・データはレプリカに同期する必要があります.また、レプリカも分析、インデックス、セグメントのマージを完了し、インポート・パフォーマンスに影響を与えます.レプリカを設定せずにデータをインポートし、レプリカをリカバリできます.
  • インポート文書に一意のIDがない場合、Elasticsearchによって自動的に生成する一意のID
  • を使用することができる.