ホーム > mixiユーザー(id:17119814) > mixiユーザーの日記一覧 > データベース(12)

mixiユーザー(id:17119814)

2015年07月01日07:14

76 view

データベース(12)

オラクルとSQLサーバやDB2との動作上の違いで最大のものは、「データの一貫性保
証方式の違い」である。これは何か?というと、データベースサーバは複数のクライアン
トから、管理しているデータに対しての要求を受け付ける。あるデータをAというクライ
アントが参照しようとしている裏で、同時にBというクライアントが更新しようとしてい
るというケースもあり得る。

こうした場合の動作がオラクルとSQLサーバ、およびDB2では異なるのだ。SQLサ
ーバとDB2では参照の場合、参照対象データは更新ができないようにロックがかかる。
なので更新しようとしているBは、Aが読み込むまで待たされることになる。これに対し
てオラクルでは、このような待ちは発生しない。

Bが更新しようとしたデータは、ロールバック・セグメントという領域に退避される。そ
してAに対してはロールバック・セグメントから値を返す。ロールバック・セグメント内
のデータはBが更新を完了しコミットした時点で消滅する。

このへんのデータ読み取り時の一貫性を保つために、読み取り時にもデータに対しロック
をかけるかどうかが、オラクルとDB2、SQLサーバとの最大の違いだろう。方式的に
はオラクルのほうが待ちが発生しない分優れているようにも思えるが、ロールバック・セ
グメント自体リソースを食うし、制御としてもかなり複雑である。

トータルのCPU負担を考えると、一概にオラクルの方式が優れているとも言い難い。そ
もそも、そんな長時間ロックが発生してしまうような、時間のかかるクエリーを行うよう
なSQLを書くほうが悪いのだから、プログラマがしっかりと気をつけていれば問題は起
こらないハズ、なのであるが・・・

0 1

コメント

  • mixiユーザー

    mixiユーザー2015年07月01日 12:47
    デッドロックを含む複数からの同時アクセスの問題ですね。

    帯に短し、襷に長し。

    利用方法からみた最適化をる考えるしかないのかな。

mixiユーザー

ログインしてコメントを投稿する