キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
<< インドカツカレー@新橋カリカル | main | [勝手に補足]DBアタマアカデミー第2回トランザクションを知ればデータベースがわかる + Firebird >>
[勝手に補足]DBアタマアカデミー第2回トランザクションを知ればデータベースがわかる
0
    WEB+DB PRESS Vol.58はでかでかとRails 3と特集が組まれ、Rails関連者にはもはや必須となっている感があります。

    WEB+DB PRESS Vol.58
    WEB+DB PRESS Vol.58


    しかしながら、Railsでは冷やかししかできない私は、しずしずとミックさんの連載「DBアタマアカデミー」を読み解くのでした。さすがにミックさん、うまくまとめていらっしゃる。軽快、明白な説明に納得です。トランザクションの入門に、是非参照してみてください。

    しかしながら、トランザクションは各DB実装毎に考え方が違い、有る意味「実装の闇」でもある部分です。そのため概論では、これで十分ですが、いくつか「闇」部分も勝手に補足いたします。

    (1) 表1 DBMS別トランザクション開始/終了コマンド

    PostgreSQLはBEGIN WORKも開始コマンドとして使えます。
    またMySQLはBEGINのみとBEGIN WORKでも開始することができます。つまり、BEGIN WORKはPostgreSQLとMySQLで使えるということになります。

    (2) いい加減であることの代償は?

    P0: ダーティライト
    P4: ロストアップデート

    というのもありますよー。というのをこっそり補足。
    詳細は以下のエントリと、そこからのリンクを参照のこと。

    失われた更新(Lost Update)

    (3) 表4 DBMSと分離レベルの対応

    ここが一番悩ましいところ、ですが、明確なところから補足。

    (a) MySQL(InnoDB)のデフォルト値が違う

    表ではMySQL(InnoDB) コミット読み取り(READ COMMITTED)がデフォルト◎になっていますが、正しくは再読込可能読み取り(REPEATABLE READ)です。もしくは、mysqlサーバ起動時に--ansiオプションを指定することにより、直列化可能(SERIALIZABLE)で起動します。いずれにせよ、コミット読み取りではありません。

    (b) Oracleには再読込可能読み取り(REPEATABLE READ)はない?

    Oracleはコミット済み読み取りと直列化可能しかないと、よく言われますが、実は微妙な立ち位置でREPEATABLE READが実装されています。それがREAD ONLYです。READ ONLYでは当然INSERT/UPDATE/DELETEはできませんが、動作としてはREPEATABLE READと同様にトランザクション開始時の値を何度も読みとることができます。この点で△にして、表に入れてもよいと思います。

    こことか、後述するSQL Serverのドキュメントがわかりやすいです。

    (3) DB2の名称がANSIと違いわかりにくい〜
     これはミックさんのせいではありませんし、ミックさんの記述で正しいのですが、DB2のトランザクションとマップしようとすると混乱します。まぁ
    以下のドキュメントを見てください。

    DB2: 分離レベルの指定方法について

    ざっくりいうと以下のようになります。

    ISO        DB2
    SERIALIZABLE   REPEATABLE READ(RR)
    REPEATABLE READ READ STABILITY(RS)
    READ COMMITTED  CURSOR STABILITY(CS), CURRENTLY COMMITTED    
    READ UNCOMMITTED UNCOMMITTED READ(UR)

    しかしながら、先ほど参照したIBMの資料にもあるように、省略形で指定する
    場合の違いもあるので、IBM DB2では間違いないように省略形で指定するほうがよいでしょう。例えばISOでいうところのSERIALIZABLEを指定するのに、
    DB2の用語ではREPEATABLE READ(RR)ですが、以下の分離レベルのところには
    "RR", "SERIALIZABLE"または"REPEATABLE READ"が指定できます。

    SET CURRENT ISOLATION 分離レベル

    そして、現在の設定値を知るためのコマンドではRRが戻ってくるためです。

    values current isolation

    密かに上記の表ではCURRENTLY COMMITTEDを追加していますが、これは(4)
    でまとめて説明します。

    (4) コミット読み取り(READ COMMITTED)の全ての道はOracleに通じる

    もともとMS SQL ServerとIBM DB2のコミット読み取り(READ COMMITTED)
    の動作(主にロック関連)はOracleのものとは違っていました。それぞれOracleからの互換性、つまりOracleからのそれぞれのデータベースへの移行をスムーズにするために新しいモードを生成しました。

    MS SQL Serverの場合はREAD_COMMITTED_SNAPSHOTというパラメタ
    IBM DB2の場合はCUR_COMMITというパラメタで既存の動作と、新しい動作を切り替えることができます。

    トランザクションとロックは各データベース毎に違いがありますので、まずはご自分が使われているデータベースの仕組みをしっかり押さえてから、他のデータベースを参照するとよいでしょう。

    えっとミックさんが触れてくれないFirebirdについては、次回勝手に補足いたします(笑)

    [2010-11-07 追記]

    (3)-(a) が以下のサイトで訂正・公開されました。
    WEB+DB PRESS Vol.58 サポートページ
    | meijik | クロスデータベース | 16:52 | comments(1) | trackbacks(0) | - | - |
    MySQLのデフォルト値は、明らかな間違いですね。ご指摘ありがとうございます。早速技術評論社にも修正依頼を出しておきます。
    | ミック | 2010/09/05 11:19 PM |









    トラックバック機能は終了しました。
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
    << August 2020 >>
    + RECOMMEND
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

    100人のうちの一人としてミックさんの本を推薦しています。
    + RECOMMEND
    MySQL 5.1 Plugin Development
    MySQL 5.1 Plugin Development (JUGEMレビュー »)
    Andrew Hutchings,Sergei Golubchik
    MySQL 5.1 のプラグインを作るならこれ!
    + RECOMMEND
    AWKを256倍使うための本 (Ascii 256倍)
    AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
    志村 拓,鷲北 賢,西村 克信
    ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
    + RECOMMEND
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
    松信 嘉範
    Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
    + RECOMMEND
    + RECOMMEND
    超・極める!MySQL
    超・極める!MySQL (JUGEMレビュー »)
    坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
    内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
    + RECOMMEND
    The Root of .NET Framework
    The Root of .NET Framework (JUGEMレビュー »)
    荒井 省三
    .NETの根っこをつかむ、か?
    + RECOMMEND
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
    奥野 幹也
    これまでにない構築、そして構築後のMySQLのための本。
    + RECOMMEND
    Database Management Systems
    Database Management Systems (JUGEMレビュー »)
    Raghu Ramakrishnan,Johannes Gehrke
    ミックさん連載の参考書籍です。
    + RECOMMEND
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
    W. Richard Stevens,Stephen A. Rago
    必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
    + RECOMMEND
    + RECOMMEND
    + RECOMMEND
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

    DELL SX260の換装用に購入。今はコチラのほうが安いですね。
    + RECOMMEND
    情熱プログラマー ソフトウェア開発者の幸せな生き方
    情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
    Chad Fowler
    OSC2010神戸に出展されたジュンク堂で買いました。
    + RECOMMEND
    Software Design 総集編 【2000~2009】(DVD付)
    Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

    メガトン級の過去記事。売り切れる前にお店に急げ!
    + RECOMMEND
    + RECOMMEND
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

    Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
    + RECOMMEND
    + RECOMMEND
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

    色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
    + RECOMMEND
    Firebird 徹底入門
    Firebird 徹底入門 (JUGEMレビュー »)
    木村 明治,はやし つとむ,坂井 恵
    Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
    + SELECTED ENTRIES
    + RECENT COMMENTS
    • たまたま「プリントヘッドの種類が違います」エラーから復活@MG6230
      meijik (11/20)
    • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
      meijik (07/27)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (03/03)
    • 2019年の木村明治
      田中尚 (01/08)
    • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
      noname (12/10)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 2015年版 InterBaseの歩み
      nakagami (12/06)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (11/22)
    • 分散DB本読書会第46回メモ「STOP AFTER 10」
      masudahidehiko (09/01)
    + RECENT TRACKBACK
    + CATEGORIES
    + ARCHIVES
    + MOBILE
    qrcode
    + LINKS
    + PROFILE