MYSQL на 10 миллионов строк, 3 ГБ объема отвечает на запрос по 2-3 секунды

123 4
[Удален]
4377

Есть одна база MYSQL, более 10 миллионов строк, размер дампа 3 ГБ. Вертится на 6 ядерном XEON, 128 ГБ ОЗУ, массив RAID 6.

My.cnf оптимизирован по-максимуму. Mysqltuner отвечает что все ОК, ни одного замечания.

Но проблема в том, что база отвечает на любой запрос от 3 секунд и более.

Если работать в незакешированном месте, например будучи авторизованном в админке, то работать с такими тормозами невозможно. На некоторые сложные запросы (например страница с количеством постов на всем сайте) вообще отвечает 500 ошибкой.

По slow-query наиболее долго обрабатываются запросы COUNT(*), но их не оптимизируешь, т.к. они создаются CMS.

На простые запросы вроде SELECT с id поста ответ по 2-3 секунды.

Я серьезно не понимаю, почему она тормозит. Всякие хайлоуды же за доли секунды делают выборку из терабайтных баз.

Не понимаю почему если размер всех буферов и самого процесса в памяти в несколько раз превышает размер базы, что мешает мускулу всю базу поместить в ОЗУ и работать с ней, а на диск писать только изменения? В ОЗУ любой запрос независимо от сложности должен выполняться за доли секунды :idea:

iHead
На сайте с 25.04.2008
Offline
137
#1

Причин много. Возьмите проблемный запрос, включите профилирование в phpMyAdmin и посмотрите какие его этапы дольше всего выполняются. Если хочется базу в ОЗУ запихать, используйте InnoDB.

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#2

1. Перевести в innoDB и дать ей больше памяти т.е. 6 ГБ вполне можно выделить чисто под них.

2. Переехать на SSD

3. Проверить запросы и индексы в таблицах

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Оптимизайка
На сайте с 11.03.2012
Offline
396
#3
Zakazchik2017:
Всякие хайлоуды же за доли секунды делают выборку из терабайтных баз

Никакой "хайлоуд" не будет выполнять аггрегирующие функции, типа COUNT(*) в здравом уме

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
[Удален]
#4
Оптимизайка:
Никакой "хайлоуд" не будет выполнять аггрегирующие функции, типа COUNT(*) в здравом уме

Да не это тормозит… Этот запрос раз в день выполняется за 1000+ секунд и сбрасывает результат в кеш…

Тормозит вся база, ЛЮБОЙ простой запрос на выборку и я не могу понять в чем дело…

Базы в Innodb все давно и все кеши и буферы по-максимуму… Нагрузка на процессор, i/o не более 5% не понятно что им мешает ответить мгновенно или нагрузиться на 100%... Вначале грешил на Wordpress и кривые самописные модули с утечками памяти, но после бенчмарков выяснилось что проблема не в них а в самой базе...

S
На сайте с 23.05.2004
Offline
316
#5
Zakazchik2017:
Всякие хайлоуды же за доли секунды делают выборку из терабайтных баз.

Примеры выборок в студию. Если там LIMIT X,X - то запросто тормозить будет, так как в хайлоаде такое не используется.

Это просто подпись.
Оптимизайка
На сайте с 11.03.2012
Offline
396
#6
Zakazchik2017:
ЛЮБОЙ простой запрос на выборку

Вот прям любой? Даже select * from user where user = 'root' and host = 'localhost'?

я не могу понять в чем дело

см. explain

все кеши и буферы по-максимуму

Не факт, что это хорошо

edogs software
На сайте с 15.12.2005
Offline
775
#7
Zakazchik2017:
My.cnf оптимизирован по-максимуму. Mysqltuner отвечает что все ОК, ни одного замечания.

Возможно максимум превышен как раз. mysqltuner такого не заметит. Покажите my.cnf

В частности, если под кэш запросов выделено слишком много памяти, то мускул сойдет с ума пытаясь кэшировать и искать каждый запрос по каждому чиху. И так далее.

Zakazchik2017:
На простые запросы вроде SELECT с id поста ответ по 2-3 секунды.

Индексы-то не слетели?

Zakazchik2017:
Я серьезно не понимаю, почему она тормозит.

В phpmyadmin выполните самый простой запрос (select с id поста), потом поставьте галочку "профилирование" и покажите результат.

Zakazchik2017:
Не понимаю почему если размер всех буферов и самого процесса в памяти в несколько раз превышает размер базы, что мешает мускулу всю базу поместить в ОЗУ и работать с ней, а на диск писать только изменения? В ОЗУ любой запрос независимо от сложности должен выполняться за доли секунды ☝

Если операции записи частые и ключи при этом затрагиваются, попробуйте в my.cnf выставить delay_key_write=ALL , и добавьте тогда myisam_recover_options=BACKUP,FORCE заодно.

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

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
A
На сайте с 01.02.2015
Offline
36
#8
Zakazchik2017:
Нагрузка на процессор, i/o не более 5% не понятно что им мешает ответить мгновенно или нагрузиться на 100%...

Значения innodb_thread_concurrency, innodb_file_per_table и tmp_table_size в my.conf какие?

L
На сайте с 10.02.2015
Offline
221
#9

Отключите кеш :)

Jurgen s
На сайте с 21.05.2008
Offline
153
#10

explain проблемных запросов покажите

http://police-ua.com/ (http://police-ua.com/) Форум сотрудников МВД Украины
123 4

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