Information Schema INNODB_METRICS テーブルを活用したサンプルコード集


MariaDB の "Information Schema INNODB_METRICS Table" は、InnoDB エンジンのパフォーマンスとリソースに関する情報を提供するテーブルです。このテーブルは、データベースのパフォーマンスを監視し、潜在的な問題を特定するのに役立ちます。

テーブル構成

INNODB_METRICS テーブルは、以下の列で構成されています。

  • TIME_ELAPSED: カウンターが有効になってからの経過時間
  • TIME_ENABLED: カウンターが有効になった時刻
  • RESET_TIME: カウンターが最後にリセットされた時刻
  • MIN_COUNT: カウンターの最小値
  • AVG_COUNT: カウンターの平均値
  • SUM_COUNT: カウンターの合計値
  • MAX_COUNT: カウンターの最大値
  • COUNT: カウンターの値
  • SUBSYSTEM: カウンターのサブシステム
  • NAME: カウンターの名前

プログラミング例

以下の例は、INNODB_METRICS テーブルを使用して、InnoDB エンジンの読み取り操作に関する情報を取得する方法を示しています。

SELECT NAME, COUNT, TIME_ELAPSED
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE SUBSYSTEM = 'rw_ops';

このクエリは、読み取り操作の総数、現在の読み取り操作数、読み取り操作が有効になってからの経過時間を表示します。

INNODB_METRICS テーブルを使用して、以下の情報を取得することもできます。

  • メモリ使用量に関する情報
  • テーブルスキャンに関する情報
  • バッファリングに関する情報
  • ロックに関する情報
  • 書き込み操作に関する情報

プログラミングのヒント

  • INNODB_METRICS テーブルは、パフォーマンスに影響を与える可能性があるため、本番環境で使用する場合には注意が必要です。
  • INNODB_METRICS テーブルは、多くの情報を含んでいるため、クエリを実行する前に必要な情報のみを選択するようにしてください。
  • INNODB_METRICS テーブルは、動的に更新されます。そのため、クエリを実行するたびに、カウンターの値が変化する可能性があります。


例1:InnoDBエンジン全体の読み取り/書き込み操作のカウント

SELECT
  SUBSYSTEM,
  COUNT,
  MAX_COUNT,
  AVG_COUNT,
  MIN_COUNT
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE SUBSYSTEM IN ('rw_ops', 'r_ops', 'w_ops');

このクエリは、InnoDBエンジン全体の読み取り操作と書き込み操作に関する情報を取得します。具体的には、各操作の合計数、最大数、平均数、最小数を表示します。

例2:特定のテーブルにおける読み取り/書き込み操作のカウント

SELECT
  NAME,
  SUBSYSTEM,
  COUNT,
  MAX_COUNT,
  AVG_COUNT,
  MIN_COUNT
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE NAME LIKE '%your_table_name%'
  AND SUBSYSTEM IN ('rw_ops', 'r_ops', 'w_ops');

上記のクエリを修正することで、特定のテーブルにおける読み取り/書き込み操作のカウントを調べることができます。your_table_nameを実際のテーブル名に置き換えてください。

SELECT
  NAME,
  COUNT,
  MAX_COUNT,
  AVG_COUNT,
  MIN_COUNT
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE SUBSYSTEM IN ('buffer_pool', 'buffer_pool_pages_free', 'buffer_pool_pages_dirty');

例4:ロックに関する情報の取得

SELECT
  NAME,
  COUNT,
  MAX_COUNT,
  AVG_COUNT,
  MIN_COUNT
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE SUBSYSTEM IN ('mutex_os', 'rw_locks', 'record_locks');

このクエリは、InnoDBエンジンにおけるロックに関する情報を取得します。OSレベルのミューテックス、読み書きロック、レコードロックの使用状況を確認できます。

例5:特定のスレッドIDにおける情報収集

SELECT
  NAME,
  SUBSYSTEM,
  COUNT,
  MAX_COUNT,
  AVG_COUNT,
  MIN_COUNT
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE TRX_ID = your_thread_id;

上記のクエリを修正することで、特定のスレッドIDにおける情報のみを収集することができます。your_thread_idを実際のスレッドIDに置き換えてください。

  • 大量のデータを取得する場合は、パフォーマンスへの影響に注意する必要があります。
  • INNODB_METRICS テーブルは、動的に更新されるため、クエリ実行時のデータと実際の状況が異なる場合があります。
  • 上記の例はあくまで基本的なものであり、状況に合わせて自由に修正・追加することができます。


特定の条件で絞り込む

WHERE句を活用することで、特定の条件に合致するデータのみを取得することができます。例えば、以下のクエリは、読み取り操作のカウントが10000を超えた場合のみ表示します。

SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE SUBSYSTEM = 'r_ops' AND COUNT > 10000;

集計関数を利用する

SUM(), AVG(), MAX(), MIN()などの集計関数を利用することで、データを集計して分析することができます。例えば、以下のクエリは、各サブシステムにおける読み取り/書き込み操作の合計数を表示します。

SELECT SUBSYSTEM, SUM(COUNT) AS total_count
FROM INFORMATION_SCHEMA.INNODB_METRICS
WHERE SUBSYSTEM IN ('rw_ops', 'r_ops', 'w_ops')
GROUP BY SUBSYSTEM;

サブクエリを活用する

サブクエリを活用することで、より複雑な条件を設定することができます。例えば、以下のクエリは、読み取り操作のカウントが最も多いテーブルを特定します。

SELECT table_name
FROM information_schema.tables t
JOIN (
  SELECT NAME, MAX(COUNT) AS max_count
  FROM INFORMATION_SCHEMA.INNODB_METRICS
  WHERE SUBSYSTEM = 'r_ops'
  GROUP BY NAME
) m ON t.table_name = m.NAME;

結果をCSV形式で出力する

INTO OUTFILE句を活用することで、クエリ結果をCSV形式でファイルに出力することができます。

SELECT *
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM INFORMATION_SCHEMA.INNODB_METRICS;

モニタリングツールを活用する

MySQL WorkbenchやphpMyAdminなどのツールを活用することで、Information Schema INNODB_METRICSテーブルを視覚的に操作することができます。これらのツールは、データの可視化、フィルタリング、分析などに役立ちます。