Базы данных

Завершение медленных запросов

Медленные запросы

В некоторых случаях сервер базы данных не может достаточно быстро ответить на запрос. Если на обработку запроса уходит более 10 секунд, то он считается медленным.

По каждому медленному запросу сохраняются следующие данные:

  • Время запроса. Общее время, которое было затрачено сервером на выполнение запроса.
  • Время блокировок. Время, которое учитывалось как время выполнения запроса, но при этом в базе не происходили никакие действия из-за конфликта с другими процессами или ожидания завершения других операций.
  • Количество просмотренных строк. Количество строк таблиц, которое было считано с диска при выполнении запроса.
  • Количество просмотренных строк (tmp). Количество прочитанных строк временных таблиц, которые создавались для выполнения запроса.

При наличии индекса нет необходимости просматривать информацию в строке таблицы. Поэтому использование индексов снижает количество просмотренных строк и увеличивает скорость выполнения запросов. Также при использовании индексов существенно экономятся ресурсы сервера.

Журнал медленных запросов

Для создания журнала медленных запросов необходимо выполнить запуск с параметром:

--log-slow-queries[=file_name] mysqld 

При этом будет создан файл журнала. Здесь сохраняются данные о запросах, на которые ушло больше времени, чем это указано в параметре:

long_query_time

Время выполнения запроса не включает время на блокировку таблиц. Запись в журнал медленных запросов выполняется сразу же после завершения выполнения запроса. То есть в журнале запросы располагаются по порядку из завершения, а не по порядку запуска.

По умолчанию имя файла соответствует имени хоста с окончанием slow.log. Если в имени файла не указывается путь, он сохраняется в директории с данными.

С помощью журнала медленных запросов можно определить операции, которые следует оптимизировать. При большом объеме журнала для получения краткого отчета о запросах используйте команду:

mysqldumpslow 

Для вывода запросов, не работающих с индексами, используйте ключ:

--log-long-format 

Завершение медленных запросов

В ОС Linux для завершения запросов используется команда Kill, прерывающая процесс. Она позволяет серверу продолжать работу после серьезных изменений и обновлений без необходимости перезагрузки.

Пользователь может прервать любой свой процесс (не может прервать системный процесс или процесс другого пользователя). root может прервать системный процесс и процесс любого пользователя.

Синтаксис команды kill:

# kill [сигнал или опция] идентификатор процесса

Основные сигналы команды kill:

Имя сигнала

Номер сигнала

Действие

SIGHUP 1

1

Отключить

SIGKILL 9

9

“Убить”

SIGTERM

15

Прервать

                               

По умолчанию используется SIGTERM, как наиболее безопасный способ завершения процесса. Можно использовать как номер, так и название сигнала.

Для просмотра всех процессов и их идентификаторов выполните:

# ps -A

Чтобы прервать процесс с указанным PID, нужно выполнить следующую команду (Например, для 1684):

# kill -9 1684

В результате будет «убит» процесс с PID=1684.

Для прерывания процесса по имени, а не идентификатору, используется команда pkill. Например:

# pkill mysqld

Для прерывания всех экземпляров и дочерних подпроцессов используется команда killall. Например:

# killall mysqld

В результате будут прерваны все экземпляры и дочерние подпроцессы mysqld.

Если у Вас остались вопросы - создайте тикет в техподдержку.