0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MySQL】Performance Schema DB について - メタデータロック監視の完全ガイド

Posted at

概要

Performance Schema は MySQL 5.5 以降で導入されたパフォーマンス監視・診断機能です。

MySQLサーバーが自動的に作成・管理するシステムデータベースで、リアルタイムでサーバーの内部動作を監視できるメタデータロックの確認が可能です。

メタデータロックの確認方法

メタデータロックテーブルの取得は以下のクエリで実行できます:

SELECT * FROM performance_schema.metadata_locks;

テーブルの各カラムについて

基本情報カラム

1. OBJECT_TYPE

メタデータロックの対象となるオブジェクトの種類

説明
TABLE テーブル
SCHEMA データベーススキーマ
GLOBAL グローバルロック
TABLESPACE テーブルスペース
USER LEVEL LOCK ユーザー定義ロック

2. OBJECT_SCHEMA

ロック対象のオブジェクトが属するデータベース名

  • 値の例: minne_production, information_schema など
  • NULL: グローバルロックの場合

3. OBJECT_NAME

ロック対象の具体的なオブジェクト名

  • 値の例: campaigns, users, campaign_restrictions など(テーブル名)
  • NULL: スキーマレベルのロックの場合

4. COLUMN_NAME

ロック対象のカラム名(カラムレベルロックの場合)

  • 通常: NULL(テーブルレベルロックが一般的)

5. OBJECT_INSTANCE_BEGIN

オブジェクトのメモリアドレス(内部識別用)

  • 用途: 同一名の異なるオブジェクトインスタンスを区別
  • 通常: 数値のメモリアドレス

⭐️ 重要な監視項目

6. LOCK_TYPE(ロックの種類)

メタデータロックの種類

ロックタイプ 説明 危険度
SHARED_READ 読み取り用共有ロック
SHARED_WRITE 書き込み用共有ロック
SHARED_UPGRADE アップグレード用共有ロック
EXCLUSIVE 排他ロック(最も強い)
INTENTION_EXCLUSIVE 排他意図ロック

7. LOCK_DURATION(ロック保持期間)

ロックの保持期間

期間 説明 影響度
STATEMENT ステートメント実行中のみ
TRANSACTION トランザクション終了まで 中〜高
EXPLICIT 明示的に解放されるまで 非常に高

8. LOCK_STATUS(ロック状態)

ロックの現在の状態

ステータス 説明 対応の緊急度
GRANTED ロック取得済み 通常
PENDING ロック待機中 🚨 要注意
VICTIM デッドロック検出でキャンセル対象 🚨 緊急

その他の診断情報

9. SOURCE

ロックを要求したソースコードの場所

  • 値の例: sql_parse.cc:6031 など
  • 用途: デバッグ・トラブルシューティング

10. OWNER_THREAD_ID

ロックを保持しているスレッドのID

  • 用途: performance_schema.threads テーブルと結合してプロセス情報を取得

11. OWNER_EVENT_ID

ロックを取得したイベントのID

  • 用途: パフォーマンススキーマでの詳細な分析

実践的な監視クエリ例

ロック待機の検出

SELECT 
    OBJECT_SCHEMA,
    OBJECT_NAME,
    LOCK_TYPE,
    LOCK_DURATION,
    LOCK_STATUS,
    OWNER_THREAD_ID
FROM performance_schema.metadata_locks 
WHERE LOCK_STATUS = 'PENDING';

長時間保持されているロック

SELECT 
    ml.*,
    t.THREAD_ID,
    t.PROCESSLIST_ID,
    t.PROCESSLIST_USER,
    t.PROCESSLIST_HOST
FROM performance_schema.metadata_locks ml
JOIN performance_schema.threads t ON ml.OWNER_THREAD_ID = t.THREAD_ID
WHERE LOCK_DURATION = 'TRANSACTION'
AND LOCK_STATUS = 'GRANTED';

まとめ

Performance Schema の metadata_locks テーブルを活用することで:

  • リアルタイムでのロック状況監視
  • パフォーマンスボトルネックの早期発見
  • デッドロック問題の原因特定
  • データベース運用の最適化

が可能になります。

特に LOCK_STATUS = 'PENDING' の状態を定期的に監視することで、深刻なパフォーマンス問題を未然に防ぐことができます。

大規模なWEBアプリケーションにおけるマイグレーション実行時などは考慮する必要がありますので、頭の片隅に置いておくと良いでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?