このテーブルには、オプションごとに 1 行ずつ、sys
スキーマ構成オプションが含まれています。 このテーブルを更新して行われた構成変更は、クライアントセッションおよびサーバーの再起動後も保持されます。
sys_config
テーブルには、次のカラムがあります:
-
variable
構成オプション名。
-
value
構成オプションの値。
-
set_time
行に対する最新の変更のタイムスタンプ。
-
set_by
行を最後に変更したアカウント。
sys
スキーマのインストール後に行が変更されていない場合、値はNULL
です。
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()
の起動では、テーブル (64) に格納されている値ではなく、ユーザー定義の変数値 (32) が引き続き使用されます。
ユーザー定義変数の使用を停止し、テーブルの値の使用に戻すには、セッション内で変数を 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
ビューのクエリーからの RAW 出力が含まれます。 デフォルトは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.debug
ユーザー定義変数を設定することによって一時的にのみ有効になるため、このオプションはデフォルトで sys_config
テーブルの一部ではありません。 個々のセッションで変数を設定せずにデバッグ出力を有効にするには、テーブルにオプションを追加します:
mysql> INSERT INTO sys.sys_config (variable, value) VALUES('debug', 'ON');
テーブルのデバッグ設定を変更するには、次の 2 つの操作を行います。 まず、テーブル自体の値を変更します:
mysql> UPDATE sys.sys_config
SET value = 'OFF'
WHERE variable = 'debug';
次に、現在のセッション内でプロシージャを起動する際に、テーブルの変更された値が使用されるようにするには、対応するユーザー定義変数を NULL
に設定します:
mysql> SET @sys.debug = NULL;