並行性制御
ユーザーデータではなく索引へのアクセス操作を同期させる。性能向上策のひとつ。
並行性制御機構は以下のように大別される。
並行性制御には多数の技法が存在する。その多くは上述の分類のどれであっても実装可能である。主な技法にはそれぞれ多数の派生があり、複数の技法を組み合わせたものもある。
どんなシステムも障害はつきもので、障害発生時の復旧 (Data recovery) は必須である。並行性制御機構が生成するスケジュールの特性が復旧の容易さや効率に影響を与える可能性がある。例えば、厳格性は効率的復旧のために望ましい属性である。
その結果、1970年代初めにデータベースシステムが出現して以来ずっと関連した様々な研究成果が蓄積されていき、データベースシステムの並行性制御理論が確立している。直列化可能性理論は、並行性制御の技法と機構を効率的に設計し分析することを可能にする。抽象データ型に対するアトミックなトランザクションについての並行性制御理論もある。そちらの理論の方が洗練されていて複雑で適用範囲が広く、最近では上述の古典的理論よりもデータベースの教科書でよく採用されている。どちらの理論も一長一短であり、ある意味では相補的でもある。
正確性を確保するため、DBMSは「直列化可能な」トランザクションスケジュールのみを保証するのが普通だが、アプリケーションが正確性をあまり求めていない場合のみ直列化可能性を意図的に緩和して性能を向上させることもある。トランザクションが失敗した場合の正確性を確保するには、スケジュールが回復可能性という属性を持つ必要がある。DBMSはまた、「コミット」されたトランザクションの結果が失われないことを保証し、「中断」(ロールバック)されたトランザクションの結果が関連するデータベースに残存しないことも保証する。トランザクション全体の特性は一般に後述するACID原則にまとめられる。データベースが分散されるか、分散環境で協調動作する必要がある場合(例えば、1990年代初めの連合データベースや21世紀のクラウドコンピューティング)、並行性制御機構の効果的分散に注目が集まる。
マルチタスクOS、特にリアルタイムOSは、動作中の全タスクが同時に動作しているかのように見せる必要があるが、ハードウェアの制限があるため実際にある時点で同時に動作しているタスクはごく少数である。マルチタスクは全タスクが互いに完全に独立しているなら単純である。しかし複数のタスクが同一資源を使用しようとした場合や、タスク間で情報を共有しようとした場合、混乱と矛盾をもたらすことがある。並行計算はこの問題を解決するためにある。データベースと同様にロックを使用する解法もあるが、その場合デッドロックなどの問題を引き起こす危険性も生じる。他にはブロックしないアルゴリズムもある。
個々のトランザクションがデータアクセスのための個別の作業空間を持ち、更新したデータはトランザクションがコミットしたときのみ外界から見えるようになる。このモデルは従来とは異なる並行性制御を提供し、多くの利点がある。
データベースシステムでの最も一般的な機構は1970年代以降「強く厳密な(厳格な)ツーフェーズロック」(SS2PL, Rigorous 2PL) であり、ツーフェーズロック (2PL) と コミットメント順序付け (CO) の特殊ケース(派生)である。悲観的機構に分類される。歴史的経緯から長い名前がついているが、機構は単純で「トランザクションが終わった後のみ、そのトランザクションが確保した全ロックを解放する」というものである。SS2PLはこの機構によって生成される全スケジュールも指し、SS2PLスケジュールはSS2PL属性を持つ。
楽観的と悲観的の中間であり、状況によって当初から同期する場合と遅延させる場合を使い分ける。
カテゴリが異なれば、性能も異なる。トランザクションの完了レート(スループット)は、トランザクションの種類の比率、計算の並列性レベルなどに左右される。トレードオフに関する知識が入手でき、選択が可能なら、最も性能が高くなる方式を選択すべきである。
2つ以上のトランザクションが互いにブロックしあう状況からデッドロックが生じ、関連するトランザクション群は処理を続行できなくなり、完了不可能となる。楽観的でない機構の多くはデッドロックを発生させる可能性があり、ストールしているトランザクションを意図的に中断させ、即座に再試行させることで問題を解決するしかない。一般にデッドロックはそう頻繁に発生するものではない。
ブロック、デッドロック、中断はいずれも性能を低下させるので、どのような並行性制御を選択するかはトレードオフの問題である。