Spec-Zone.ru › MariaDB

Плагин времени ответа запроса

Плагин query_response_time создаёт таблицу QUERY_RESPONSE_TIME в базе данных INFORMATION_SCHEMA. Плагин также добавляет команды SHOW QUERY_RESPONSE_TIME и FLUSH QUERY_RESPONSE_TIME.

Журнал медленных запросов slow query log предоставляет точную информацию о запросах, которые выполняются долго. Однако иногда существует большое количество запросов, каждый из которых выполняется очень быстро. Эта функция предоставляет инструмент для анализа этой информации путём подсчёта и отображения количества запросов в зависимости от времени их выполнения.

Эта функция основана на распределении времени ответа от Percona Response Time Distribution.

Установка плагина

Эта общая библиотека фактически состоит из двух разных плагинов:

  • QUERY_RESPONSE_TIME - Плагин INFORMATION_SCHEMA, предоставляющий статистику.
  • QUERY_RESPONSE_TIME_AUDIT - Плагин аудита, собирающий статистику.

Для получения значимой статистики оба плагина необходимо установить.

Хотя общая библиотека плагина по умолчанию распространяется с MariaDB, сам плагин не устанавливается по умолчанию MariaDB. Существует два метода установки плагина в MariaDB.

Первый метод можно использовать для установки плагина без перезапуска сервера. Плагин можно установить динамически, выполнив INSTALL SONAME или INSTALL PLUGIN. Например:

INSTALL SONAME 'query_response_time';

Второй метод позволяет сообщить серверу о необходимости загрузки плагина при запуске. Плагин можно установить таким образом, указав параметры --plugin-load или --plugin-load-add. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе опций сервера в файле опций option group в файле опций. Например:

[mariadb]
...
plugin_load_add = query_response_time

Удаление плагина

Вы можете удалить плагин динамически, выполнив UNINSTALL SONAME или UNINSTALL PLUGIN. Например:

UNINSTALL SONAME 'query_response_time';

Если вы установили плагин, используя параметры --plugin-load или --plugin-load-add в соответствующей группе опций сервера в файле опций option group в файле опций, эти параметры следует удалить, чтобы предотвратить загрузку плагина при следующем запуске сервера.

Распределение времени ответа

Пользователь может определить временные интервалы, которые делят диапазон от 0 до положительной бесконечности на более мелкие интервалы, а затем собирать количество команд, время выполнения которых попадает в каждый из этих интервалов.

Каждый интервал описывается как:

(range_base ^ n; range_base ^ (n+1)]

range_base — некоторое положительное число (см. Ограничения). Интервал определяется как разность между двумя близкими степенями range_base.

Например, если range_base=10, у нас есть следующие интервалы:

(0; 10 ^ -6], (10 ^ -6; 10 ^ -5], (10 ^ -5; 10 ^ -4], ..., 
  (10 ^ -1; 10 ^1], (10^1; 10^2]...(10^7; positive infinity]

или

(0; 0.000001], (0.000001; 0.000010], (0.000010; 0.000100], ..., 
  (0.100000; 1.0]; (1.0; 10.0]...(1000000; positive infinity]

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

Вы можете выбрать диапазон интервалов, изменив range_base. Например, для range_base=2 у нас есть следующие интервалы:

(0; 2 ^ -19], (2 ^ -19; 2 ^ -18], (2 ^ -18; 2 ^ -17], ..., 
  (2 ^ -1; 2 ^1], (2 ^ 1; 2 ^ 2]...(2 ^ 25; positive infinity]

или

(0; 0.000001], (0.000001, 0.000003], ..., 
  (0.25; 0.5], (0.5; 2], (2; 4]...(8388608; positive infinity]

Маленькие числа выглядят странно (например, не похожи на степени 2), потому что при вычислении диапазонов во время выполнения теряется точность при делении. В результирующей таблице вы смотрите на верхнюю границу диапазона.

Например, вы можете увидеть:

SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;
+----------------+-------+----------------+
| TIME           | COUNT | TOTAL          |
+----------------+-------+----------------+
|       0.000001 |     0 |       0.000000 |
|       0.000010 |    17 |       0.000094 |
|       0.000100 |  4301         0.236555 |
|       0.001000 |  1499 |       0.824450 |
|       0.010000 | 14851 |      81.680502 |
|       0.100000 |  8066 |     443.635693 |
|       1.000000 |     0 |       0.000000 |
|      10.000000 |     0 |       0.000000 |
|     100.000000 |     1 |      55.937094 |
|    1000.000000 |     0 |       0.000000 |
|   10000.000000 |     0 |       0.000000 |
|  100000.000000 |     0 |       0.000000 |
| 1000000.000000 |     0 |       0.000000 |
| TOO LONG       |     0 | TOO LONG       |
+----------------+-------+----------------+

Это означает, что было:

* 17 queries with 0.000001 < query execution time < = 0.000010 seconds; total execution time of the 17 queries = 0.000094 seconds

* 4301 queries with 0.000010 < query execution time < = 0.000100 seconds; total execution time of the 4301 queries = 0.236555 seconds

* 1499 queries with 0.000100 < query execution time < = 0.001000 seconds; total execution time of the 1499 queries = 0.824450 seconds

* 14851 queries with 0.001000 < query execution time < = 0.010000 seconds; total execution time of the 14851 queries = 81.680502 seconds

* 8066 queries with 0.010000 < query execution time < = 0.100000 seconds; total execution time of the 8066 queries = 443.635693 seconds

* 1 query with 10.000000 < query execution time < = 100.0000 seconds; total execution time of the 1 query = 55.937094 seconds

Использование плагина

Использование таблицы Information Schema

Вы можете получить распределение, запросив таблицу QUERY_RESPONSE_TIME в базе данных INFORMATION_SCHEMA. Например:

SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;

Вы также можете написать более сложные запросы. Например:

SELECT c.count, c.time,
(SELECT SUM(a.count) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as a 
   WHERE a.count != 0) as query_count,
(SELECT COUNT(*)     FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as b 
  WHERE b.count != 0) as not_zero_region_count,
(SELECT COUNT(*)     FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME) as region_count
FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as c 
  WHERE c.count > 0;

Примечание: если query_response_time_stats установлено в ON, то время выполнения этих двух запросов SELECT также будет собираться.

Использование команды SHOW

В качестве альтернативы таблице QUERY_RESPONSE_TIME в базе данных INFORMATION_SCHEMA можно также использовать команду SHOW QUERY_RESPONSE_TIME. Например:

SHOW QUERY_RESPONSE_TIME;

Очистка данных плагина

Очистка данных плагина выполняет две операции:

  • Очищает сохранённое время из таблицы QUERY_RESPONSE_TIME в базе данных INFORMATION_SCHEMA.
  • Считывает значение query_response_time_range_base и использует его для установки range_base для таблицы.

Данные плагина можно очистить с помощью команды FLUSH QUERY_RESPONSE_TIME. Например:

FLUSH QUERY_RESPONSE_TIME;

Установка системной переменной query_response_time_flush имеет тот же эффект. Например:

SET GLOBAL query_response_time_flush=1;

Версии

Версия Статус Введена
1.0 Стабильная MariaDB 10.1.13
1.0 Бета MariaDB 10.0.10
1.0 Альфа MariaDB 10.0.4

Системные переменные

query_response_time_flush

  • Описание: Обновление этой переменной очищает статистику и повторно считывает query_response_time_range_base.
  • Командная строка: Нет
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: boolean
  • Значение по умолчанию: OFF

query_response_time_range_base

  • Описание: Выбор базового значения для интервалов QUERY_RESPONSE_TIME. ПРЕДУПРЕЖДЕНИЕ: изменение переменной вступает в силу только после очистки.
  • Командная строка: --query-response-time-range-base=#
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: numeric
  • Значение по умолчанию: 10
  • Диапазон: от 2 до 1000

query_response_time_exec_time_debug

  • Описание: Имитировать время выполнения запросов в микросекундах. При значении 0 (по умолчанию) используется фактическое время выполнения.
    • Эта системная переменная доступна только при отладке плагина.
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: numeric
  • Значение по умолчанию: 0
  • Диапазон: от 0 до 31536000

query_response_time_stats

  • Описание: Включить или отключить сбор статистики времени ответа запросов
  • Командная строка: query-response-time-stats[={0|1}]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: boolean
  • Значение по умолчанию: OFF

Параметры

query_response_time

  • Описание: Управляет тем, как сервер должен обращаться с плагином при запуске.
    • Допустимые значения:
      • OFF - Отключает плагин без удаления его из таблицы mysql.plugins.
      • ON - Включает плагин. Если плагин нельзя инициализировать, сервер всё равно продолжит запуск, но плагин будет отключен.
      • FORCE - Включает плагин. Если плагин нельзя инициализировать, сервер завершит запуск с ошибкой.
      • FORCE_PLUS_PERMANENT - Включает плагин. Если плагин нельзя инициализировать, сервер завершит запуск с ошибкой. Кроме того, плагин нельзя удалить с помощью UNINSTALL SONAME или UNINSTALL PLUGIN во время работы сервера.
    • См. Обзор плагинов: Настройка активации плагинов при запуске сервера для получения дополнительной информации.
  • Командная строка: --query-response-time=value
  • Тип данных: enumerated
  • Значение по умолчанию: ON
  • Допустимые значения: OFF, ON, FORCE, FORCE_PLUS_PERMANENT

query_response_time_audit

  • Описание: Управляет тем, как сервер должен обрабатывать плагин при запуске сервера.
    • Допустимые значения:
      • OFF — Отключает плагин, не удаляя его из таблицы mysql.plugins.
      • ON — Включает плагин. Если плагин не удаётся инициализировать, сервер всё равно продолжит запуск, но плагин будет отключён.
      • FORCE — Включает плагин. Если плагин не удаётся инициализировать, сервер завершит запуск с ошибкой.
      • FORCE_PLUS_PERMANENT — Включает плагин. Если плагин не удаётся инициализировать, сервер завершит запуск с ошибкой. Кроме того, плагин нельзя удалить с помощью UNINSTALL SONAME или UNINSTALL PLUGIN во время работы сервера.
    • Для получения дополнительной информации см. Обзор плагинов: Настройка активации плагина при запуске сервера.
  • Командная строка: --query-response-time-audit=value
  • Тип данных: enumerated
  • Значение по умолчанию: ON
  • Допустимые значения: OFF, ON, FORCE, FORCE_PLUS_PERMANENT

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают взгляды MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/query-response-time-plugin/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API