テーブルロックについて。
ロックはUNLOCK TABLESコマンドが、クライアントから実行された時にリリースされる。

※ クライアントが他のロックをLOCK TABLESによって取得リクエストをかけた時
※ 接続を切断した時
※ ABORTされた時(KILLコマンドなど)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MYSQLでのロック動作確認
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
mysql> LOCK TABLES company READ; LOCK TABLES innodb_monitor write;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

※ このクエリーだとcompanyは直ぐにリリースされて、innodb_monitorのみロックされる。

mysql>

mysql> LOCK TABLES company READ,innodb_monitor write;
Query OK, 0 rows affected (0.00 sec)

mysql>

■ mysql>SELECT * FROM innodb_monitor; 
  ここで別のクライアントからselectしたら他のプロセスのwrite lockにて待たされる。

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql>

■ mysql>SELECT * FROM innodb_monitor;
  ロックが解放されたので、select結果が表示される。

Comments are closed.

Post Navigation