2012-04-24 3 views
1

У нас возникла проблема при восстановлении индекса Sphinx для одной из наших баз данных MySQL. Поворот и перестройка индекса несколько раз повторяются, и система продолжает использовать старый индекс. За последние месяцы размер базы данных удвоился и теперь содержит таблицы с более чем 10 миллионами строк. Во время восстановления индекса Sphinx сОшибка восстановления индекса 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 часа, а файлы индекса вместе больше одного ГБ. Мы обновили версию Sphinx от 0.9.8.1 до 2.0.4 для решения этой проблемы, но она по-прежнему существует. Сервер имеет около 4 ГБ памяти, и файл конфигурации начинается с

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 ГБ, который является максимальным значением для подписанного 32-битного целого и максимального значения для размеров файлов в определенных файловых системах. Файловая система ext3, которую мы используем в наших системах Ubuntu/Debian, допускает до 16 ГБ для файлов, но некоторые библиотеки могут ограничить размер файла на практике до 2 ГБ (см. here и here).

ответ

1

Проверьте вывод самого индексатора - он показывает свой прогресс при индексировании и может дать ключ к вопросу.

+0

Да, проверка журналов и выходов всегда рекомендуется. Это говорит о том, что «собрал xxx docs, xxx MB», но завершает работу с ошибкой, упомянутой выше (нет такого файла или каталога, используя старый индекс, вращающийся индекс «x»: сообщение об ошибке preread). – 0x4a6f4672

+0

Достаточно места на диске, чтобы содержать файлы temportally. Как правило, в 1,3 раза больше индекса. – barryhunter

+0

df -h говорит, что около 9 ГБ является бесплатным. Но это может иметь какое-то отношение к пределу размера, см. Текст, который я добавил ниже вопроса. Возможно, что-то вроде 2GB/int32. – 0x4a6f4672

0

Пожалуйста, проверьте свои данные. Похоже, что Sphinx хочет создать файл индекса temp (это то, что делает индекс) на ~/etc/sphinx//sphinx_index_main.new.spi. Я вижу здесь две вещи: одна - не уверена, что это работает. Другая вещь - двойной /.

IIRC это часть индекса вашего конфигурационного файла Sphinx.

+0

Я использовал ~ только как аббревиатуру, реальный путь начинается с/home/username. Я тоже заметил double /, но я полагаю, что это не основная причина, потому что она работала до тех пор, пока база данных не увеличилась. – 0x4a6f4672

Смежные вопросы