2012-04-24 12 views
1

MySQLデータベースのSphinxインデックスを再構築する際に問題があります。索引の回転と再構築は繰り返し失敗し、システムは古い索引を引き続き使用します。データベースサイズは過去数か月で2倍になり、現在は1,000万行以上のテーブルが含まれています。 (ここで使用UltraSphinxプラグインによって生成された)Sphinxインデックスの再構築が失敗する

indexer --config our_config.conf --rotate --all 

とスフィンクスインデックスの再構築中、当社はスフィンクスのデーモンログファイルに次のエラーが

WARNING: rotating index 'main': preread failed: failed to open 
~/etc/sphinx//sphinx_index_main.new.spi: No such file or directory; 
using old index 
WARNING: rotating index 'main': preread failure reported 

エラーメッセージがで発生したsearchd.logますデータベースが大きくなるにつれて頻度が高くなりました。完全な索引作成には約1時間半かかり、索引ファイルは1GBを超えています。この問題を解決するために、Sphinxのバージョンを0.9.8.1から2.0.4に更新しましたが、まだ存在しています。サーバーには約4 GBのメモリがあり、構成ファイルは

から始まります
indexer { 
    mem_limit = 1024M 
} 

searchd { 
    read_timeout = 5 
    max_children = 300 
    log = ~/etc/sphinx/log/searchd.log 
    port = 3313 
    max_matches = 100000 
    query_log = ~/etc/sphinx/log/query.log 
    seamless_rotate = 1 
    pid_file = ~/etc/sphinx/log/searchd.pid 
    address = 127.0.0.1 
} 
.. 

どのように問題を解決できるか考えている人はいますか?私は、ある種のインデックスサイズの制限があると思われます。これは2 GBの制限と関係しています。特定のファイルシステムでは、符号付き32ビット整数の最大値とファイルサイズの最大値です。 Ubuntu/Debianシステムで使用するext3ファイルシステムでは、最大16GBのファイルを使用できますが、特定のライブラリでは実際にはファイルサイズが2GBに制限される場合があります(hereおよびhere参照)。

答えて

1

インデクサー自体の出力を確認します。インデックス作成中に進捗状況が表示され、問題のヒントが得られます。

+0

はい、ログと出力を確認することをお勧めします。 "xxx docs、xxx MB"のようなものですが、上記のエラー(そのようなファイルやディレクトリはありません;古いインデックスを使用しています;回転インデックス 'x':preread failureが報告されています)で終了します。 – 0x4a6f4672

+0

テンポラリファイルを格納するのに十分なディスク容量がありますか?通常、インデックスのサイズの1.3倍が必要です。 – barryhunter

+0

df -hには約9 GBの空き容量があります。しかし、それはサイズの制限と関係があるかもしれません、私が質問の下に追加したテキストを見てください。おそらく2GB/int32のようなものがあります。 – 0x4a6f4672

0

データの場所を確認してください。 Sphinxが~/etc/sphinx//sphinx_index_main.new.spiにテンポラリインデックスファイル(インデクサの機能)を作成したいと思うようです。 私はここに2つのものを見ています。 他はダブル/です。

IIRCこれはSphinx設定ファイルのインデックス部分にあります。

+0

私は〜を省略形として使用し、実際のパスは/ home/usernameで始まります。私もdoubleに気付きましたが、データベースが大きくなるまで働いたので根本的な原因ではないと思います。 – 0x4a6f4672