SHOW OPEN TABLESのまとめ
テーブルロックの状況確認に付いて。
構文
SHOW OPEN TABLES [FROM db_name] [LIKE 'tbl_name_pattern'];
カラムの意味
[test] > show open tables from test; +----------+-------+--------+-------------+ | Database | Table | In_use | Name_locked | +----------+-------+--------+-------------+ | test | t1 | 0 | 0 | +----------+-------+--------+-------------+ 1 row in set (0.00 sec)
- Database ... データベース名
- Table ... テーブル名
- In_use ... 現在のテーブルロックの要求数。0だと誰もlockしていない。1以上の数値のときはN人がロックしている状態。
- Name_locked ... DROP TABLEとかALTER TABLEとかのDDL文によりテーブルがロックされている場合は1。そうでなければ0。
つまり上記のt1テーブルはロックされていない。
ロックされている例(1人がロック獲得)
[test] > show open tables from test; +----------+-------+--------+-------------+ | Database | Table | In_use | Name_locked | +----------+-------+--------+-------------+ | test | t1 | 1 | 0 | +----------+-------+--------+-------------+ 1 row in set (0.00 sec)
ロックされている例(1人がロック獲得、1人がブロック待ち)
[test] > show open tables from test; +----------+-------+--------+-------------+ | Database | Table | In_use | Name_locked | +----------+-------+--------+-------------+ | test | t1 | 2 | 0 | +----------+-------+--------+-------------+ 1 row in set (0.00 sec)
補足
LOCK TABLES t1 READを複数セッションから発行すると、ロックされずにREADロックを取得でき、In_useはカウントアップされていく。
従って、In_useの値からREAD/READ LOCAL/WRITEのロックの種別を判別したり、ブロック待ちの人数を推定することはできない。