pulpul 日本の試験

基本情報技術者 概念書 · データベース

トランザクション処理

要点と定義

トランザクションは、データベースへの一連の処理をひとまとまりとして扱う単位です。複数の利用者が同時に処理する環境では、処理の途中で障害が起きたり、他の処理と更新が競合したりしても、データの整合性を保つ必要があります。

トランザクションに求められる代表的な性質はACID特性です。原子性は処理をすべて実行するか、実行しなかった状態に戻す性質、一貫性は処理の前後で整合性制約を保つ性質、独立性は並行する処理同士が不適切な影響を与えない性質、耐久性は確定した更新を障害後も保つ性質です。更新を完了するか、なかったことにするかを問う場合に必要なのは原子性です。 ACIDはトランザクション制御が実現する性質のまとまりであり、RDBMSの機能に関する問いでこの性質群を特定する根拠になります。

排他制御は、複数のトランザクションによる同じデータへの同時更新を調整し、更新競合による論理的な矛盾を防ぐ仕組みです。ロック方式では対象データにロックを設定します。共有ロックは参照のために使い、専有ロックは更新などのために対象を占有します。複数の処理が同じデータを更新する状況で、競合を防ぐ技法を判断するには排他制御の役割を押さえます。

ロック粒度とは、一つのロックが対象とするデータの範囲です。行単位のように細かい粒度は競合範囲を狭め、別データへの処理を並行しやすくします。一方でロック数が増え、管理負担が大きくなります。表単位のように粒度を大きくするとロック数は減りやすいものの、関係のない処理も待たせることがあり、更新時の待ちやスループット低下につながります。粒度と待ち時間・スループットの関係を問う場合に、このトレードオフが判断材料になります。

障害回復では、バックアップ、更新前後の情報を記録するログ(ジャーナル)、チェックポイントなどを使います。ロールバックはログの更新前情報を使って未完了の変更を取り消し、以前の状態に戻す処理です。更新途中で異常終了した処理を元に戻す情報として、更新前情報を選ぶ根拠になります。 ロールフォワードは、バックアップなどの復旧元にログの更新を再適用して先へ進める処理です。チェックポイント後に完了した更新を保つ場合や、媒体故障後にバックアップとログから回復する場合に使います。

分散トランザクションでは、2相コミットによって複数サイトの確定をそろえます。準備段階で各サイトに確定可能かを確認し、すべてが可能な場合に確定段階へ進みます。複数サイトが確定可能かを確認してから更新を確定する方式を問う場合、この二段階の手順が根拠になります。

適用条件と例

口座Aから口座Bへ1,000円を移す処理を考えます。Aからの引落し後にBへの入金が失敗したなら、引落しを取り消すか、入金まで完了させる必要があります。原子性は処理全体を完了するか、取り消すかを扱います。一貫性は残高などの制約を保ち、独立性は同時に行われる別の処理が途中状態に不適切に影響しないようにし、耐久性は確定後の更新を障害後にも保ちます。

在庫表で同じ商品行を複数処理が更新する場合、その行をロックすれば更新競合を避けられます。別商品の行まで同時に更新できるなら、表全体をロックする場合より並行性を保ちやすくなります。ただし、細かいロックは数が増えるため、処理の競合範囲とロック管理の負担をあわせて考えます。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む