[前][次][番号順一覧][スレッド一覧]

mysql:9956

From: EBIHARA Yuichiro <EBIHARA Yuichiro <uiebi@xxxxxxxxxx>>
Date: Fri, 6 Aug 2004 11:44:19 +0900 (JST)
Subject: [mysql 09956] Re: データのロックについて

海老原です。

松枝さん、リプライどうもありがとうございます。

> (2) テーブルBBBのintフィールドIDに1が入っていて、
>   端末1:"update BBB set ID=2 where ID=1"
>   端末1:"commit"
> をAUTOCOMMIT=0で行った場合、端末1からselectで見るIDの値は2、端末2で
> 見る値は1の様に不整合が生じる場合がある。
> 
>  今やった所、(1)は再現出来なかったのですが、(2)がWinで再現されてしま
> いました。どうすれば確実に再現出来るのかは、ちょっとわかりませんけど。
> selectの後に commitが必要な場合がある等、もう訳が分かりません。

[09953][09954]も拝見しましたが、Repeatable Readだから結果としては正しい結
果ですよね。
松枝さんが、SELECTでトランザクションが開始されてしまう点に違和感を感じる
のは分からなくはないですが、set autocommit=0 で暗黙的にトランザクションが
開始するということなんでしょう。

ちなみに当方ではOracleから来た人が戸惑わないよう、mysqld起動オプションで
  transaction-isolation=READ-COMMITTED
  autocommit=0
を設定の上で、基本的にInnoDBを使え、と言っています。(厳密には言う予定)

>   Webベースシステムでありがちな、同じIDで複数の接続を行う場合、テーブ
> ルロックは効きません。排他ロックでも、他の接続で読めちゃうし、書き込め
> ちゃいますね。 Oracle8.0.5、8iなWin/Solarisで確認。
> 
>  Oracleでテーブルロックなんてあまり使わないでしょ?だからじゃないです
> か、聞いた事が無い、と言うのは。

読めちゃうのは当然ですけど、書き込めちゃうのは困りもんですね。
INSERT/UPDATE/DELETEは行ロックのほかに表ロックも獲得するはずですから。

>  随分前の話ですけど、OracleMaster(Gold)な人がテーブルロックを使う設計
> をしてて、「それマズイよ」とちょいと言ったら「そんな馬鹿な話は無いです
> よ!ちゃんと動きます!」と凄い剣幕。で、実際に見せたら、ショックを受け
> たみたいですね。まあ、接続単位ではなくて接続ID単位でロックが有効にな
> る、ってだけの話でしょうが、 そのOracleMasterな人も接続ID単位でとは思
> っていなかったみたいですね。

僕もそれ見せられたら同様のショックを受けますね。
仕様的にはあり得ないので、もし本当ならバグだと思いますが、OracleのMLじゃ
ないので深く追究するのはやめにしておきます。

> > いわゆる楽観的ロックというやつですよね。
> > ただ、この場合にもトランザクションやロックによる排他制御が不要かと言
> > うとそんなことはなくて、単にロックを保持する期間を非常に短くできる、
> > という程度のことだと理解しています。
> 
>  チェックと更新をアトミックな1クエリで出来るならば、ロックやトランザ
> クションは不要ですね。例えば、"update .... where CheckFld=[元の
> CheckFldの値 ]"の様な感じで。アトミック・トランザクションもトランザク
> ションでしょ!がご主張ならば、はぁ左様で、ですけど。

まあそういう主張です。
結局はUPDATE文の更新行数を見て、0行だったらエラーを返すのであれば、それは
楽観的ロックの実装がちょっと違うだけだと思いますんで。
そもそも更新が複数のテーブルにまたがることもありますし。

--
海老原 雄一郎

[前][次][番号順一覧][スレッド一覧]

      9940 2004-08-04 13:17 ["Mamiya Masataka" <x] データのロックについて                  
      9943 2004-08-05 10:06 ┣["Mamiya Masataka" <x]                                       
      9944 2004-08-05 10:36 ┗[ML account <ml@xxxxx]                                       
      9945 2004-08-05 11:26  ┣[seiji takegata <take]                                     
      9946 2004-08-05 13:30  ┃┣[ML account <ml@xxxxx]                                   
      9949 2004-08-05 15:24  ┃┃┗[EBIHARA Yuichiro <ui]                                 
      9951 2004-08-05 23:09  ┃┃ ┗[ML account <ml@xxxxx]                               
      9952 2004-08-05 23:19  ┃┃  ┣["TAKAHASHI, Tomohiro]                             
      9953 2004-08-06 05:37  ┃┃  ┃┗[ML account <ml@xxxxx]                           
      9954 2004-08-06 05:51  ┃┃  ┃ ┗[ML account <ml@xxxxx]                         
      9955 2004-08-06 11:25  ┃┃  ┃  ┗["HIROSE, Masaaki" <h]                       
      9957 2004-08-06 13:30  ┃┃  ┃   ┗[ML account <ml@xxxxx]                     
      9958 2004-08-06 14:04  ┃┃  ┃    ┣[SUGAWARA Hajime <sug]                   
      9959 2004-08-06 14:17  ┃┃  ┃    ┣[とみたまさひろ <tomm]                   
      9960 2004-08-06 16:50  ┃┃  ┃    ┗["HIROSE, Masaaki" <h]                   
      9962 2004-08-07 16:49  ┃┃  ┃     ┗[ML account <ml@xxxxx]                 
      9969 2004-08-09 18:24  ┃┃  ┃      ┣[<kuyo@xxxxxxxxxx>   ]               
      9970 2004-08-10 00:20  ┃┃  ┃      ┃┗["akira" <akrst@xxxxx]             
      9975 2004-08-10 09:30  ┃┃  ┃      ┃ ┗[ML account <ml@xxxxx]           
      9976 2004-08-10 10:48  ┃┃  ┃      ┃  ┣["TAKAHASHI, Tomohiro]         
      9997 2004-08-11 13:03  ┃┃  ┃      ┃  ┗[<akrst@xxxxxxxxxx>  ]         
      9983 2004-08-10 18:28  ┃┃  ┃      ┣[とみたまさひろ <tomm]               
      9987 2004-08-10 20:28  ┃┃  ┃      ┃┗[ML account <ml@xxxxx]             
      9988 2004-08-10 21:26  ┃┃  ┃      ┃ ┣[<kuyo@xxxxxxxxxx>   ]           
      9994 2004-08-11 11:38  ┃┃  ┃      ┃ ┃┗[ML account <ml@xxxxx]         
     10004 2004-08-12 01:03  ┃┃  ┃      ┃ ┃ ┗[Tomoyuki Ishino <ish]       
     10006 2004-08-12 08:54  ┃┃  ┃      ┃ ┃  ┗[ML account <ml@xxxxx]     
     10012 2004-08-13 12:52  ┃┃  ┃      ┃ ┃   ┗[Tomoyuki Ishino <ish]   
     10014 2004-08-13 20:08  ┃┃  ┃      ┃ ┃    ┗[ML account <ml@xxxxx] 
      9989 2004-08-10 23:39  ┃┃  ┃      ┃ ┗[とみたまさひろ <tomm]           
      9992 2004-08-11 10:54  ┃┃  ┃      ┃  ┣["Tomo Ikehara" <tomo]         
      9995 2004-08-11 12:08  ┃┃  ┃      ┃  ┃┣["TAKAHASHI, Tomohiro]       
     10001 2004-08-11 16:16  ┃┃  ┃      ┃  ┃┃┣["TAKAHASHI, Tomohiro] Re: データのロックについて(余談:START TRANSACTION)
     10003 2004-08-12 00:51  ┃┃  ┃      ┃  ┃┃┃┗[とみたまさひろ <tomm]   
     10011 2004-08-13 11:06  ┃┃  ┃      ┃  ┃┃┗["Tomo Ikehara" <tomo]     
      9999 2004-08-11 15:40  ┃┃  ┃      ┃  ┃┗[EBIHARA Yuichiro <ui]       
     10017 2004-08-13 22:42  ┃┃  ┃      ┃  ┃ ┗["Tomo Ikehara" <tomo]     
      9993 2004-08-11 11:38  ┃┃  ┃      ┃  ┗[ML account <ml@xxxxx]         
     10000 2004-08-11 15:53  ┃┃  ┃      ┃   ┣[EBIHARA Yuichiro <ui]       
     10008 2004-08-12 10:30  ┃┃  ┃      ┃   ┃┗[ML account <ml@xxxxx]     
     10009 2004-08-12 11:57  ┃┃  ┃      ┃   ┃ ┗[<kuyo@xxxxxxxxxx>   ]   
     10013 2004-08-13 20:07  ┃┃  ┃      ┃   ┃  ┗[ML account <ml@xxxxx] 
     10016 2004-08-13 22:02  ┃┃  ┃      ┃   ┃   ┣[とみたまさひろ <tomm]   
     10018 2004-08-14 19:58  ┃┃  ┃      ┃   ┃   ┗[<kuyo@xxxxxxxxxx>   ]   
     10005 2004-08-12 01:32  ┃┃  ┃      ┃   ┗[とみたまさひろ <tomm]       
     10010 2004-08-13 01:25  ┃┃  ┃      ┗["HIROSE, Masaaki" <h]               
->    9956 2004-08-06 11:44  ┃┃  ┗[EBIHARA Yuichiro <ui]                             
      9974 2004-08-10 09:30  ┃┃   ┗[ML account <ml@xxxxx]                           
      9982 2004-08-10 16:41  ┃┃    ┗[EBIHARA Yuichiro <ui]                         
      9986 2004-08-10 20:25  ┃┃     ┗[ML account <ml@xxxxx]                       
      9950 2004-08-05 16:20  ┃┗[HAMAI Kyoichi <k-ham]                                   
      9947 2004-08-05 13:35  ┗["Mamiya Masataka" <x]                                     
      9948 2004-08-05 15:03   ┗[ML account <ml@xxxxx]