MariaDB Performance Schema の setup_objects テーブル:サンプルコード
MariaDB の Performance Schema には、setup_objects
テーブルと呼ばれる重要な要素があります。このテーブルは、Performance Schema が監視するオブジェクトを決定する役割を担っており、データベースのパフォーマンス分析において重要な役割を果たします。
役割
setup_objects
テーブルは、以下の情報を格納することで、Performance Schema が監視するオブジェクトを制御します。
- TIMED: オブジェクトのイベントをタイミング計測するかどうかのフラグ。1 (true) の場合はタイミング計測、0 (false) の場合は計測なしとなります。
- ENABLED: オブジェクトの監視を有効化/無効化するかを指定します。1 (true) の場合は監視対象、0 (false) の場合は監視対象外となります。
- OBJECT_NAME: オブジェクト名。ワイルドカード (
%
) を使用して、パターンマッチングを行うこともできます。 - OBJECT_SCHEMA: オブジェクトが属するスキーマ名。ワイルドカード (
%
) を使用して、すべてのスキーマを監視することもできます。 - OBJECT_TYPE: 監視対象となるオブジェクトの種類。例えば、'TABLE' (テーブル)、'FUNCTION' (関数)、'PROCEDURE' (プロシージャ) などがあります。
デフォルト設定
デフォルトでは、setup_objects
テーブルには以下のエントリが用意されています。
OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | ENABLED | TIMED
------------+--------------+------------+---------+-------
TABLE | % | % | 1 | 1
FUNCTION | % | % | 0 | 0
PROCEDURE | % | % | 0 | 0
TRIGGER | % | % | 0 | 0
EVENT | % | % | 0 | 0
この設定により、Performance Schema はデフォルトですべてのテーブルを監視し、関数、プロシージャ、トリガー、イベントは監視しません。
カスタマイズ
setup_objects
テーブルは、ユーザーによって自由にカスタマイズできます。特定のオブジェクトのみを監視したり、特定のオブジェクトのイベントタイミング計測を有効化したりすることができます。
例:特定のテーブルのみを監視する
以下の SQL 文を実行することで、mydatabase
データベース内のすべてのテーブルのみを監視するように設定できます。
INSERT INTO performance_schema.setup_objects (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, ENABLED, TIMED)
VALUES ('TABLE', 'mydatabase', '%', 1, 1);
例:すべての関数のイベントタイミング計測を有効化する
以下の SQL 文を実行することで、すべての関数のイベントタイミング計測を有効化できます。
UPDATE performance_schema.setup_objects
SET TIMED = 1
WHERE OBJECT_TYPE = 'FUNCTION';
- 特定のオブジェクトのみを監視する場合は、ワイルドカード (
%
) を慎重に使用してください。 - オブジェクトの監視を無効にしても、過去に収集されたイベントデータは削除されません。
setup_objects
テーブルの変更は、Performance Schema の再起動後にのみ有効になります。
特定のスキーマ内のすべてのテーブルを監視する
INSERT INTO performance_schema.setup_objects (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, ENABLED, TIMED)
VALUES ('TABLE', 'mydatabase', '%', 1, 1);
特定のテーブルのイベントタイミング計測を有効化する
以下の SQL 文を実行することで、mytable
テーブルのイベントタイミング計測を有効化できます。
UPDATE performance_schema.setup_objects
SET TIMED = 1
WHERE OBJECT_SCHEMA = 'mydatabase'
AND OBJECT_NAME = 'mytable';
すべての関数の監視を無効化する
以下の SQL 文を実行することで、すべての関数の監視を無効化できます。
UPDATE performance_schema.setup_objects
SET ENABLED = 0
WHERE OBJECT_TYPE = 'FUNCTION';
特定のプロシージャの監視を有効化する
以下の SQL 文を実行することで、myprocedure
プロシージャの監視を有効化できます。
INSERT INTO performance_schema.setup_objects (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, ENABLED, TIMED)
VALUES ('PROCEDURE', 'myschema', 'myprocedure', 1, 0);
すべてのトリガーのイベントタイミング計測を無効化する
以下の SQL 文を実行することで、すべてのトリガーのイベントタイミング計測を無効化できます。
UPDATE performance_schema.setup_objects
SET TIMED = 0
WHERE OBJECT_TYPE = 'TRIGGER';
- 特定のオブジェクトのみを監視する場合は、ワイルドカード (
%
) を慎重に使用してください。 - オブジェクトの監視を無効にしても、過去に収集されたイベントデータは削除されません。
setup_objects
テーブルの変更は、Performance Schema の再起動後にのみ有効になります。- 上記のコード例は、MariaDB 10.2.4 を対象としています。他のバージョンでは、構文が異なる場合があります。
MariaDB Performance Schema の setup_objects
テーブルは、監視対象のオブジェクトを制御する重要な役割を果たします。しかし、いくつかの制限があるため、状況によっては代替方法が必要になる場合があります。
制限事項
setup_objects
テーブルには、以下の制限事項があります。
- 複雑な設定: 特定の条件に基づいてオブジェクトを監視するには、複雑な SQL クエリを作成する必要があります。
- 静的な設定:
setup_objects
テーブルは、起動時にのみ読み込まれます。そのため、実行時に監視対象のオブジェクトを変更することはできません。 - 行数制限: デフォルトでは、
setup_objects
テーブルは最大 100 行までしか格納できません。多くのオブジェクトを監視する必要がある場合は、この制限が問題となる可能性があります。
代替方法
これらの制限を克服するために、setup_objects
テーブルの代替方法として以下の方法が考えられます。
PERFORMANCE_SCHEMA_OPTIONS 変数
PERFORMANCE_SCHEMA_OPTIONS
システム変数を設定することで、監視対象のオブジェクトを動的に制御できます。この変数は、起動時に設定する必要があり、以下のオプションが用意されています。
- user_defined_object_filters: 監視対象のオブジェクトをフィルタリングするための条件を指定します。
- user_defined_object_names: 監視対象のオブジェクト名を指定します。
- user_defined_object_types: 監視対象のオブジェクトの種類を指定します。
例: すべてのテーブルと myprocedure
プロシージャを監視するには、以下の設定を行います。
SET GLOBAL performance_schema_options = 'user_defined_object_types=TABLE,PROCEDURE;user_defined_object_names=myprocedure';
カスタム Performance Schema モジュール
独自の Performance Schema モジュールを作成することで、より柔軟な監視機能を実現できます。このモジュールは、監視対象のオブジェクトを動的に決定し、詳細なイベントデータを収集することができます。
サードパーティ製ツール
Several third-party tools can be used to monitor database performance and provide alternatives to the setup_objects
table. These tools typically offer more advanced features and flexibility compared to the built-in Performance Schema.
最適な方法を選択
setup_objects
テーブルの代替方法を選択する際には、以下の点を考慮する必要があります。
- サードパーティ製ツールのサポート: サードパーティ製ツールは、ライセンス費用やサポート体制などを考慮する必要があります。
- 技術的な専門知識: カスタム Performance Schema モジュールを作成するには、高度な技術的な知識が必要です。
- 監視要件: 監視対象のオブジェクトの種類と数、監視対象の条件などを考慮する必要があります。