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

Важно!

База данных Azure для MariaDB находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить миграцию в База данных Azure для MySQL. Дополнительные сведения о переходе на База данных Azure для MySQL см. в статье "Что происходит с База данных Azure для MariaDB?".

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

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

Если на вашем сервере включено хранилище запросов, в журналах медленных запросов могут регистрироваться такие запросы, как "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 значения "ВКЛ." может повлиять на производительность MariaDB, так как все запросы к этим непроиндексированным таблицам будут записываться в журнал медленных запросов.

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

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

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

Обращаться к журналам медленных запросов в Базе данных Azure для MariaDB можно двумя способами: через хранилище локального сервера или журналы диагностики 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 для MariaDB интегрирована с журналами диагностики Azure Monitor. После активации ведения журналов меленных запросов на сервере MariaDB вы можете направить их в Azure Monitor, Центры событий или службу хранилища Azure. Дополнительные сведения о том, как включить журналы диагностики, см. в статье Сбор и использование данных журнала из ресурсов Azure.

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

Свойство Description
TenantId Идентификатор клиента
SourceSystem Azure
TimeGenerated [UTC] Метка времени, когда журнал был записан в формате UTC
Type Тип журнала Всегда AzureDiagnostics
SubscriptionId Идентификатор GUID для подписки, принадлежащей серверу
ResourceGroup Имя группы ресурсов, принадлежащей серверу
ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMARIADB
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 Username
rows_sent_s Количество отправленных строк.
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 секунд на всех серверах MariaDB с включенными журналами диагностики

    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