Back to mnoGoSearch site

К вопросу производительности mnoGoSearch

Производительность MySQL

Пользователи MySQL могут задать опцию DELAY_KEY_WRITE=1 для таблиц mnoGoSearch. Это позволит быстрее обновлять индексы, т.к.они не будут записываться на диск пока файл не будет закрыт. DELAY_KEY_WRITE целиком исключает обновление индексов на диске.

С этой опцией индексы хранятся только в памяти и записываются на диск в последнюю очередь, по команду FLUSH TABLES или по завершению mysqld. Запись одновлённых индексов на диск может занимать минуты и нетерпеливые пользователи могут прибить сервер командой kill -9 и этим разрушить индексные файлы. Другим неудобством является необходимость запуска myisamchk для этих таблиц перед стартом mysqld для проверки, на случай, если mysqld был убит до этого.

По этим причинам мы не включили эту опцию в структуру наших таблиц по умолчанию. Т.к. вся информация в индексах может быть восстановлена из данных, находящихся в таблицах, вы не потеряете данные, используя опцию DELAY_KEY_WRITE. Но используйте её на свой страх и риск.

Оптимизация после индексирования

Этот раздел был добавлен Randy Winch

У меня есть мысля о производителности, которая может заинтересовать некоторых из вас. Я использую RH 6.2 с обновлением ядра 2.2.14-6.1.1 (поддерживает файлы свыше 2 гигабайт) и mysql 2.23.18-alpha. Я проиндексировал весь наш сайт используя mnoGoSearch 3.0.18:


          mnoGoSearch statistics

    Status    Expired      Total
   -----------------------------
       200     821178    2052579 OK
       301        797      29891 Moved Permanently
       302          3          3 Moved Temporarily
       304          0          7 Not Modified
       400          0         99 Bad Request
       403          0          7 Forbidden
       404      30690     100115 Not found
       500          0          1 Internal Server Error
       503          0          1 Service Unavailable
   -----------------------------
     Total     852668    2182703

Я оптимизировал данные, выгрузив их в файл используя SELECT * INTO OUTFILE, отсортировал их при помощи системной процедуры сортировки по полю word (CRC) и затем загрузил их обратно в базу данных, используя процедуру, описанную в mysql online manual.

Производительность великолепна. Мой любимый тест - поиск "John Smith". Оптимизированная база показала результат в 13 секунд. База до оптимизации показывала примерно 73 секунды.


Search results: john : 620241 smith : 177096
Displaying documents 1-20 of total 128656 found

Вы можете скачать скрипт optimize.sh с нашего сервера. Он написан Joe Frost и реализует идею Randy.