MySQL パフォーマンススキーマを使用するには、イベント収集を有効にするために、サーバーの起動時に有効にする必要があります。
パフォーマンススキーマはデフォルトで有効になっています。 それを明示的に有効または無効にするには、performance_schema
変数を適切な値に設定して、サーバーを起動します。 たとえば、サーバー my.cnf
ファイルで次の行を使用します:
[mysqld]
performance_schema=ON
パフォーマンススキーマの初期化時に、サーバーが内部バッファーを割り当てることができない場合、パフォーマンススキーマは自動的に無効になり、performance_schema
を OFF
に設定して、サーバーがインストゥルメンテーションなしで実行します。
パフォーマンススキーマでは、サーバーの起動時にインストゥルメントおよびコンシューマ構成も許可されます。
サーバー起動時のインストゥルメントを制御するには、この形式のオプションを使用します。
--performance-schema-instrument='instrument_name=value'
ここで instrument_name
は wait/synch/mutex/sql/LOCK_open
などのインストゥルメント名で、value
はこれらのいずれかの値です。
OFF
、FALSE
または0
: インストゥルメントの無効化ON
、TRUE
または1
: インストゥルメントの有効化および時間COUNTED
: インストゥルメントを有効にして (時間ではなく) カウント
各 --performance-schema-instrument
オプションではインストゥルメント名を 1 つしか指定できませんが、オプションの複数のインスタンスを指定して、複数のインストゥルメントを構成できます。 さらに、インストゥルメント名にパターンを使用でき、パターンに一致するインストゥルメントを構成します。 すべての条件同期インストゥルメントを有効で、カウント対象として構成するには、次のオプションを使用します。
--performance-schema-instrument='wait/synch/cond/%=COUNTED'
すべてのインストゥルメントを無効にするには、次のオプションを使用します。
--performance-schema-instrument='%=OFF'
例外: memory/performance_schema/%
インストゥルメントは組み込まれており、起動時に無効にすることはできません。
長いインストゥルメント名文字列は、順序に関係なく、短いパターン名より優先されます。 インストゥルメントを選択するためのパターンの指定については、セクション27.4.9「フィルタリング操作のインストゥルメントまたはコンシューマの指定」を参照してください。
認識されないインストゥルメント名は無視されます。 あとでインストールされたプラグインによってインストゥルメントを作成することは可能で、そのときに名前が認識され、構成されます。
サーバー起動時のコンシューマを制御するには、この形式のオプションを使用します。
--performance-schema-consumer-consumer_name=value
ここで、consumer_name
は events_waits_history
などのコンシューマ名で、value
はこれらのいずれかです。
OFF
、FALSE
または0
: コンシューマのイベントを収集しないON
、TRUE
または1
: コンシューマのイベントの収集
たとえば、events_waits_history
コンシューマを有効にするには、次のオプションを使用します。
--performance-schema-consumer-events-waits-history=ON
許可されるコンシューマ名は、setup_consumers
テーブルを調べるとわかります。 パターンは許可されません。 setup_consumers
テーブル内のコンシューマ名は下線が使われますが、起動時に設定されたコンシューマでは、名前の中のダッシュと下線は同等です。
パフォーマンススキーマには、構成情報を提供するいくつかのシステム変数が含まれます。
mysql> SHOW VARIABLES LIKE 'perf%';
+--------------------------------------------------------+---------+
| Variable_name | Value |
+--------------------------------------------------------+---------+
| performance_schema | ON |
| performance_schema_accounts_size | 100 |
| performance_schema_digests_size | 200 |
| performance_schema_events_stages_history_long_size | 10000 |
| performance_schema_events_stages_history_size | 10 |
| performance_schema_events_statements_history_long_size | 10000 |
| performance_schema_events_statements_history_size | 10 |
| performance_schema_events_waits_history_long_size | 10000 |
| performance_schema_events_waits_history_size | 10 |
| performance_schema_hosts_size | 100 |
| performance_schema_max_cond_classes | 80 |
| performance_schema_max_cond_instances | 1000 |
...
performance_schema
変数は ON
または OFF
で、パフォーマンススキーマが有効か無効かを示します。 ほかの変数はテーブルサイズ (行数) やメモリー割り当て値を示します。
パフォーマンススキーマが有効にされている場合、パフォーマンススキーマインスタンスの数は、おそらく大きくサーバーメモリーフットプリントに影響します。 パフォーマンススキーマは、必要なだけメモリーを使用するように多くのパラメータを自動スケーリングします。セクション27.17「パフォーマンススキーマのメモリー割り当てモデル」 を参照してください。
パフォーマンススキーマシステム変数の値を変更するには、それらをサーバー起動時に設定します。 たとえば、待機イベントの履歴テーブルのサイズを変更するには、my.cnf
ファイルに次の行を挿入します:
[mysqld]
performance_schema
performance_schema_events_waits_history_size=20
performance_schema_events_waits_history_long_size=15000
パフォーマンススキーマは、明示的に設定されていない場合、サーバーの起動時にいくつかのパラメータの値のサイズを自動的に設定します。 たとえば、それはイベント待機テーブルのサイズを制御するパラメータをこのようにサイズ設定します。 パフォーマンススキーマは、サーバーの起動時に必要なすべてのメモリーを割り当てるのではなく、メモリー使用量を実際のサーバー負荷に合わせて増分的に割り当てます。 したがって、多くのサイズ設定パラメータを設定する必要はありません。 自動サイズ設定または自動スケール設定されているパラメータを確認するには、mysqld --verbose --help を使用してオプションの説明を調べるか、セクション27.15「パフォーマンススキーマシステム変数」 を参照してください。
サーバーの起動時に設定されない自動サイズ設定されたパラメータごとに、パフォーマンススキーマは次のシステム値の値に基づいてその値を設定する方法を決定します。これらの値は、MySQL サーバーの構成方法について「「ヒント」」とみなされます:
max_connections
open_files_limit
table_definition_cache
table_open_cache
特定のパラメータの自動サイズ設定または自動スケーリングをオーバーライドするには、起動時に−1 以外の値に設定します。 この場合、パフォーマンススキーマはそれに指定された値を割り当てます。
実行時に、SHOW VARIABLES
では、自動サイズ設定されたパラメータに設定されていた実際の値が表示されます。 自動スケールされたパラメータは−1 の値で表示されます。
パフォーマンススキーマが無効になっている場合、その自動サイズ変更されたパラメータと自動スケール変更されたパラメータは−1 のままで、SHOW VARIABLES
には−1 と表示されます。