MySQL データベースの 1 つの Sphinx インデックスを再構築中に問題が発生しました。インデックスのローテーションと再構築が繰り返し失敗し、システムは引き続き古いインデックスを使用します。データベースのサイズはこの数か月で 2 倍になり、現在では 1,000 万行を超えるテーブルが含まれています。Sphinx インデックスの再構築中
indexer --config our_config.conf --rotate --all
(ここで使用されている UltraSphinx プラグインによって生成されます)、Sphinx デーモン ログ ファイル searchd.log に次のエラーが表示されます。
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
データベースが大きくなるにつれて、エラー メッセージが頻繁に発生するようになりました。現在、完全なインデックス作成には約 1 時間半かかり、インデックス ファイルを合わせると 1 GB を超えます。この問題を解決するために 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 ファイル システムでは、最大 16 GB のファイルを使用できますが、特定のライブラリでは、実際にはファイル サイズが 2 GB に制限されている場合があります (こちらとこちらを参照)。