2014/03/13

mysql show engine innodb status 見方


----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 34862552 スレッドがセマフォの配列に入ったOS待ち(OS wait)の回数
OS WAIT ARRAY INFO: signal count 116266440
==>signal countが配列に入ってOSからシグナルを受け取った回数です。後述しますが、この回数は少ないほど良いです。
Mutex spin waits 545963329, rounds 2602243608, OS waits 17985576
RW-shared spins 44035445, rounds 395257570, OS waits 8059822
RW-excl spins 19326255, rounds 500665340, OS waits 6158791
Spin rounds per wait: 4.77 mutex, 8.98 RW-shared, 25.91 RW-excl

==>
spin waitsはMutexのスピンロック待ちに入った回数、roundsはスピンロック待ちに入ったロックのスピンラウンド総数を示します。OS waitsはスピンロック待ちでもMutexを取得できなかったため、オペレーティングシステム管理下のセマフォに渡されたロック回数です。

innoDBはスピンロック待ち→OS待ちの順にロック取得を試みます。スピンロック待ちに入ったロックはinnodb_sync_spin_loopsで設定されたスピンラウンド数(取得待ち回数)を超えるとOS待ちに引き渡されます。OS待ちはスピン待ちに比べて処理コストが大きいので一般的にはOS待ち数が小さい方が好ましいです。OS待ちが多く発生している場合はディスクI/OかInnoDB内部でこれらロックに関する競合が発生している可能性が高いです。OS待ちが毎秒10000以上であればOS待ちを減らす方向でチューニングしましょう。MySQLのスレッド数の変更(innodb_thread_concurrency設定値)が効くと思います。



------------
TRANSACTIONS
------------
Trx id counter 0 80157601
Purge done for trx's n:o < 0 80154573 undo n:o < 0 0
History list length 6
Total number of lock structs in row lock hash table 0
LIST OF TRANSACTIONS FOR EACH SESSION:

★★Purge done for trx’s n:o
    is number of transaction to which purge is done. Innodb can only purge old versions if they there are no running transactions potentially needing them. Old stale uncommitted transactions may block purge process eating up resources