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