30.4.4.2 Процедура diagnostics()
Создаёт отчёт о текущем состоянии сервера для целей диагностики.
Данная процедура отключает двоичное протоколирование во время своего выполнения, изменяя значение сеансовой переменной sql_log_bin. Это ограниченная операция, поэтому процедуре требуются привилегии, достаточные для задания ограниченных сеансовых переменных. См. Раздел 7.1.9.1, «Привилегии на системные переменные».
Данные, собираемые для diagnostics(), включают следующую информацию:
Информация из представления
metrics(см. Раздел 30.4.3.21, «Представление metrics»)Информация из других соответствующих представлений схемы
sys, таких как представление, определяющее запросы в 95-м процентилеИнформация из схемы
ndbinfo, если сервер MySQL является частью кластера NDBСтатус репликации (как источника, так и реплики)
Некоторые представления схемы sys рассчитываются как начальные (необязательные), общие и дельта-значения:
Начальное представление — содержимое представления в начале выполнения процедуры
diagnostics(). Этот вывод совпадает с начальными значениями, используемыми для дельта-представления. Начальное представление включается, если опция конфигурацииdiagnostics.include_rawимеет значениеON.Общее представление — содержимое представления в конце выполнения процедуры
diagnostics(). Этот вывод совпадает с конечными значениями, используемыми для дельта-представления. Общее представление всегда включается.Дельта-представление — разница между началом и концом выполнения процедуры. Минимальные и максимальные значения — минимальное и максимальное значения из конечного представления соответственно. Они не обязательно отражают минимальные и максимальные значения в контролируемый период. За исключением представления
metrics, дельта рассчитывается только между первым и последним результатами.
Параметры
in_max_runtime INT UNSIGNED: Максимальное время сбора данных в секундах. ИспользуйтеNULLдля сбора данных в течение 60 секунд по умолчанию. В противном случае используйте значение больше 0.in_interval INT UNSIGNED: Время ожидания между сборами данных в секундах. ИспользуйтеNULLдля ожидания в течение 30 секунд по умолчанию. В противном случае используйте значение больше 0.-
in_auto_config ENUM('current', 'medium', 'full'): Конфигурация Performance Schema для использования. Разрешённые значения:current: Используйте текущие настройки инструментов и потребителей.medium: Включить некоторые инструменты и потребителей.full: Включить все инструменты и потребителей.
ПримечаниеЧем больше инструментов и потребителей включено, тем большее влияние на производительность сервера MySQL. Будьте внимательны с настройкой
medium, и особенно с настройкойfull, которая сильно влияет на производительность.Использование настроек
mediumилиfullтребует привилегииSUPER.Если выбранная настройка отличается от
current, текущие настройки восстанавливаются по завершении процедуры.
Параметры конфигурации
Операцию diagnostics() можно изменить, используя следующие параметры конфигурации или соответствующие пользовательские переменные (см. Раздел 30.4.2.1, «Таблица sys_config»):
-
debug,@sys.debugЕсли этот параметр равен
ON, вывести отладочный вывод. По умолчанию значениеOFF. -
diagnostics.allow_i_s_tables,@sys.diagnostics.allow_i_s_tablesЕсли этот параметр равен
ON, процедуреdiagnostics()разрешается выполнять сканирование таблиц в таблице схемы Information SchemaTABLES. Это может быть дорогостоящим, если таблиц много. По умолчаниюOFF. -
diagnostics.include_raw,@sys.diagnostics.include_rawЕсли этот параметр равен
ON, вывод процедурыdiagnostics()включает исходный вывод запроса к представлениюmetrics. По умолчаниюOFF. -
statement_truncate_len,@sys.statement_truncate_lenМаксимальная длина возвращаемых операторов функции
format_statement(). Более длинные операторы усекаются до этой длины. По умолчанию 64.
Пример
Создать отчёт диагностики, который начинает итерацию каждые 30 секунд и работает не более 120 секунд, используя текущие настройки Performance Schema:
mysql> CALL sys.diagnostics(120, 30, 'current');
Для захвата вывода от процедуры diagnostics() в файл во время выполнения, используйте клиент mysql с командами tee
и filenamenotee (см. Раздел 6.5.1.2, «Команды клиента mysql»):
mysql> tee diag.out;
mysql> CALL sys.diagnostics(120, 30, 'current');
mysql> notee;
© 2025 Oracle
Licensed under the GPLv2 License.