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.