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

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

В базе данных Azure для MySQL пользователям доступен журнал медленных запросов. Доступ к журналам транзакций не поддерживается. Журнал медленных запросов можно использовать для выявления проблем с производительностью при устранении неполадок.

Дополнительные сведения о журнале медленных запросов MySQL см. в этом разделе справочного руководства по MySQL.

Если на вашем сервере включено хранилище запросов, в журналах медленных запросов могут регистрироваться такие запросы, как "CALL mysql.az_procedure_collect_wait_stats (900, 30);". Это нормально, так как функция хранилища запросов собирает статистические данные о запросах.

Настройка ведения журнала медленных запросов

Журнал медленных запросов по умолчанию отключен. Чтобы включить его, установите для параметра slow_query_log значение "ВКЛ.". Это можно сделать с помощью портала Azure или Azure CLI.

Вы можете настроить еще несколько параметров.

  • long_query_time. Если запрос занимает больше времени, чем задано значением long_query_time (в секундах), информация о нем заносится в журнал. Значение по умолчанию — 10 секунд.
  • log_slow_admin_statements. Указывает, нужно ли сохранять в журнал slow_query_log административные инструкции, например ALTER_TABLE и ANALYZE_TABLE.
  • log_queries_not_using_indexes. Указывает, нужно ли сохранять в журнал slow_query_log запросы, не использующие индексы.
  • log_throttle_queries_not_using_indexes. Ограничивает число не использующих индексы запросов, сохраняемых в журнале медленных запросов. Этот параметр применяется, только если log_queries_not_using_indexes имеет значение "ON" (Включено).
  • log_output. Если задано значение "Файл", журнал медленных запросов записывается как в хранилище локального сервера, так и в журналы диагностики Azure Monitor. Если задано значение "Нет", журнал медленных запросов будет записываться только в журналы диагностики Azure Monitor.

Важно!

Если таблицы не индексированы, установка для параметров log_queries_not_using_indexes и log_throttle_queries_not_using_indexes значения "ВКЛ." может повлиять на производительность MySQL, так как все запросы к этим неиндексированным таблицам будут записываться в журнал медленных запросов.

Если вы планируете регистрировать медленные запросы в течение продолжительного периода времени, рекомендуется установить для параметра log_output значение "Нет". Если задано значение "Файл", эти журналы записываются в хранилище локального сервера, что может повлиять на производительность MySQL.

Полное описание параметров, применимых для журнала медленных запросов, вы найдете в соответствующем разделе документации по MySQL.

Доступ к журналам медленных запросов

Доступ к журналам медленных запросов в базе данных Azure для MySQL можно получить двумя способами: через хранилище локального сервера или журналы диагностики Azure Monitor. Способ задается с помощью параметра log_output.

При использовании хранилища локального сервера можно получить список и загрузить журналы медленных запросов с помощью портала Azure или Azure CLI. На портале Azure перейдите к своему серверу. В разделе Мониторинг найдите страницу Журналы сервера. Дополнительные сведения об использовании Azure CLI см. в статье Настройка журналов медленных запросов и получение к ним доступа с помощью Azure CLI.

Журналы диагностики Azure Monitor позволяют передавать журналы медленных запросов в журналы Azure Monitor (анализ журналов), службу хранилища Azure или Центры событий. Дополнительную информацию см. ниже.

Хранение журналов в хранилище локального сервера

Журналы, которые ведутся в хранилище локального сервера, доступны в течение семи дней с момента их создания. Если общий размер имеющихся журналов превышает 7 ГБ, самые старые файлы удаляются, чтобы освободить место. Объем хранилища в размере 7 ГБ для журналов сервера предоставляется бесплатно и не может быть увеличен.

Новый файл журнала создается каждые 24 часа или при достижении размера файла 7 ГБ.

Примечание

Указанные выше сроки хранения журналов не относятся к журналам, перенаправленным с помощью журналов диагностики Azure Monitor. Вы можете изменить срок хранения для создаваемых приемников данных (например, службы хранилища Azure).

Журналы диагностики

База данных Azure для MySQL интегрирована с журналами диагностики Azure Monitor. После активации ведения журналов медленных запросов на сервере MySQL вы можете направить их в журналы Azure Monitor, Центры событий или службу хранилища Azure. Дополнительные сведения о том, как включить журналы диагностики, см. в статье Сбор и использование данных журнала из ресурсов Azure.

Примечание

Учетные записи хранилище класса Premium не поддерживаются при отправке журналов в хранилище Azure с помощью диагностики и параметров.

В приведенной ниже таблице описывается содержимое каждого журнала. Порядок появления выбранных полей зависит от выбранного метода вывода.

Свойство Описание
TenantId Идентификатор клиента
SourceSystem Azure
TimeGenerated [UTC] Метка времени, когда журнал был записан в формате UTC
Type Тип журнала Всегда AzureDiagnostics.
SubscriptionId Идентификатор GUID для подписки, принадлежащей серверу
ResourceGroup Имя группы ресурсов, принадлежащей серверу
ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL.
ResourceType Servers
ResourceId Универсальный код ресурса (URI)
Resource Имя сервера
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Имя сервера
start_time_t [UTC] Время начала запроса.
query_time_s Общее время, в секундах, которое потребовалось для выполнения запроса
lock_time_s Общее время, в секундах, блокировки запроса
user_host_s Имя пользователя
rows_sent_d Количество отправленных строк.
rows_examined_s Число проверенных строк.
last_insert_id_s last_insert_id
insert_id_s Идентификатор для вставки
sql_text_s Полный запрос.
server_id_s Идентификатор сервера
thread_id_s Идентификатор потока
\_ResourceId Универсальный код ресурса (URI)

Примечание

Для sql_text журнал будет обрезан, если его длина превышает 2048 символов.

Анализ журналов в журналах Azure Monitor

Перенаправив журналы медленных запросов в журналы Azure Monitor с помощью журналов диагностики, можно выполнить дальнейший анализ медленных запросов. Ниже приведены примеры запросов, которые помогут приступить к работе. Обязательно замените указанные ниже имена серверов именем своего сервера.

  • Запросы, выполнявшиеся дольше 10 секунд на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    
  • Список 5 запросов, дольше всего выполнявшихся на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
    | order by query_time_d desc
    | take 5
    
  • Сводка медленных запросов по минимальному, максимальному, среднему и стандартному отклонению времени выполнения запроса на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
    | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
    
  • График распределения медленных запросов на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
    | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
    | render timechart
    
  • Отображение запросов, выполнявшихся дольше 10 секунд на всех серверах MySQL с включенными журналами диагностики

    AzureDiagnostics
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    

Next Steps