Анализ логов и данных 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                                         
888
888
88888b. 88888b. .d88b. 88888b.d88b.
888 "88b 888 "88b d8P Y8b 888 "888 "88b
888 888 888 888 88888888 888 888 888
888 888 888 888 Y8b. 888 888 888
888 888 888 888 "Y8888 888 888 888


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