sql >> データベース >  >> RDS >> Mysql

どのトランザクションがWaitingfortableメタデータロック状態を引き起こしているのかを見つけるにはどうすればよいですか?

    MySqlバージョン<5.7.3で動作

    SHOW ENGINE INNODB STATUS \G
    

    セクションを探す-

    TRANSACTIONS
    

    INFORMATION_SCHEMAを使用できます テーブル。

    便利なクエリ

    トランザクションが待機しているすべてのロックについて確認するには:

    USE INFORMATION_SCHEMA;
    SELECT * FROM INNODB_LOCK_WAITS;
    

    ブロッキングトランザクションのリスト:

    SELECT * 
    FROM INNODB_LOCKS 
    WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
    

    または

    SELECT INNODB_LOCKS.* 
    FROM INNODB_LOCKS
    JOIN INNODB_LOCK_WAITS
      ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
    

    特定のテーブルのロックのリスト:

    SELECT * FROM INNODB_LOCKS 
    WHERE LOCK_TABLE = db_name.table_name;
    

    ロックを待機しているトランザクションのリスト:

    SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
    FROM INNODB_TRX
    WHERE TRX_STATE = 'LOCK WAIT';
    

    参照 - MySQLのトラブルシューティング:クエリが機能しない場合の対処方法 、第6章-96ページ。



    1. ORA-12560:TNS:プロトコル・アダプタ・エラー

    2. C#:オブジェクトをDbNullから他のタイプにキャストすることはできません

    3. ユーザーがアクセスできないSQLデータベースを非表示にする方法

    4. Microsoft Accessテーブルのヒント–秘訣とガイドラインパート5