Spec-Zone.ru › MySQL 5.7

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 Schema 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()). Если значение параметра содержит пробел, оно интерпретируется как запрос. В противном случае это должно быть имя существующего представления, которое запрашивает таблицу Performance Schema 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/sys-sys-config.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API