30.4.2.1 Таблица sys_config
В этой таблице содержатся параметры конфигурации схемы sys, по одному параметру на строку. Изменения конфигурации, внесённые путём обновления этой таблицы, сохраняются между сеансами клиента и перезагрузками сервера.
В таблице sys_config содержатся следующие столбцы:
-
variableНазвание параметра конфигурации.
-
valueЗначение параметра конфигурации.
-
set_timeМаркер времени последнего изменения строки.
-
set_byАккаунт, который произвёл последнее изменение строки. Значение равно
NULL, если строка не изменялась с момента установки схемыsys.
Для повышения эффективности, чтобы минимизировать прямое чтение из таблицы sys_config, функции схемы sys, использующие значение из этой таблицы, проверяют наличие пользовательской переменной с соответствующим именем, которое является именем пользовательской переменной плюс префикс @sys.. (Например, переменная, соответствующая параметру diagnostics.include_raw, является @sys.diagnostics.include_raw). Если пользовательская переменная существует в текущем сеансе и не равна NULL, функция использует её значение вместо значения из таблицы sys_config. В противном случае функция считывает и использует значение из таблицы. В последнем случае вызывающая функция обычно также устанавливает соответствующую пользовательскую переменную в значение из таблицы, чтобы последующие ссылки на параметр конфигурации в рамках того же сеанса использовали переменную и не считывали таблицу повторно.
Например, параметр statement_truncate_len контролирует максимальную длину заявлений, возвращаемых функцией format_statement(). Значение по умолчанию равно 64. Чтобы временно изменить значение на 32 для текущего сеанса, установите соответствующую пользовательскую переменную @sys.statement_truncate_len:
mysql> SET @stmt = 'SELECT variable, value, set_time, set_by FROM sys_config';
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt) |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+
mysql> SET @sys.statement_truncate_len = 32;
mysql> SELECT sys.format_statement(@stmt);
+-----------------------------------+
| sys.format_statement(@stmt) |
+-----------------------------------+
| SELECT variabl ... ROM sys_config |
+-----------------------------------+
Последующие вызовы функции format_statement() в рамках сеанса продолжат использовать значение пользовательской переменной (32), а не значение, хранящееся в таблице (64).
Чтобы прекратить использование пользовательской переменной и вернуться к использованию значения из таблицы, установите переменную в NULL в рамках вашего сеанса:
mysql> SET @sys.statement_truncate_len = NULL;
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt) |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+
Альтернативно, завершите текущий сеанс (что приведет к тому, что пользовательская переменная больше не будет существовать) и начните новый сеанс.
Указанное выше традиционное соответствие между параметрами в таблице sys_config и пользовательскими переменными может быть использовано для внесения временных изменений в конфигурацию, которые прекращаются при завершении сеанса. Однако если вы установили пользовательскую переменную, а затем в рамках того же сеанса изменили соответствующее значение в таблице, изменённое значение таблицы не используется в этом сеансе, пока пользовательская переменная существует и не равна NULL. (Изменённое значение таблицы используется в других сеансах, в которых пользовательская переменная не назначена).
Следующий список описывает параметры в таблице sys_config и соответствующие пользовательские переменные:
-
diagnostics.allow_i_s_tables,@sys.diagnostics.allow_i_s_tablesЕсли этот параметр равен
ON, процедураdiagnostics()разрешено выполнять сканирование таблиц в таблице Справочника информацииTABLES. Это может быть дорогостоящим, если имеется много таблиц. Значение по умолчанию равноOFF. -
diagnostics.include_raw,@sys.diagnostics.include_rawЕсли этот параметр равен
ON, процедураdiagnostics()включает в себя исходный вывод из запроса к представлениюmetrics. Значение по умолчанию равноOFF. -
ps_thread_trx_info.max_length,@sys.ps_thread_trx_info.max_lengthМаксимальная длина JSON-вывода, создаваемого функцией
ps_thread_trx_info(). Значение по умолчанию равно 65535. -
statement_performance_analyzer.limit,@sys.statement_performance_analyzer.limitМаксимальное количество строк, возвращаемых для представлений, не имеющих встроенного ограничения. (Например, представление
statements_with_runtimes_in_95th_percentileимеет встроенное ограничение в том смысле, что оно возвращает только запросы со средним временем выполнения в 95-м процентиле.) Значение по умолчанию равно 100. -
statement_performance_analyzer.view,@sys.statement_performance_analyzer.viewПользовательский запрос или представление, используемые процедурой
statement_performance_analyzer()(которая сама вызывается процедуройdiagnostics()). Если значение параметра содержит пробел, оно интерпретируется как запрос. В противном случае это должно быть имя существующего представления, которое запрашивает таблицу Справочника производительностиevents_statements_summary_by_digest. В определении запроса или представления не может быть ни одного условияLIMIT, если параметр конфигурацииstatement_performance_analyzer.limitбольше 0. Значение по умолчанию равноNULL(нет пользовательского представления). -
statement_truncate_len,@sys.statement_truncate_lenМаксимальная длина заявлений, возвращаемых функцией
format_statement(). Более длинные запросы усекаются до этой длины. Значение по умолчанию равно 64.
Другие параметры могут быть добавлены в таблицу sys_config. Например, процедуры diagnostics() и execute_prepared_stmt() используют параметр debug, если он существует, но по умолчанию этот параметр не является частью таблицы sys_config, поскольку вывод отладки обычно включается только временно путём установки соответствующей пользовательской переменной @sys.debug. Чтобы включить вывод отладки без необходимости установки этой переменной в отдельных сеансах, добавьте параметр в таблицу:
mysql> INSERT INTO sys.sys_config (variable, value) VALUES('debug', 'ON');
Для изменения параметра отладки в таблице выполните два действия. Сначала измените значение в самой таблице:
mysql> UPDATE sys.sys_config
SET value = 'OFF'
WHERE variable = 'debug';
Во-вторых, чтобы также гарантировать, что вызовы процедур в рамках текущего сеанса используют изменённое значение из таблицы, установите соответствующую пользовательскую переменную в NULL:
mysql> SET @sys.debug = NULL;
© 2025 Oracle
Licensed under the GPLv2 License.