文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


30.4.2.1 sys_config 表格

此表格包含 sys schema 配置選項,每個選項各佔一行。透過更新此表格所做的配置變更會在用戶端會話和伺服器重新啟動後持續存在。

sys_config 表格具有以下欄位

  • variable

    配置選項名稱。

  • value

    配置選項值。

  • set_time

    該列最近一次修改的時間戳記。

  • set_by

    最近一次修改該列的帳戶。如果自 sys schema 安裝以來該列未曾變更,則值為 NULL

為了提高效率,並盡量減少從 sys_config 表格直接讀取的次數,使用此表格中數值的 sys schema 函式會檢查是否有具有對應名稱的使用者定義變數,即具有相同名稱並加上 @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

    如果此選項為 ONdiagnostics() 程序會包含查詢 metrics 檢視表的原始輸出。預設值為 OFF

  • ps_thread_trx_info.max_length, @sys.ps_thread_trx_info.max_length

    ps_thread_trx_info() 函式產生的 JSON 輸出的最大長度。預設值為 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 表格。如果 statement_performance_analyzer.limit 組態選項大於 0,則查詢或檢視表定義中不能有任何 LIMIT 子句。預設值為 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;