文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
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() 程序在資訊綱要 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

    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() 程序叫用) 使用的自訂查詢或檢視。如果選項值包含空格,則會將其解讀為查詢。否則,它必須是查詢效能綱要 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;