Пытаюсь загнать БД MySql в оперативку серва

12 3
iOweYouNothing
На сайте с 08.01.2011
Offline
198
3295

Доброго времени суток.

На выделенном сервере работает 6 высоконагруженных сайтов.

Размер баз данных - 2.4гига

Оговорюсь сразу: сайты в плане запросов к БД работают отлично, стандартные запросы отрабатывают моментально.

На сайтах постоянно выполняется сложный SELECT запрос (фактически, поиск словосочетания по всей базе - упростить его, к сожалению, не представляется возможным).

Как результат - ооооочень медленный запрос (1-2 сек.) вместо привычных 0,1-0,2сек.

Задался целью - решил загнать все базы данных в оперативу сервера (квад-коре, 8гиг оперативы, Дебиан, 500гиг винт).

Нагуглил мануал http://forum.lafox.net/index.php?showtopic=19002

Сделал всё как положено/написано.

Результат - как было, так и осталось :( БД тупят по прежнему - т.е., нет разницы, работает ли мускуль с диска или с оперативы (tmpfs).

Господа, подскажите, какими методами можно ускорить работу mysql-сервера? (кеши и прочая чепуха отстроены нормально).

P.S. варианты типа "сменить сервер" не рассматриваются.

N
На сайте с 06.05.2007
Offline
419
#1

535i, переведи данные в innodb, подними лимиты innodb и само все загонится. Для более быстрого прогрева можно запустить какой-нибудь читающий все строки запрос.

Это принципиально лучше, чем tmpfs, так как исключает межпроцессный обмен данными. Все уже находится внутри innodb pool. К сожалению, может потребоваться больше памяти чем при использовании myisam.

Остальные варианты сложны и непрактичны.

Но раз уж tmpfs не помог, то и этот способ точно не улучшит скорость на порядки.

Кнопка вызова админа ()
banshee(oleg)
На сайте с 12.08.2007
Offline
140
#2

Я так понимаю, речь идет о текстовом поиске по базе (типа LIKE)? Может, имеет смысл сделать таблицу с хешами лемматизированного текста и искать, соответственно, по ним хеш с леммы запроса, не?

iamliss
На сайте с 23.12.2006
Offline
96
#3

Использовать для поиска сфинкс и всё будет летать

Вообще могу подсказать людей, которые платно сделают тебе счастье, оптимизируют параметры, базу, запросы и тп

за мир во всём мире
9
На сайте с 18.08.2007
Offline
72
#4

для вас подойдет sphinx

не надо танцев с бубном, сразу все проблемы проподут

ps:

вместо привычных 0,1-0,2сек.

по моим критериям это не мало... а скорее даже много, не очень но много

iOweYouNothing
На сайте с 08.01.2011
Offline
198
#5

ткните носом в примеры прикручивания сфинкса к двигу дле

N
На сайте с 06.05.2007
Offline
419
#6

Вообще-то, в dle и так уже есть полнотекстовый поиск. И он не сильно медленнее чем sphinx в масштабах обычного сайта. По крайней мере ускоряет поиск по сайту.

Вы кнопочки-то в админке тыкали?

iOweYouNothing
На сайте с 08.01.2011
Offline
198
#7

netwind, и не только кнопочки :)

Попытаюсь немного пролить свет: стандартный поиск в ДЛЕ по ооочень большой базе. Работает крайне медленно по сравнению с остальной частью сайта. Вот и ищется решение.

535i добавил 20.01.2011 в 23:46

Дополню:

ДЛЕ при стандартном поиске использует конструкцию

SELECT **** WHERE dle_post.approve AND (short_story LIKE '%фраза%' OR full_story LIKE '%фраза%' OR title LIKE '%фраза%') ***

в мануалах к мускулю сказано, что "В команде величина LIKE начинается с шаблонного символа..." (т.е., знак процента "%") и как результат "команды SELECT не будут использовать индексы" :( :( (а они то есть, только тупо не используются из-за особенности мускуля).

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

даже если кешировать результаты поиска в кеше мускуля - этого на долго не хватает (любой INSERT вычищает кеш).

в общем, ищется РЕШЕНИЕ.

N
На сайте с 06.05.2007
Offline
419
#8

535i, так стандартный DLE с использованием LIKE или полнотекстовый с использованием MATCH .. AGAINST ? там можно задать два типа в админке. Запросы покажите, я скажу какой именно используется у вас.

А то sphinx - дело хлопотное. И полнотекстовый поиск в mysql не настолько плох, как о нем думают.

iOweYouNothing
На сайте с 08.01.2011
Offline
198
#9

netwind,

SELECT COUNT(*) AS count FROM dle_post WHERE dle_post.approve AND (short_story LIKE '%пиранья%' OR full_story LIKE '%пиранья%' OR title LIKE '%пиранья%')
SELECT id, autor, dle_post.date AS newsdate, dle_post.date AS date, short_story AS story, dle_post.xfields AS xfields, title, descr, keywords, category, alt_name, comm_num AS comm_in_news, allow_comm, rating, news_read, flag, editdate, editor, reason, view_edit, tags, '' AS output_comms FROM dle_post WHERE dle_post.approve AND (short_story LIKE '%пиранья%' OR full_story LIKE '%пиранья%' OR title LIKE '%пиранья%') ORDER BY date desc LIMIT 0,20

этот

N
На сайте с 06.05.2007
Offline
419
#10

535i, LIKE видите? Это обычный поиск. Он перебирает и сравнивает все записи.

Жмите кнопочки в админке, переключайте тип поиска. Должна быть поменьше нагрузка.

Не могу точно сказать за DLE, возможно, он продолжит формировать подобные запросы с LIKE, но уже не в поиске, а в других местах.

Если там встречаются часто используемые слова, то их можно внести в специальный список стоп-слов и переиндексировать с помощью REPAIR TABLE. Индекс станет меньше, а скорость поиска больше. Поиск по таким словам не выдаст ничего. Подробности в документации к утилите myisam_ftdump.

Совет с innodb пока отпадает. Sphinx действительно хорош, но с ним больше возни.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий