Мониторинг производительности Базы данных Azure для MariaDB с помощью хранилища запросов
Важно!
База данных Azure для MariaDB находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить миграцию в База данных Azure для MySQL. Дополнительные сведения о переходе на База данных Azure для MySQL см. в статье "Что происходит с База данных Azure для MariaDB?".
Область применения: БД Azure для MariaDB версии 10.2
Компонент хранилища запросов в Базе данных Azure для MariaDB позволяет отслеживать производительность запросов с течением времени. Хранилище запросов упрощает устранение неполадок, позволяя быстро выявлять самые медленные и ресурсоемкие запросы. Хранилище запросов автоматически ведет журнал запросов и статистики выполнения и сохраняет их для просмотра. Этот компонент разделяет данные по периодам, давая представление о закономерностях использования баз данных. Данные для всех пользователей, баз данных и запросов хранятся в базе данных схемы mysql в экземпляре Базы данных Azure для MariaDB.
Распространенные сценарии использования хранилища запросов
Хранилище запросов можно использовать во многих сценариях, включая следующие:
- обнаружение регрессивных запросов;
- определение числа выполнений запроса за данный период времени;
- сравнение среднего времени выполнения запроса за периоды времени для выявления больших расхождений;
Включите хранилище запросов.
Хранилище запросов является дополнительной функцией, поэтому оно не активно на сервере по умолчанию. Хранилище запросов включается или отключается глобально для всех (но не для отдельных) баз данных на данном сервере.
Включение хранилища запросов с помощью портала Azure
- Войдите на портал Azure и выберите сервер Базы данных Azure для MariaDB.
- В разделе меню Параметры выберите Параметры сервера.
- Найдите параметр query_store_capture_mode.
- Задайте для него значение "ALL" и щелкните Сохранить.
Чтобы включить статистику ожидания в хранилище запросов, сделайте следующее.
- Найдите параметр query_store_wait_sampling_capture_mode.
- Задайте для него значение "ALL" и щелкните Сохранить.
Подождите около 20 минут, пока первый набор данных не сохранится в базе данных mysql.
Данные в хранилище запросов
Хранилище запросов включает два хранилища:
- хранилище статистики времени выполнения для статистических сведений о выполнении запросов;
- хранилище статистики ожидания для статистических сведений об ожидании.
С целью экономии места к статистическим данным о выполнении запросов в хранилище статистики времени выполнения применяется агрегирование за фиксированный настраиваемый период. Сведения в этих хранилищах отображаются путем запроса представлений хранилища запросов.
Следующий запрос возвращает сведения о запросах в хранилище запросов:
SELECT * FROM mysql.query_store;
Это запрос статистики ожидания:
SELECT * FROM mysql.query_store_wait_stats;
Поиск запросов ожидания
Примечание.
Сбор статистики ожидания не следует включать в часы пиковой рабочей нагрузки или же его следует включить на неограниченное время только для конфиденциальных рабочих нагрузок.
Для рабочих нагрузок, работающих с высокой загрузкой ЦП или на серверах с пониженным числом виртуальных ядер, будьте внимательны при включении сбора статистики ожидания. Ее не стоит включать на неограниченное время.
Типы событий ожидания объединяют разные события ожидания в группы по принципу сходства. Хранилище запросов предоставляет тип события ожидания, имя определенного события ожидания и запрашиваемый запрос. Возможность сопоставлять эти сведения об ожидании со статистикой времени выполнения запроса позволяет получить более глубокое понимание аспектов, влияющих на характеристики производительности запросов.
Ниже приведены некоторые примеры получения более подробных сведений о рабочей нагрузке с помощью статистики ожидания в хранилище запросов.
Наблюдение | Действие |
---|---|
Ожидания с высоким уровнем блокировки | Проверьте текст затронутых запросов и выявите целевые сущности. Найдите в хранилище запросов другие запросы, изменяющие ту же сущность, которые часто выполняются и (или) имеют большую длительность. Найдя такие запросы, рекомендуется изменить логику приложения, чтобы улучшить параллелизм, или использовать менее строгий уровень изоляции. |
Ожидания с большим числом операций ввода-вывода буфера | Найдите в хранилище запросов запросы с большим числом физических операций чтения. Если они соответствуют запросам с высокими значениями ожидания ввода-вывода, попробуйте ввести индекс для базовой сущности, чтобы задать поиск вместо сканирования. Это позволит свести к минимуму затраты на операции ввода-вывода запросов. Ознакомьтесь с рекомендациями по повышению производительности серверов на портале: возможно, для этого сервера есть рекомендации по индексам, которые позволят оптимизировать запросы. |
Ожидания с высокой загрузкой памяти | Найдите в хранилище запросов те запросы, которые используют больше всего памяти. Вероятнее всего, эти запросы препятствуют дальнейшей обработке затронутых запросов. Ознакомьтесь с рекомендациями по повышению производительности для сервера на портале: возможно, есть рекомендации по индексам, которые позволят оптимизировать запросы. |
Варианты конфигурации
При включении хранилища запросов оно сохраняет данные с 15-минутным периодом агрегирования: не более 500 уникальных запросов на период.
Ниже приведены настраиваемые параметры для хранилища запросов.
Параметр | Description | По умолч. | Диапазон |
---|---|---|---|
query_store_capture_mode | Включение или отключение функции хранилища запросов в зависимости от значения. Примечание. Если performance_schema имеет значение OFF, включение query_store_capture_mode включает performance_schema и подмножество инструментов схемы производительности, необходимых для этой функции. | ВСЕ | NONE, ALL |
query_store_capture_interval | Интервал записи в хранилище запросов в минутах. Позволяет указать интервал агрегирования метрик запросов. | 15 | 5–60 |
query_store_capture_utility_queries | Включение или отключение сбора статистики всех запросов служебной программы, которые выполняются в системе. | Нет | YES, NO |
query_store_retention_period_in_days | Период времени в днях для хранения данных в хранилище запросов. | 7 | 1–30 |
Следующие параметры применяются исключительно к статистике ожидания.
Параметр | Description | По умолч. | Диапазон |
---|---|---|---|
query_store_wait_sampling_capture_mode | Позволяет включить и отключить сбор статистики ожидания. | NONE | NONE, ALL |
query_store_wait_sampling_frequency | Изменяет частоту выборки времени ожидания в секундах. 5–300 секунд. | 30 | 5–300 |
Примечание.
В настоящее время query_store_capture_mode заменяет эту конфигурацию, то есть для сбора статистики ожидания нужно присвоить query_store_capture_mode и query_store_wait_sampling_capture_mode значение ALL. Если параметр query_store_capture_mode отключен, то сбор статистики ожидания отключается, так как эта функция использует включенный параметр performance_schema и значение query_text, записанное в хранилище запросов.
Используйте портал Azure, чтобы получить значение параметра или задать другое значение.
Представления и функции
Просмотр и управление хранилищем запросов осуществляеются с помощью следующих представлений и функций. Любой пользователь с ролью select privilege public может использовать эти представления для просмотра данных в хранилище запросов. Эти представления доступны только в базе данных mysql.
Запросы нормализованы: обратите внимание на их структуру после удаления литералов и констант. Если два запроса идентичны, кроме литеральных значений, они будут иметь одинаковый хэш.
mysql.query_store
Это представление возвращает все данные в хранилище запросов. Для каждого отдельного идентификатора базы данных, идентификатора пользователя и идентификатора запроса используется отдельная строка.
Имя | Тип данных | IS_NULLABLE | Description |
---|---|---|---|
schema_name |
varchar(64) | Нет | Имя схемы. |
query_id |
bigint(20) | Нет | Уникальный идентификатор, сформированный для конкретного запроса. Если тот же запрос выполняется в другой схеме, создается новый идентификатор. |
timestamp_id |
TIMESTAMP | Нет | Метка времени выполнения запроса. Она основана на значении query_store_interval. |
query_digest_text |
longtext | Нет | Нормализованный текст запроса после удаления всех литералов. |
query_sample_text |
longtext | Нет | Первое вхождение фактического запроса с литералами. |
query_digest_truncated |
bit | Да | Указывает, был ли текст запроса усечен. Если длина запроса превышает 1 КБ, будет указано значение YES. |
execution_count |
bigint(20) | Нет | Количество выполнений запроса для этого идентификатора метки времени или в течение заданного периода времени. |
warning_count |
bigint(20) | Нет | Число предупреждений, созданных во время указанного периода. |
error_count |
bigint(20) | Нет | Количество ошибок, созданных этим запросом в течение указанного периода. |
sum_timer_wait |
двойной точности | Да | Общее время выполнения этого запроса в течение указанного периода. |
avg_timer_wait |
двойной точности | Да | Среднее время выполнения этого запроса в течение указанного периода. |
min_timer_wait |
двойной точности | Да | Минимальное время выполнения этого запроса. |
max_timer_wait |
двойной точности | Да | Максимальное время выполнения. |
sum_lock_time |
bigint(20) | Нет | Общее время, затраченное на все блокировки при выполнении этого запроса в течение указанного периода времени. |
sum_rows_affected |
bigint(20) | Нет | количество затронутых строк. |
sum_rows_sent |
bigint(20) | Нет | Количество строк, отправленных в клиент. |
sum_rows_examined |
bigint(20) | Нет | Число проверенных строк. |
sum_select_full_join |
bigint(20) | Нет | Число полных объединений. |
sum_select_scan |
bigint(20) | Нет | Количество поисков с помощью инструкции SELECT. |
sum_sort_rows |
bigint(20) | Нет | Количество отсортированных строк. |
sum_no_index_used |
bigint(20) | Нет | Количество случаев, когда запрос не использовал индексы. |
sum_no_good_index_used |
bigint(20) | Нет | Количество случаев, когда обработчик выполнения запросов не использовал правильные индексы. |
sum_created_tmp_tables |
bigint(20) | Нет | Общее число созданных временных таблиц. |
sum_created_tmp_disk_tables |
bigint(20) | Нет | Общее число временных таблиц, созданных на диске (с помощью операций ввода-вывода). |
first_seen |
TIMESTAMP | Нет | Первое обнаружение (в формате UTC) запроса во время периода агрегирования. |
last_seen |
TIMESTAMP | Нет | Последнее обнаружение (в формате UTC) запроса во время этого периода агрегирования. |
mysql.query_store_wait_stats
Это представление возвращает данные событий ожидания в хранилище запросов. Для каждого отдельного идентификатора базы данных, идентификатора пользователя, идентификатора запроса и события используется отдельная строка.
Имя | Тип данных | IS_NULLABLE | Description |
---|---|---|---|
interval_start |
TIMESTAMP | Нет | Начало интервала (с приращением по 15 минут). |
interval_end |
TIMESTAMP | Нет | Окончание интервала (с приращением по 15 минут). |
query_id |
bigint(20) | Нет | Созданный уникальный идентификатор нормализованного запроса (из хранилища запросов). |
query_digest_id |
varchar(32) | Нет | Нормализованный текст запроса после удаления всех литералов (из хранилища запросов). |
query_digest_text |
longtext | Нет | Первое вхождение фактического запроса с литералами (из хранилища запросов). |
event_type |
varchar(32) | Нет | Категория события ожидания. |
event_name |
varchar(128) | Нет | Имя события ожидания. |
count_star |
bigint(20) | Нет | Число событий ожидания, выбранных в течение интервала для запроса. |
sum_timer_wait_ms |
двойной точности | Нет | Общее время ожидания (в миллисекундах) этого запроса в течение интервала. |
Функции
Имя | Description |
---|---|
mysql.az_purge_querystore_data(TIMESTAMP) |
Очистка всех данных хранилища запросов до заданной метки времени. |
mysql.az_procedure_purge_querystore_event(TIMESTAMP) |
Очистка всех данных событий ожидания до заданной метки времени. |
mysql.az_procedure_purge_recommendation(TIMESTAMP) |
Очистка рекомендаций, срок действия которых предшествует заданной метке времени. |
Известные проблемы и ограничения
- Если для сервера MariaDB включен параметр
default_transaction_read_only
, хранилище запросов не может записывать данные. - Операции хранилища запросов могут быть прерваны при обнаружении длинных запросов в Юникоде (>= 6000 байт).
- Период хранения статистики ожидания составляет 24 часа.
- Для получения статистики ожидания используется выборка части событий. Частоту выборки можно изменить с помощью параметра
query_store_wait_sampling_frequency
. - Хранилище запросов не поддерживается для версии 10.3.
Следующие шаги
- Узнайте больше об анализе производительности запросов.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по