MySQL はMyISAM とMEMORY テーブルにはテーブルレベルロック
を使用し、InnoDBテーブルには行レベルロックを使用します。
Table_locks_waitedおよびTable_locks_immediateステータス変数を
チェックすることでシステム上でテーブルロック競合を分析できます。

mysql> SHOW STATUS LIKE ‘Table%’;
+———————–+——-+
| Variable_name | Value |
+———————–+——-+
| Table_locks_immediate | 19 |
| Table_locks_waited | 0 |
+———————–+——-+
2 rows in set (0.01 sec)

mysql>

InnoDBは行ロックを使用する。InnoDBでは、SQLステートメントの
トランザクションの初めではなく、プロセス中に自動的に入手するため、
デッドロックが可能です。

行レベルロックの利点
* 多数のスレッドで異なる行をアクセスする際に、ロックコンフリクトが少なくてすみます。
* ロールバックの変更がすくなくてすみます。
*1つの行を長時間ロックすることが可能です。

http://dev.mysql.com/doc/refman/5.1/ja/internal-locking.html

Comments are closed.

Post Navigation