Журналы медленных запросов в Базе данных Azure для MySQL
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер
Внимание
База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных 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
значения ON (ВКЛ.) может повлиять на производительность 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 с помощью диагностики и параметров.
В приведенной ниже таблице описывается содержимое каждого журнала. Порядок появления выбранных полей зависит от выбранного метода вывода.
Свойство | Description |
---|---|
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 |
Username |
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, 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, 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, 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, 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, start_time_t , query_time_d, sql_text_s | where query_time_d > 10