[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Медленные запросы MySQL
orbitdev
Здавствуйте, товарищи. Собственно ищу помощь в поиске слабого места в программе.

Проблема: случайные запросы к базе (MySQL) данных могут выполняться по 15-30 секунд. Запросы все оптимизированные, к примеру такая проблема в случайном порядке может возникать как с запросами с JOIN и сортировками, так и с таблицами из 10 записей, из которой выбираются данные по индексу.

Имеется: под БД и PHP выделены 2 сервера. Проект достаточно нагруженный, около 100к пользователей в сутки. Ресурсы сервера c БД свободны более, чем на 50%. Все таблицы имеют тип InnoDB и, по идее, блокировки таблиц быть не может.

Есть предположение, что скорее всего сервер с БД настроен некорректно для высокой нагрузки.

Просьба подсказать, где и как следует искать слабое место? Какие настройки могут помочь оптимизировать работу сервера?



Спустя 27 минут, 56 секунд (29.11.2011 - 01:10) Игорь_Vasinsky написал(а):
кешируй запросы
и если ты не на mysqli - то зря. у неё есть mysqli_multi_query()

Спустя 4 минуты, 1 секунда (29.11.2011 - 01:14) Nikitian написал(а):
Логируйте медленные запросы, причем не мускульным slow querys, а более чувствительными средствами. Например обертками пыха. Все, что налогируете, профилируйте. Не факт, что в логах именно медленные запросы, а не производные от них, когда один запрос подвешивает сервер бд, а остальные в очереди паровозиком идут в лог, поэтому и надо использовать средства чувствительнее 1 секунды, ибо секунда для мускульного запроса - это ооочень много.
Возможно, что проблема и не в запросах, а в соединении между серверами.

Спустя 9 часов, 46 минут, 43 секунды (29.11.2011 - 11:01) orbitdev написал(а):
Игорь_Vasinsky, вы имеете ввиду кеширование на стороне MySQL? Оно включено, но не дает видимого эффекта. mysqli_multi_query не вариант, поскольку требует переработки логики приложения, что на данном этапе не реализуемо.


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

Может будут еще какие-то мысли?

Спустя 29 минут, 56 секунд (29.11.2011 - 11:31) Nikitian написал(а):
проверьте наличие крон-заданий и из пересечение со временем тормозов. Может репликация или бэкап попадают в это время. Так же при логгировании медленных запросов записывайте последний параметр mysql_stat() - может куча простых запросов и нагибает его? Хотя не уверен, что выдаваемая им информация не будет размазана по всему аптайму (

Спустя 6 минут, 29 секунд (29.11.2011 - 11:37) inpost написал(а):
1 сложный запрос начинает тормозить остальные запросы. Посмотри slow_query.

И что значит - оптимизированы? АБСОЛЮТНО все запросы используют индексы? Повторюсь: АБСОЛЮТНО ВСЕ?

Спустя 2 часа, 34 минуты, 47 секунд (29.11.2011 - 14:12) orbitdev написал(а):
inpost, да, перебрал запросы, которые попадают в лог через EXPLAIN, везде используются индексы и перебираются копейки рядов.


Nikitian, крон заданий нет, бекапы делаются иногда, а тормозит постоянно =)

Но спасибо за комментарии, вышел на одну идею. Я записываю в лог Last_query_cost из статуса, и один запрос очень сильно выделяется по данному параметру (Over 1000 против 0-10 для остальных запросов). Насколько я понял, это связано с операциями чтения с диска. Выборка из 3х таблиц, 2 из которых имеют по 20кк записей. Несмотря на ключи, возможно все упирается в чтение с диска? Запрос тормозит не всегда, а только при множественном запуске.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.