パフォーマンススキーマを使用できるものとして,MySQL 5.6.6以降,それはデフォルトで有効にされます。5.6.6 より前では、それはデフォルトで無効にされます。それを明示的に有効または無効にするには、performance_schema
変数を適切な値に設定して、サーバーを起動します。たとえば、my.cnf
ファイルでこれらの行を使用します。
[mysqld] performance_schema=on
パフォーマンススキーマの初期化時に、サーバーが内部バッファーを割り当てることができない場合、パフォーマンススキーマは自動的に無効になり、performance_schema
をOFF
に設定して、サーバーがインストゥルメンテーションなしで実行します。
MySQL 5.6.4 以降、パフォーマンススキーマは、サーバー起動時のインストゥルメントおよびコンシューマの構成を許可します。これは、以前setup_instruments
およびsetup_consumers
テーブルにUPDATE
ステートメントを使用して、実行時にのみ可能でした。この変更は、サーバーの起動時にすでに初期化されているインストゥルメントを、実行時の構成で無効にするには遅すぎるために行われました。たとえば、wait/synch/mutex/sql/LOCK_open
相互排他ロックはサーバー起動時に 1 回初期化されるため、実行時に対応するインストゥルメントを無効にする試みは無効です。
サーバー起動時のインストゥルメントを制御するには、この形式のオプションを使用します。
--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'
長いインストゥルメント名文字列は、順序に関係なく、短いパターン名より優先されます。インストゥルメントを選択するためのパターンの指定については、セクション22.2.3.4「フィルタリング操作のインストゥルメントまたはコンシューマの指定」を参照してください。
認識されないインストゥルメント名は無視されます。あとでインストールされたプラグインによってインストゥルメントを作成することは可能で、そのときに名前が認識され、構成されます。
サーバー起動時のコンシューマを制御するには、この形式のオプションを使用します。
--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
で、パフォーマンススキーマが有効か無効かを示します。ほかの変数はテーブルサイズ (行数) やメモリー割り当て値を示します。
パフォーマンススキーマが有効にされている場合、パフォーマンススキーマインスタンスの数は、おそらく大きくサーバーメモリーフットプリントに影響します。パフォーマンススキーマのシステム変数の値をチューニングして、インストゥルメントの不足と過剰なメモリー消費のバランスをとるインスタンスの数を見つける必要がある可能性があります。
パフォーマンススキーマシステム変数の値を変更するには、それらをサーバー起動時に設定します。たとえば、my.cnf
ファイルに、履歴テーブルのサイズを変更するために次の行を入れます。
[mysqld] performance_schema performance_schema_events_waits_history_size=20 performance_schema_events_waits_history_long_size=15000
MySQL 5.6.6 以降、パフォーマンススキーマは、そのパラメータのいくつかの値を、それらが明示的に設定されていない場合に、サーバーの起動時に自動的にサイズ設定します。たとえば、それはイベント待機テーブルのサイズを制御するパラメータをこのようにサイズ設定します。どのパラメータがこのポリシーでサイズ設定されるかを確認するには、mysqld --verbose --helpを使用し、−1 のデフォルト値を持つものを探すか、セクション22.12「パフォーマンススキーマシステム変数」を参照してください。
サーバー起動時に設定されていない (または −1 に設定されている) 自動サイズ設定される各パラメータについて、パフォーマンススキーマは、次のシステム変数の値に基づいてその値を設定する方法を判断します。それらは、MySQL サーバーをどのように構成しているかに関する「ヒント」とみなされます。
max_connections open_files_limit table_definition_cache table_open_cache
特定のパラメータの自動サイズ設定をオーバーライドするには、起動時にそれに −1 以外の値を設定します。この場合、パフォーマンススキーマはそれに指定された値を割り当てます。
実行時に、SHOW VARIABLES
では、自動サイズ設定されたパラメータに設定されていた実際の値が表示されます。
パフォーマンススキーマが無効にされている場合、その自動サイズ設定されたパラメータは −1 に設定されたままになり、SHOW VARIABLES
では −1 が表示されます。