此表格包含 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;