Оптимізація Sphinx

Table of Content

Буває так, що RT index в Sphinx починає працювати повільніше звичайного пошуку MySQL, це значить, що прийшов час оптимізувати індекси.

На офіційному сайті написано, що найбільше на оптимізацію впливає rt_mem_limit, дана опція за замовчуванням має 128M для одного індекса але цього дуже мало.
Ідеального значення немає, все залежть від конкретної ситуації і доступних ресурсів. Але все ж рекомендують починати з 1024М, а оптимальним може бути 2048М.
Sphinx не резервує виділену па’ять і використовує лише дійсно потрібний об’єм, якщо індекс займає 3М, відповідно дане місце буде зайнято у оперативній пам’яті.
Розмір вказаний у rt_mem_limit більше можна сприймати, як максимальна доступна пам’ять для індекса яку Sphinx може використовувати.
До виділення ресурсів потрібно підходити з розумом, припустимо, що у мажємо 7 різних індексів і на які ми виділил по 1024М, відповідно у пікове навантаження може бути використано 7Gb пам’яті. Це потрібно враховувати виділяючи місце на інші ресурси.

Перезапускаємо Sphinx

# searchd -- stop
# searchd

Після цьго потрібно ще оптимізувати індекси командою OPTIMIZE.
З часом індекси можуть фрагментуються у багато дискових кусків (chunks), що може призвести до значних затримок у пошуку.
Щоб цього уникнути потрібно переіодично запускати наступну команду, по черзі для кожного індекса:

# mysql -h 127.0.0.1 -P 9311
mysql> OPTIMIZE INDEX rt;
Query OK, 0 rows affected (0.00 sec)

Leave a Reply

Your email address will not be published. Required fields are marked *