2012-04-24 88 views
1

重建我们的MySQL数据库之一的Sphinx索引时出现问题。循环重建索引失败,系统继续使用旧的索引。数据库的大小在过去几个月里翻了一番,现在它包含了超过1000万行的表。在与重建狮身人面像索引失败

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

(由这里使用的UltraSphinx插件生成)狮身人面像指数的重建,我们得到的狮身人面像守护程序日志文件以下错误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。我们更新了狮身人面像版本从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)。

回答

1

检查索引器本身的输出 - 它显示索引过程中的进度,并可能提供有关问题的线索。

+0

是的,检查日志和输出总是值得推荐的。它说有些像“收集xxx文档,xxx MB”,但退出与上述错误(没有这样的文件或目录;使用旧的索引;旋转索引'x':预报失败报告)。 – 0x4a6f4672 2012-04-25 10:38:54

+0

是否有足够的磁盘空间来容纳目标文件。通常需要1.3倍的指数大小。 – barryhunter 2012-04-25 10:53:03

+0

df -h表示约9 GB是免费的。但它可能与大小限制有关,请参阅我在问题下面添加的文本。也许某种2GB/int32限制。 – 0x4a6f4672 2012-04-25 10:54:57

0

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

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

+0

我使用〜仅作为缩写,真正的路径以/ home/username开头。我也注意到了double /,但我想这不是根本原因,因为它在数据库变大之前一直工作。 – 0x4a6f4672 2012-04-24 20:44:48