重建Sphinx索引失败

时间:2012-04-24 16:21:51

标签: mysql ruby-on-rails full-text-search sphinx

我们在为一个MySQL数据库重建Sphinx索引时遇到了问题。重复旋转和重建索引失败,系统继续使用旧索引。数据库大小在过去几个月中翻了一番,现在包含超过1000万行的表。在用

重建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/2小时,并且索引文件一起大于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(请参阅herehere)。

2 个答案:

答案 0 :(得分:1)

检查索引器本身的输出 - 它显示索引期间的进度,并可能提供问题的线索。

答案 1 :(得分:0)

请检查您的数据位置。 看起来Sphinx希望在~/etc/sphinx//sphinx_index_main.new.spi创建一个临时索引文件(这就是索引器所做的)。 我在这里看到两件事,一件是〜,不确定这是否有效。 另一件事是双/

IIRC这是你的Sphinx配置文件的索引部分。