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

mysql:10013

From: ML account <ML account <ml@xxxxxxxxxx>>
Date: Fri, 13 Aug 2004 20:07:48 +0900
Subject: [mysql 10013] Re: データのロックについて

 こんにちは。

kuyo@xxxxxxxxxxさんの
<m3acx1gj1l.wl@xxxxxxxxxx>
"[mysql 10009] Re: データのロックについて"


> 松枝さんはこれ以上スレッドを伸ばすおつもりが無いようですが、
> ネタを振られたのでもう少しおつき合い願えますか。

 「もう少しおつき合い願えますか」それは結構ですけど、疲労感を与えない様
にお願いします。ずっと前の日本語フィールド名のスレッドでも分かると思いま
すが、ラチも無い(とボクが思う)話が続くと、ブチっと切れる可能性があります。
実際、既に切れかかっていますけどね。


> 「どのような実装があるか」という私の問いに対して教えて頂いた MSDE で検
> 証を行っていますが、私の予想とは異なる挙動になっています。

 「私の予想とは異なる挙動」とは、山本さんが正しいと信じ込んでいたのとは
異なる挙動となっている、ですね?

 [mysql 09988]で「InnoDB の挙動は SQL92の REPEATABLE READ の通りに動作
していると私は思いました」等と仰っているのですから、「私の予想とは異なる
挙動」等と持って回った言い方ではなく、

    MSDEの挙動は絶対におかしい!ぜーーーってーーー変!変、変、変!

とか言ってみるのが、男気があって非常に宜しいかと。


> 松枝さんが望む挙動は、「端末1 で commit された結果が時系列で直後の端末
> 2 の select の結果に反映する」と理解しました。(上記の私の予想がこの動
> 作です) 
> InnoDB では、「端末2 で commit しなければ端末2 の select に反映されず、
> 挙動が正しくない」と理解しました。

 不正確な理解だと思いますよ。

(A) non-transactonal read-op selectの結果が現状のDBの状況を正しく反映
    している
(B) transactonal read-op selectの全てで同一の結果が得られる

 ついでに、REPEATABLE READ分離レベルのキツさを考えれば、

(B-1) read-op selectを行うトランザクションの外部で、select結果に影響を与
      える操作は制限される(遅延等)。
(B-2) transactonal read-op selectで得られる結果と実際のDBの内容に一貫性
      がある(read-op selectで得られた結果が実際のDBの内容と似ても似つか
      ないインチキ結果ではない)。

 も考えるべきでしょう。


> また InnoDB と MSDE の挙動も異なりました。
> (MSDEでの私の検証結果の詳細はさしあたって伏せておきます)

 「異なりました」で済ませようとするのは如何なものでしょうね。何が理由で
実験結果を晒せないのですか?


> term1 :: set implicit_transactions on

 implicit_transactionsをonにした理由は何ですか?トランザクション/非トラ
ンザクションや REPEATABL READ分離レベルの動きを確認する場合に、そういう
夾雑物を突っ込んだ結果は元より、その思考や過程も信用なり確信なり出来るも
のですか?

−−−

 ボクが期待する所のMSDEの挙動とはこんなものです。デッドロックでどっちが
転けるか分からない、これは常々問題だろうとは思っていますが、ここでは関係
無い事です。

※ 準備、端末1
----------------------------------------------------------------
use test
set transaction isolation level repeatable read
delete from bbb
insert into bbb values(1)
go


※ 準備、端末2
----------------------------------------------------------------
use test
set transaction isolation level repeatable read
go


※端末1:non-transactional read-op select、端末2:update
 read-op selectで直近の変更が反映されている。

端末1                          |端末2
--------------------------------+--------------------------------
select * from bbb               |
go                              |
(select結果表示、ID=1)          |
                                |begin tran
                                |update bbb set ID=2 where ID=1
                                |go
select * from bbb               |
go                              |
(停止)                          |
                                |commit
                                |go
(select結果表示、ID=2)          |
(プロンプト戻る)                |
select * from bbb               |
(select結果表示、ID=2)          |


※端末1:transactional read-op select、端末2:update
 read-op selectで外部の更新が遅延させられる。

端末1                          |端末2
--------------------------------+--------------------------------
update bbb set ID=1             |
go                              |
begin tran                      |
go                              |
                                |begin tran
                                |go
select * from bbb               |
go                              |
(select結果表示、ID=1)          |
                                |update bbb set ID=2 where ID=1
                                |go
                                |(停止)
select * from bbb               |
go                              |
(select結果表示、ID=1)          |
select * from bbb               |
go                              |
(select結果表示、ID=1)          |
commit                          |
go                              |
                                |(プロンプト戻る)
select * from bbb               |
go                              |
(停止)                          |
                                |commit
                                |go
(select結果表示、ID=2)          |
(プロンプト戻る)                |


※端末1:transactional read-op select、端末2:update
 外部の非コミッテッドデータの存在により、read-op selectが遅延させられる。

端末1                          |端末2
--------------------------------+--------------------------------
update bbb set ID=1             |
go                              |
begin tran                      |
go                              |
                                |begin tran
                                |go
                                |update bbb set ID=2 where ID=1
                                |go
select * from bbb               |
go                              |
(停止)                          |
                                |commit
                                |go
(select結果表示、ID=2)          |
(プロンプト戻る)                |
select * from bbb               |
go                              |
(select結果表示、ID=2)          |
commit                          |
go                              |


※端末1/2:transactional read-op select+update
 read-op selectによるupdateの遅延、デッドロックを起こすupdateの発行によ
 る片方のトランザクションの終了(rollback)

端末1                          |端末2
--------------------------------+-------------------------------
update bbb set ID=1             |
go                              |
begin tran                      |
go                              |
                                |begin tran
                                |go
select * from bbb               |
go                              |
(select結果表示、ID=1)          |
                                |select * from bbb
                                |go
                                |(select結果表示、ID=1)
update bbb set ID=11 where ID=1 |
go                              |
(停止)                          |
                                |update bbb set ID=22 where ID=1
                                |go
                                |(停止)
(デッドロックによるアボート)    |(1件処理)
         <<<<<<上アボート/1件処理は逆の場合あり>>>>>>
(プロンプト戻る)                |(プロンプト戻る)
select * from bbb               |
go                              |
(停止)                          |
                                |select * from bbb
                                |go
                                |(select結果表示、ID=22)
                                |commit
                                |go
                                |
(select結果表示、ID=22)         |
(プロンプト戻る)                |
commit                          |
go                              |
(エラー、BEGIN TRANSACTION無し) |


    松枝知直    <tomom@xxxxxxxxxx>
            http://www.argus.ne.jp/~tomom/



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

      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]