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参照)。
はい、ログと出力を確認することをお勧めします。 "xxx docs、xxx MB"のようなものですが、上記のエラー(そのようなファイルやディレクトリはありません;古いインデックスを使用しています;回転インデックス 'x':preread failureが報告されています)で終了します。 – 0x4a6f4672
テンポラリファイルを格納するのに十分なディスク容量がありますか?通常、インデックスのサイズの1.3倍が必要です。 – barryhunter
df -hには約9 GBの空き容量があります。しかし、それはサイズの制限と関係があるかもしれません、私が質問の下に追加したテキストを見てください。おそらく2GB/int32のようなものがあります。 – 0x4a6f4672