【问题标题】:Rebuilding the Sphinx index fails重建 Sphinx 索引失败
【发布时间】:2012-04-24 16:21:50
【问题描述】:

我们在为我们的一个 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 以解决这个问题,但它仍然存在。服务器大约有4GB内存,配置文件以

开头
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)。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是的,检查日志和输出总是值得推荐的。它说类似于“收集的 xxx 文档,xxx MB”,但退出并出现上述错误(没有这样的文件或目录;使用旧索引;旋转索引“x”:报告预读失败)。
    • 是否有足够的磁盘空间来容纳临时文件。通常需要 1.3 倍的索引大小。
    • df -h 说大约 9 GB 是免费的。但这可能与大小限制有关,请参阅我在问题下方添加的文本。也许某种 2GB/int32 限制。
    • 好的,只有当我们使用插件的 rake 任务(rake ultrasphinx:index)时才会出现问题,它会生成索引器命令。如果我们直接执行 indexer 命令,那么它可以工作。因此,可能是插件导致了错误,虽然我不知道为什么。
    • 请告诉我们真正的问题是什么。
    【解决方案2】:

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

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

    【讨论】:

    • 我只使用了~作为缩写,真正的路径以/home/username开头。我也注意到了双 /,但我想这不是根本原因,因为它在数据库变大之前一直有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多