こんにちは、mixi開発部にてアプリケーション開発をしていますyouheiです。
今回は、MySQL-5.0.45のInnoDBで連番を管理するテーブルのパフォーマンス測定をしていたのですが、その際に少し変わったデッドロック問題に遭遇しましたので、そのあたりをネタとして書いてみたいと思います。
まずは、今回使用したデータベースのスキーマは下記のようなものです。
CREATE TABLE num ( id bigint unsigned NOT NULL default '0' ) Engine=InnoDB;
AUTO_INCREMENTは使用していません。
そこに1レコードだけ登録します。
INSERT INTO num (id) values (1);
そして実際連番を取得する際には、
UPDATE num SET id = LAST_INSERT_ID(id+1);
…
[さらに読む]