私の会社には、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つの質問があります。
mlock = 1を試して、すべてのインデックスのインデックスを再作成します。
index index1
{
source = main1
path = /ssd/sphinx/index.main
charset_type = utf-8
docinfo = extern
mlock = 1
}
Sphinxがデータをメモリに保持していない場合、それらのインデックスのデータをどのように処理しますか?
それはおそらくそれらをメモリに入れます。しかし、ホストOSは、それらがあまり使用されていないことに気づき、それらを交換します。
スワップピネスが実際に適用されていることを確認することをお勧めします。
Sphinxにさらに多くのデータをメモリに保持させることは可能ですか?
余裕がある場合。インデックスをRAMディスクに配置します:)
また、本当に十分なメモリがある場合は、代わりにスワップを完全にオフにしてください。メモリが不足するとクラッシュするリスクがありますが、そのサーバーで発生するのは好ましくないようです。