MySQL “SHOW ENGINE INNODB STATUS”の読み方 その2

kouです。
だいぶ間が空いてしまいましたが、続きを書いてみたいと思います。
トランザクションセクション

14 ------------
15 TRANSACTIONS
16 ------------
17 Trx id counter 0 487637614
18 Purge done for trx's n:o < 0 487637607 undo n:o < 0 0 19 History list length 1 20 Total number of lock structs in row lock hash table 0 21 LIST OF TRANSACTIONS FOR EACH SESSION: 22 ---TRANSACTION 0 0, not started, process no 3424, OS thread id 1169332544 23 MySQL thread id 11166, query id 14476345 localhost root 24 SHOW ENGINE INNODB STATUS 25 ---TRANSACTION 0 487637613, ACTIVE 4799 sec, process no 3424, OS thread id 1089030464 starting index read, thread declared inside InnoDB 239 27 mysql tables in use 2, locked 0 28 MySQL thread id 10794, query id 14474613 172.16.xx.xx batch Sending data 29 SQL文(省略) 30 Trx read view will not see trx with id >= 0 487637614, sees < 0 487637614

このセクションには現在実行中のトランザクションに関する情報が出力されます。
17行目のTrx id counterは現在のトランザクションIDカウンターの値を表します。これはトランザクション毎に発行されインクリメントされていきます。”0″と”487637607″と数値が二つありますが、上位32ビットと下位32ビットで区切られているためです。以下のその他の数値も同様です。
18行目のPurge done for trx’s n:0はどこまでロールバックセグメントのパージ処理が終わったかを示しています。ここではトランザクションID “487637607”までのパージが終わっています。InnoDBはマルチバージョニングデータベースであるため古いバージョンのレコード情報を保持しています。レコード削除した場合でもストレージエンジン内ではすぐにレコードは物理削除されず、削除フラグが立った状態です。この削除フラグが立ったレコードは適切なタイミングでパージされます。ここでは”487637607″までパージされたことを示しています。
undo n:oはUNDOログのレコード数を示していて現在は”0″です。
19行目のHistory list lengthはロールバックセグメントでまだパージされていないヒストリ数です。
21行目からは個々のトランザクションの状態が表示されています。
この例ではトランザクションが二つです。22?24行目、25?30行目がそれぞれのトランザクションです。
22?24行目のトランザクションはこのコマンド(SHOW ENGINE INNODB STATUS)を発行している自身のトランザクションです。25?30行目が実際に発行されているSQLのトランザクションになります。
ここでは25?30行目のトランザクションをみていきます。
25行目のTRANSACTION 0 487637613は当トランザクションIDです。ACTIVE 4799 secはこのトランザクションのステータスと生存時間です。”Active”となっていますので、現在処理中です。重たいクエリを発行していますので大変時間がかかっています。
process no 3432はOSのプロセス番号、OS thread id 1089030464 starting index readはOSのスレッドIDでインデックスデータを読み込んでいます。gdbなどでデバッグする際にこれらの情報が役に立ちます。
thread declared inside InnoDB 239はInnoDB内部でのスレッド割当状況です。
27行目のmysql tables in use 2, locked 0はこのトランザクションが利用しているテーブル数(”2″)と取得しているロックの数(”0″)を示します。
28行目のMySQL thread id 10794, query id 14474613はこのクエリ(”14474613″)がどのスレッド(”10794″)で実行されているかを表示しています。SHOW PROCESSLISTで表示される情報と同様です。
29行目は実際に実行されているSQL文を表示。
30行目のTrx read view will not see trx with id >= 0 487637614はこのトランザクション開始後に開始されたトランザクションIDです。またsees < 0 487637614はこのトランザクション開始前に終了していたトランザクションです。利用しているトランザクション分離レベルと前後のトランザクションの情報からこのトランザクション内でどのようなデータの見え方をしているかが推測できるため、トラブルシュート時に役立つことがあるかもしれません。
「その3」へ続く。
参考サイト/書籍:
MySQL Performance Blog – SHOW INNODB STATUS walk through
MySQL 5.0 Reference Manual – 13.2.13.2. SHOW ENGINE INNODB STATUS and the InnoDB Monitors
実践ハイパフォーマンスMySQL 第2版


Comments are closed.