Журналы медленных запросов в Базе данных 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