Анализ логов и данных MySQL

MySQL - популярная система управления базами данных. Зачастую случается, что неверная конфигурация MySQL сервера или же не оптимизированные SQL запросы ведут к нестабильной работе сайта. Сегодня будем разбираться как получить информацию о состоянии вашего MySQL сервера, баз данных, таблиц и запросов.

Список всех таблиц базы данных и их размеров в Мб:

  1. SELECT table_name AS "Tables", engine AS "Engine",
  2. round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
  3. FROM information_schema.TABLES
  4. WHERE table_schema = "<DATABASE_NAME>"
  5. ORDER BY (data_length + index_length) DESC;

Количество строк в таблицах отдельной базы данных:

  1. SELECT TABLE_NAME, TABLE_ROWS FROM `information_schema`.`tables`
  2. WHERE `table_schema` = '<DATABASE_NAME>'
  3. ORDER BY TABLE_ROWS DESC;

Отобразить список активных процессов (threads). Зачастую позволяет понять какой запрос создает чрезмерную нагрузку на MySQL или определить список "подвисших" запросов:

  1. SHOW PROCESSLIST;

Проверка на "deadlocks" (честно говоря, пригодилось всего 1 раз, но пусть будет):

  1. SHOW ENGINE INNODB STATUS;

Команды для обзора MySQL Slow logs:

  1. grep Query_time logs/mysqld-slow-query.log | sort -r --sort=numeric
  1. grep -B 3 '# Query_time: ' logs/mysqld-slow-query.log

Пример данных из MySQL Slow logs:

  1. # Time: 200616 8:34:58
  2. # User@Host: user[host] @ [10.200.30.400]
  3. # Thread_id: 694688 Schema: my_schema QC_hit: No
  4. # Query_time: 30.597096 Lock_time: 0.000060 Rows_sent: 0 Rows_examined: 474289

На что обращать внимание:

  • Time - время, в которое запрос был запущен (можно связать с PHP логами, например).
  • Query_time - время, за которое выполнен SQL запрос.
  • Rows_sent - количество строк, которое вернул MySQL после выполнения запроса. Чем больше результатов - тем больше времени потратит PHP на их обработку, может вообще и вылететь по памяти.
  • Rows_examined - количество строк, которое было задействовано в таблицах при поиске нужных данных во время выполнения SQL запроса. Не забывайте про индексы в таблицах и в случае чего EXPLAIN в помощь!

EXPLAIN

Это оператор "объяснит" всю внутреннюю кухню вашего SQL запроса. На самом деле про этот него можно много расписывать, но это все и без этой заметки есть в интернетах.

SQL_NO_CACHE

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

Добавить комментарий

  .d8888b.    .d8888b.   888     888         d8888 
d88P Y88b d88P Y88b 888 888 d88888
Y88b. 888 888 888 888 d88P888
"Y888b. Y88b. d888 Y88b d88P d88P 888
"Y88b. "Y888P888 Y88b d88P d88P 888
"888 888 Y88o88P d88P 888
Y88b d88P Y88b d88P Y888P d8888888888
"Y8888P" "Y8888P" Y8P d88P 888


Зарегистрируйтесь для добавления материалов без проверки.