web-dev-qa-db-ja.com

スフィンクス検索メモリ使用量の理解と改善

私の会社には、SphinxSearchの実行専用のサーバーがいくつかあります。すべてが約48GBのメモリを搭載したCentOS5であり、検索されたバージョンは1.11です。最近、Sphinxが通常のインデックスに使用可能なメモリをほとんど使用しない理由を理解しようとしています(現時点ではRTインデックスは使用していません)。 によるとSphinxの公式ウェブサイト 、. spdファイルと.sppファイルを除くインデックスに関連するすべてのファイルはRAMに保存されます。現在、これはすべてのインデックスで約14GGを構成し、RAMに簡単に収まります。メモリ使用量のhtopは、1.5GB弱が使用されていることを示しています!興味深いことに、vm.swappinessが0に設定されていても、スワップも使用されていると報告されます。検索を停止すると、スワップは0になります。(使用されるスワップの量は、使用されているメモリの量を超えないことに注意してください。)起動時にすべてのインデックスが事前に開かれるように構成されています(sphinxconfでpreopen_indexes = 1)。

上記の情報を踏まえて、2つの質問があります。

  1. Sphinxがそれらのインデックスのデータをメモリに保持していない場合、それらのデータをどのように処理しますか?
  2. Sphinxにさらに多くのデータをメモリに保持させることは可能ですか?
1
altendo

mlock = 1を試して、すべてのインデックスのインデックスを再作成します。

index index1
{
    source      = main1
    path        = /ssd/sphinx/index.main
    charset_type    = utf-8
    docinfo     = extern
    mlock       = 1
}
1
jim

Sphinxがデータをメモリに保持していない場合、それらのインデックスのデータをどのように処理しますか?

それはおそらくそれらをメモリに入れます。しかし、ホストOSは、それらがあまり使用されていないことに気づき、それらを交換します。

スワップピネスが実際に適用されていることを確認することをお勧めします。

Sphinxにさらに多くのデータをメモリに保持させることは可能ですか?

余裕がある場合。インデックスをRAMディスクに配置します:)


また、本当に十分なメモリがある場合は、代わりにスワップを完全にオフにしてください。メモリが不足するとクラッシュするリスクがありますが、そのサーバーで発生するのは好ましくないようです。

0
barryhunter