Что происходит, когда мой поисковый сервер Sphinx нагревается? - PullRequest
0 голосов
/ 13 марта 2012

У меня Sphinx Search работает на сервере Linux с 38 ГБ ОЗУ. Индекс sphinx содержит 35M полнотекстовых документов плюс метаданные, проиндексированные из таблицы MySQL. Когда я запускаю новый сервер, я запускаю скрипт, который «нагревает кэш сфинкса», отправляя через него мои 10 000 самых распространенных запросов. Первый раз для запуска сценария прогрева требуется около часа, но тот же сценарий завершается всего за несколько минут, если я запустил его снова.

Моя путаница возникает из-за того, что у Sphinx нет документированного кеширования, кроме файлового кеша, который я не использую. При запуске Sphinx индекс загружается в память, но каждый раз после выполнения прогрева системы отдельные запросы занимают одинаковое время.

При запуске моих сценариев наступает явный период прогрева. Что здесь происходит? Кеширование Linux - это то, что помогает Sphinx работать быстрее? Соответствует ли основной системный кеш запросы MySQL (я считаю, что Sphinx - это в основном пользовательский механизм хранения MySQL)? Как новые запросы, которые никогда не выполнялись, ускоряются тем, что происходит?

Я понимаю, что, вероятно, есть очень сложное объяснение этому, но даже небольшое направление должно помочь глубже вникнуть.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

(я считаю, что Sphinx - это в основном пользовательский механизм хранения MySQL) SphinxSE - это фальшивый механизм хранения. фальшивый, потому что он не хранит никаких данных, а скорее принимает запросы на данные из своей «таблицы», но на самом деле он просто передает их обратно в работающий экземпляр searchd в фоновом режиме.

Само searchd не имеет никакого кеширования - но, как уже упоминалось при считывании из индексации, ОС вполне может начать кеширование файлов - так что не нужно возвращаться обратно на диск.

Если вы используете SphinxSE - тогда запросы могут кэшироваться обычным кэшем запросов mysql - поэтому целые наборы результатов кэшируются. Но в зависимости, обычный способ использования SphinxSE - это объединить результаты поиска с исходным набором данных, чтобы вы оба вернулись в приложение за один раз. Таким образом, ваши запросы также зависят от реальных таблиц данных mysql. И они будут подвергаться тому же кешированию ОС - поскольку mysql читает данные, они будут кешироваться.

Когда я запускаю новый сервер

что говорит о том, что вы используете виртуальную машину? В этом случае виртуальный диск может быть расположен в удаленной сети SAN. (или EBS на Amazon ec2)

  • , что означает, что загрузка большого индекса сфинкса по этому маршруту может быть медленной.

В зависимости от того, где размещена ваша виртуальная машина, может быть возможность получить некоторые специальные высокопроизводительные диски - в идеале локальные по отношению к хосту - возможно, даже SSD - которые вполне могут помочь.


В любом случае, чтобы отследить проблему, более вероятно, что вы почти наверняка должны включить журнал запросов sphinx. Посмотрите на это, чтобы увидеть, если запросы выполняются там медленно. Существует также возможность запуска поиска для searchd, где вы можете включить iostats. Это запишет дополнительную информацию в журнал запросов о статистике io по мере выполнения запросов. Это может дать вам дополнительную информацию.

0 голосов
/ 13 марта 2012

Sphinx не кеширует ваши запросы, а файловая система. Так что да, запросы во второй раз выполняются быстрее, чем в первый раз.

...