Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

28.4.2.1 sys_config テーブル

このテーブルには、オプションごとに 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;