SHOW PROCESSLIST

Как посмотреть медленные запросы в MySQL

На конкретном примере из своей практики расскажу про полезную фичу SHOW PROCESSLIST

Команда (sql-запрос) SHOW PROCESSLIST показывает над чем в данный момент трудится MySQL. Проще говоря, показывает медленные запросы в текущий момент. Позволяет БЫСТРО оценить что не в порядке с базой (не нужно устанавливать дополнительный софт, профайлеры).

На первом скриншоте как раз изображен тяжелый случай. Время отображается в секундах. Если в вашем приложении есть SQL-запрос, выполняющийся более 1 секунды, то у вас что-то не так с архитектурой, железом.

Сайт по функционалу типа Хабра (блоги, посты, комментарии). Только масштаб в разы меньше: 2000 человек в сутки, 10000 постов, 20000 комментариев. Для MySQL это чепуха, тем более, что сайт работает на мощном выделенном серваке. Затык возникает из-за архитекутры приложения. Функционал включает историю просмотров постов, т.е. в отдельную таблицу пишется все пользователи, просмотревшие какой-то пост. За 3 года таблица выросла до 8 млн. записей.

При выводе списка постов конкретного блога (выводится стандартно по 10 записей на страницу), из таблицы просмотров вытягивается кол-во просмотров для каждого поста.

SELECT COUNT(id) AS count, objectid
FROM views
WHERE objectid IN (…список id постов…) AND object_type = 1
GROUP BY objected

Так как таблица 8 млн строк + идет группировка, то база жутко тормозит.

Короче, от этого запроса я избавился просто записывая кол-во просмотров в таблицу постов. Таким образом, как и раньше остался INSERT в таблицу просмотров (для истории) и добавился UPDATE в таблицу постов, который увеличивает на 1 кол-во просмотров.

UPDATE post
SET views = views+1
WHERE postid=23

В итоге, при выводе списка постов блога, идет 1 запрос к небольшой таблице постов, из которой я получаю все данные, в том числе кол-во просмотров. Страница теперь формируется за 0.1-0.5 секунды, а раньше эти страницы часто падали с ошибкой 502.

UPD. Забыл добавить, что поисковики учитывают скорость загрузки сайта при ранжировании. Если страницы тормозят или вообще не открываются, то поисковики понижают позиции сайта в выдаче или вовсе выкидывают страницы из индекса. В Яндекс.Метрике есть мониторинг работы сайта. Вот уже неделю сайт не падает, а раньше такое было чуть ли не каждый день.

мониторинг сайта

В phpMyAdmin команда SHOW PROCESSLIST находится во вкладке «Процессы».

Как посмотреть медленные запросы в MySQL

#1

Полезные MySQL запросы http://plutov.by/post/mysql_useful_queries

Александр, 21.12.2011 - 21:48
#2

спасибо за хорошую статья, вот еще немного про интересные запросы в mysql: http://plutov.by/post/mysql_useful_queries

Александр, 12.05.2012 - 09:39
Оставить комментарий