Анализ логов и данных 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 запрос, без использования кэшированных данных.

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

           888                 8888888888 
888 888
888 888
888 888 888 888 .d8888b 8888888
888 888 888 .88P d88P" 888
888 888 888888K 888 888
Y88b 888 888 "88b Y88b. 888
"Y88888 888 888 "Y8888P 888
888
Y8b d88P
"Y88P"
Зарегистрируйтесь для добавления материалов без проверки.