У нас возникла проблема при восстановлении индекса 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).
Да, проверка журналов и выходов всегда рекомендуется. Это говорит о том, что «собрал xxx docs, xxx MB», но завершает работу с ошибкой, упомянутой выше (нет такого файла или каталога, используя старый индекс, вращающийся индекс «x»: сообщение об ошибке preread). – 0x4a6f4672
Достаточно места на диске, чтобы содержать файлы temportally. Как правило, в 1,3 раза больше индекса. – barryhunter
df -h говорит, что около 9 ГБ является бесплатным. Но это может иметь какое-то отношение к пределу размера, см. Текст, который я добавил ниже вопроса. Возможно, что-то вроде 2GB/int32. – 0x4a6f4672