Плагин времени ответа запроса
Плагин 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
© 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/