mysql:8469
From: "HIROSE, Masaaki" <"HIROSE, Masaaki" <hirose31@xxxxxxxxxx>>
Date: Wed, 10 Dec 2003 19:08:27 +0900
Subject: [mysql 08469] Re: innoDB の行排他ロックについて
ひろせといいます on "[mysql 08467] Re: innoDB の行排他ロックについて" <20031210182858.3dd29611.tommy@xxxxxxxxxx> at Wed, 10 Dec 2003 18:28:58 +0900 とみたまさひろ <tommy@xxxxxxxxxx> wrote: > > MySQLで大量データを持つ表に対しある処理で一部レコードを更新 > > しながら別の処理で他のレコードを更新することが実現可能か > > どうかの調査を行っており、Oracleでの開発を行った経験から > > 双方の処理で行の排他ロックを掛ける必要があると思っています。 > > > > しかし、以下の図の様に選択した行以外の行排他ロックを行おう > > としてもロック待ちが発生してしまいます。 > > テーブルロックがかかっているかの様です。 > > テーブルはどのようにして作成したのでしょうか。 > > 手元の環境(Linux + MySQL 4.0.15)では、次のように作成したテーブルで期待 > 通りに動きました。 > > create table a (keyno int, dat1 int, dat2 int, unique (keyno)) type=innodb; RHL7.3 に MySQL AB 提供の rpm をインストールした mysql> select version(); +---------------------+ | version() | +---------------------+ | 4.0.16-standard-log | +---------------------+ なマシンで mysql> show create table a\G *************************** 1. row *************************** Table: a Create Table: CREATE TABLE `a` ( `keyno` int(11) default NULL, `dat1` int(11) default NULL, `dat2` int(11) default NULL ) TYPE=InnoDB なテーブルで試してみましたが、私もとみたさんと同様、期待通りに動きまし た。 // レコード数が多かろうが少なかろうが、 > > MySQLで大量データを持つ表に対しある処理で一部レコードを更新 ^^^^^^^^^^^^ > > しながら別の処理で他のレコードを更新することが実現可能か ^^^^^^^^^^^^ 処理 1 と処理 2 の更新対象レコードが独立ならば、更新処理同士の競合回避 という点で SELECT 〜 FOR UPDATE は必要ないし、恐らくトランザクション処 理も必要ないのではないかと思うのですが、実際の処理内容はもっと複雑なの でしょうか? それと > > どうかの調査を行っており、Oracleでの開発を行った経験から > > 双方の処理で行の排他ロックを掛ける必要があると思っています。 Oracle でどいう問題があったのかも気になります。 ではでは -- ひろせ
8466 2003-12-10 14:40 ["江口" <eguchi@xxxxx] innoDB の行排他ロックについて 8467 2003-12-10 18:28 ┗[とみたまさひろ <tomm] 8468 2003-12-10 18:58 ┣["江口" <eguchi@xxxxx] 8471 2003-12-10 19:10 ┃┗["江口" <eguchi@xxxxx] -> 8469 2003-12-10 19:08 ┗["HIROSE, Masaaki" <h] 8472 2003-12-10 19:22 ┣["HIROSE, Masaaki" <h] 8483 2003-12-11 15:28 ┗["江口" <eguchi@xxxxx]