вторник, 5 февраля 2013 г.

Sphinx - threads VS prefork

   Сегодня завершил перенос Sphinx на отдельный сервер. Сравнивал производительность при использовании разных типов распаралеливания: threads VS prefork. Если коротко - prefork сосет и очень сильно. Возможно у меня руки не от туда растут - но при равных конфигах в режиме threads sphinx работает намного быстрее - я бы сказал на порядок. 
    Из минусов - threads воркеры постоянно падают - но так как watchlog включен по умолчанию - пока вы не заглянете в лог вы об этом можете и не узнать вообще - пока не заглянете в лог. Мне пришлось туда заглянуть после того как sphinx неожиданно упал. Как потом оказалось - один из крашей воркеров привел к перезапуску сфинкса, во время которого он не смог прочитать все причитающиеся бинлоги и счел за лучшее - тупо умереть.  При чем если прочитать логи то sphinx успешно читал потерянный бинлог файл  за 15 минут до этого. Такое впечатление что sphinx умер во время слияния бинлог файлов, так что файл бинлога был удален с диска - но в мета информация так и не была обновлена, в результате при перезапуске сфинкс пытался прочитать удаленный файл бинлога и умирал.
    В качестве временного решения отрубил запись бинлогов вообще - благо объем записи в RT индекс у меня не большой, и rt_flush_period + полная переиндексация раз в сутки меня пока вполне устраивает.