26.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()разрешено выполнять сканирование таблиц в схеме Information SchemaTABLES. Это может быть дорогостоящим, если таблиц много. Значение по умолчанию —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()). Если значение параметра содержит пробел, оно интерпретируется как запрос. В противном случае это должно быть имя существующего представления, которое запрашивает таблицу Performance Schemaevents_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.