Анализ логов и данных 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
888d888 .d88888 888 888 888 888
888P" d88" 888 `Y8bd8P' 888 888
888 888 888 X88K 888 888
888 Y88b 888 .d8""8b. Y88b 888
888 "Y88888 888 888 "Y88888


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