15.5.データベース並行処理制御(1):Quantitative System Performance
「15.4.ソフトウェア・リソース」の続きです。(目次はこちら)
15.5.データベース並行処理制御
任意のデータベース・システムにおいて、多くのユーザが並行してデータベースをアクセスし更新したいと思っている。もし、この並列性がちゃんとしていなければ問題が発生するであろう。
- さまざまなユーザによるリードとライトの不運なインターリービングのせいでデータベースは不整合を示すだろう。
- データベースが整合性を保ったままであっても、やはり活動の不運なインターリービングのせいで個々のユーザは不整合なデータを「見る」だろう。
一例として、表15.1は、2名のユーザが並行して、最初はそれぞれ$75入っている自分の銀行口座(それぞれu1、u2)から$50を、最初は$50入っている共同銀行口座に移動させようとした時に起きるかもしれない不整合を示している。彼らの最初の資産の合計$200は$150に減っている。
このような問題への心配をユーザから取り除くために、トランザクションの概念が工夫されてきた。トランザクションの主要特性は原子性である。
- トランザクションを実行しているユーザは、他のユーザの活動に係わらず、データベースの単一の整合性のとれた姿を保証される。
- 他のユーザはトランザクションを、データベースの個々のリードとライトのつながりとしてではなくて、単一の活動として把握する。
並行処理制御メカニズムの仕事はデータベースの整合性を保持することを保証しながらトランザクションが並行して実行されることを可能にすることである。雑な並行処理制御メカニズムは1つのトランザクションにデータベース全体の排他的アクセスをその期間許可するだろう。(並列性はこの単純なソリューションによって不必要に制限されている。まったく別のデータ・アイテムの集合を参照している2つのトランザクションは並行して進むことが出来ないであろう。) より妥当なメカニズムは1つのトランザクションにさまざまなデータ項目への排他的アクセスをその期間許可することである。他の可能性も存在する。明らかに、並行処理制御メカニズムの存在はシステム性能に顕著な影響を与え得る。それはメモリ制約の影響と若干類似した影響である。同様に明らかなのは、並行処理制御メカニズムを直接表現する待ち行列ネットワーク・モデルは非分離可能になるということである。客は自分が要求するデータ項目が他の客によって保持されている時にブロックされる。パートIIIやこの章の他のセクションで開発した技法に比較出来る技法が必要である。
このセクションで我々は特定の、単純な並行処理制御メカニズムを利用しているデータベース・システムの評価を考察する。この並行処理制御メカニズムの元でのトランザクションの処理は表15.2に記述されている。表15.1の銀行取引の例を考察しよう。並行処理制御メカニズムの下で、ユーザ1とユーザ2の活動は別々のトランザクションを構成する。ユーザ1はデータ項目u1とshにロックをかけ、他からの干渉の心配なく先に進む。ユーザ2はu2へのロックは許可されるがshへのロックは拒否され、アボートし、u2へのロックを解除する。その後、ユーザ2のトランザクションは再投入される。(アボートしたトランザクションは若干の待ってから再投入されると仮定する。)ユーザ1は完了し、よってshへのロックはユーザ2に許可され、ユーザ2はshの値が$100であることを見つける。ロッキング・フェーズ
- 値を要求されている個々のデータ項目へのリード・ロックを要求する。リード・ロックは、他のどのトランザクションも現在その項目に対してライト・ロックをかけていない場合に許可される。
- 書かれることになっている個々のデータ項目にライト・ロックを要求する。ライト・ロックは、他のどのトランザクションもその項目に対してリード・ロックもライト・ロックもかけていない場合に許可される。
- もしどれかのロックが拒否されるならば、アボートし、そのトランザクションに対して前に許可された全てのロックを解除する。
処理フェーズ
- 要求されるデータ項目の値を読む。
- これらの値に基づいて、書かれるべきデータ項目の値を計算する。
- 書かれるべきデータ項目の値を更新する。
終了フェーズ
- トランザクションによってかけられた全てのリードとライトのロックを解除する。
- 表15.2 トランザクションを処理する際のステップ
並行処理制御メカニズムの性能への影響はこの例と表15.2から明らかである。若干のトランザクションは、要求するデータ項目にロックをかけることが出来ないためにアボートする。システムの観点からは、アボートするトランザクションは(成功したトランザクションほどではないが)リソースを消費する。ユーザの観点からは、トランザクションを成功裏に完了させるためには数回の試みが要求されるだろう。
「15.5.データベース並行処理制御(2)」に続きます。