DBMSにおけるトランザクション管理:状態、タイプ、およびACID

⚡ スマートサマリー

データベーストランザクション管理は、1つまたは複数のデータベース操作を単一の論理単位として扱い、データベースをある一貫性のある状態から別の一貫性のある状態へと移行させます。同時アクセスの正確性を維持するために、ACID特性、定義済みのトランザクション状態、およびスケジュールに依存しています。

  • 🔁 コアユニット: トランザクションは、関連する読み取り操作と書き込み操作をグループ化し、それらが同時に成功するか失敗するかを決定するものであり、中途半端な結果になることはありません。
  • 🧪 ACID プロパティ: Atom正確性、一貫性、分離性、耐久性により、障害や同時発生時でも正確な結果が保証されます。
  • 🚦 トランザクションの状態: アクティブ、部分的にコミット済み、コミット済み、失敗、終了は、トランザクションのライフサイクルを表します。
  • 👥 なぜ並行処理が必要なのか: データベースは共有されているため、多数のトランザクションが同時に実行され、互いのデータを破損させてはならない。
  • ???? スケジュール: スケジュールは、各トランザクションの内部的な順序を維持しながら、並列トランザクションの処理順序を決定します。
  • 🔗 直列化可能性: 並行スケジュールは、競合またはビュー等価性によって判断した場合、その結果が何らかの逐次実行の結果と等しくなる場合に正しいとみなされる。
  • ↩️ 回復: 失敗したトランザクションはロールバックされるため、部分的な書き込みはコミットされたデータベースに到達することはありません。

DBMSにおけるトランザクション管理

データベーストランザクションとは何ですか?

A データベーストランザクション データベーストランザクションとは、データベース管理システム(DBMS)における論理的な処理単位であり、1つ以上のデータベースアクセス操作を伴います。簡単に言えば、データベーストランザクションは、あらゆる企業における現実世界の出来事を表しています。

DBMSでは、開始トランザクションステートメントと終了トランザクションステートメントの間にあるあらゆる種類のデータベースアクセス操作は、単一の論理トランザクションとみなされます。トランザクション中はデータベースは不整合な状態になります。トランザクションがコミットされて初めて、データベースの状態は整合状態から別の整合状態へと変化します。

一貫性のある状態間を移動するデータベーストランザクション
データベーストランザクション

データベーストランザクションに関する事実

  • トランザクションは、実行によってデータベースの内容が変更される場合もあれば変更されない場合もあるプログラム単位です。
  • DBMS におけるトランザクションの概念は、単一のユニットとして実行されます。
  • データベース操作がデータベースを更新せず、データを取得するだけの場合、このタイプのトランザクションは読み取り専用トランザクションと呼ばれます。
  • トランザクションが正常に完了すると、データベースは一貫性のある状態から別の一貫性のある状態へと変化する可能性があります。
  • DBMSトランザクションは、原子性、一貫性、分離性、および永続性を備えている必要がある。
  • トランザクション前にデータベースが不整合な状態にあった場合、トランザクション後もデータベースは不整合な状態のままになります。

トランザクションにおいて並行処理が必要な理由とは?

データベースは共有リソースであり、多くのユーザーやプロセスによって同時に利用されます。例としては、銀行システム、鉄道や航空券の予約システム、株式市場の監視、スーパーマーケットの在庫管理やレジシステムなどが挙げられます。

同時アクセスを管理しないと、次のような問題が発生する可能性があります。

  • ハードウェアの故障およびシステムクラッシュ。
  • 同じトランザクションの同時実行、 デッドロック、またはパフォーマンスが低下します。

この共有アクセスを制御するのは 同時実行制御これは、ロックとタイムスタンプを使用してトランザクションを安全にインターリーブします。その前に、トランザクションが通過する状態を知っておくと役立ちます。

トランザクションの状態

DBMS におけるトランザクション概念のさまざまな状態を以下に示します。

州/地域 詳細説明
アクティブな状態 トランザクションは、実行プロセスが開始されるとアクティブ状態になります。この状態では、読み取り操作または書き込み操作を実行できます。
部分的にコミット トランザクションは、トランザクション終了後に部分的にコミットされた状態になります。
コミットされた状態 トランザクションがコミット状態に達すると、その実行は正常に完了し、すべての変更内容がデータベースに永続的に記録されます。
失敗した状態 トランザクションは、いずれかのチェックが失敗した場合、またはトランザクションがアクティブな状態にある間に中止された場合に、失敗とみなされます。
終了状態 トランザクションの状態は、トランザクションがシステムから終了し、再開できなくなった時点で終了状態になります。

データベーストランザクションの状態遷移図

研究してみましょう 状態遷移図 これは、トランザクションがこれらのさまざまな状態間をどのように移動するかを強調しています。

  1. トランザクションが実行を開始すると、アクティブ状態になります。アクティブ状態では、READ操作またはWRITE操作を発行できます。
  2. READ操作とWRITE操作が完了すると、トランザクションは部分的にコミットされた状態になります。
  3. 次に、一部の復旧プロトコルでは、システム障害によってトランザクションの変更が永続的に記録されなくなる事態が発生しないことを保証する必要があります。このチェックが成功すると、トランザクションはコミットされ、コミット済み状態になります。
  4. チェックが失敗した場合、トランザクションは失敗状態になります。
  5. トランザクションがアクティブ状態中に中止された場合、失敗状態に移行します。データベースへの書き込み操作の影響を元に戻すには、トランザクションをロールバックする必要があります。
  6. 終了状態とは、トランザクションがシステムから終了することを指します。

酸の性質とは?

ACIDプロパティ トランザクション処理中にデータベースの整合性を維持するために使用されます。DBMS の ACID は、 Aトミシティ、 C粘り強さ、 I孤独、そして D耐久性。

  • Atom氷性: トランザクションは単一の操作単位です。トランザクションは完全に実行するか、まったく実行しないかのどちらかです。部分的な実行はできません。
  • 一貫性: トランザクションが実行されると、一貫した状態から別の状態に移行する必要があります。
  • アイソレーション: トランザクションは、他のトランザクションとは独立して実行されるべきである。同時実行中は、同時に実行されるトランザクションの中間結果を互いに共有してはならない。
  • 耐久性: トランザクションが正常に完了した後、データベース内の変更は、システム障害が発生した場合でも保持されるべきである。

DBMSにおけるACID特性の例

以下は、DBMSにおけるACID特性の例です。

Transaction 1: Begin X=X+50, Y = Y-50 END
Transaction 2: Begin X=1.1*X, Y=1.1*Y END

トランザクション 1 は、アカウント X からアカウント Y に $50 を送金しています。

トランザクション 2 では、各アカウントに 10% の利息が入金されます。

両方のトランザクションが同時に送信された場合、トランザクション1がトランザクション2より先に実行される、あるいはその逆の順序で実行されるという保証はありません。順序に関係なく、結果はトランザクションが順番に実行された場合と同じでなければなりません。

取引の種類

応用分野別:

  • 非分散型 vs. 分散型。
  • 補償取引。
  • トランザクションのタイミング。
  • オンライン処理 vs. バッチ処理。

行動に基づくと:

  • 2段階。
  • 制限付き。
  • アクションモデル。

構造に基づくと:

  • フラットトランザクションまたは単純トランザクション:開始操作と終了操作の間で実行される一連の基本操作から構成される。
  • ネストされたトランザクション:他のトランザクションを含むトランザクション。
  • ワークフロー。

スケジュールとは何ですか?

スケジュールとは、複数の並列トランザクションを単一のグループにまとめ、それらを一つずつ実行するプロセスです。スケジュールは、各トランザクション内の命令の出現順序を維持する必要があります。2つのトランザクションが同時に実行される場合、一方のトランザクションの結果が他方のトランザクションの出力に影響を与える可能性があります。

例:

Initial Product Quantity is 10
Transaction 1: Update Product Quantity to 50
Transaction 2: Read Product Quantity

トランザクション 2 の前にトランザクション 1 が実行されると、製品数量に関する古い情報が読み取られます。 したがって、スケジュールが必要になります。

データベースにおける並列実行は避けられない。しかし、並列実行は、同時に実行されるトランザクション間に等価関係が存在する場合にのみ許可される。この等価関係には3つの種類がある。

結果の同等性: 2つのスケジュールが実行後に同じ結果を表示する場合、それは結果等価スケジュールと呼ばれます。これらのスケジュールは、一部の値に対しては同じ結果を示し、別の値に対しては異なる結果を示す場合があります。たとえば、一方のトランザクションは製品数量を更新し、もう一方のトランザクションは顧客情報を更新します。

同等性の表示: ビューの等価性とは、両方のスケジュール内のトランザクションが同様のアクションを実行する場合に発生します。たとえば、一方のトランザクションが製品の詳細を製品テーブルに挿入し、もう一方のトランザクションが製品の詳細をアーカイブテーブルに挿入する場合、トランザクション自体は同じですが、テーブルが異なります。

紛争の等価性: この場合、2つのトランザクションが同じデータセットを更新または閲覧します。実行順序によって出力に影響が出るため、トランザクション間で競合が発生します。

直列化可能性とは何ですか?

直列化可能性とは、トランザクションが順番に実行される直列スケジュールと出力が等しくなるような並行スケジュールを探すプロセスです。スケジュールの種類に応じて、直列化可能性には次の2種類があります。

  • 競合の直列化可能性。
  • 直列化可能性を表示します。

両者の違いは、同等性を判断する際の厳密さにある。以下にその概要をまとめる。

側面 競合の直列化可能性 シリアル化可能性を表示
Basis社 競合する操作の順序 読み取りと最終書き込みの関係
ホイール試乗 優先順位グラフは非巡回でなければならない 連続スケジュールとの等価性を表示する
厳密さ より厳密な部分集合 より広義には、ブラインドライティングも含まれる
チェック費用 効率的な 計算が困難

競合シリアライズ可能なスケジュールはすべてビューシリアライズも可能ですが、その逆は成り立ちません。そのため、競合シリアライズ可能性はDBMSが適用する実用的なテストとなります。

よくあるご質問

コミットは、トランザクションによる変更をデータベースに永続的に反映させます。ロールバックは、トランザクション開始以降のすべての変更を元に戻し、データベースをトランザクション開始前の整合性の取れた状態に戻します。

Atom原子性。処理の途中でクラッシュが発生した場合、原子性によって未完了の処理が破棄されるため、トランザクションは実行されなかったものとして扱われます。その後、永続性によって、復旧後にコミットされた処理が保護されます。

AIはロック待機とデッドロックグラフを分析して、他のトランザクションをブロックしているトランザクションを特定し、正確性を損なうことなく競合を軽減する分離レベルまたはインデックスの変更を推奨します。

ある程度は可能です。過去のデッドロックに先行するロック要求パターンを学習することで、モデルはリスクの高いトランザクションの組み合わせを早期に検知し、サイクルが発生する前にスケジューラが遅延または順序変更を行うことができます。

逐次スケジュールでは、次のトランザクションが開始される前に前のトランザクションが完全に実行されるため、インターリーブによってデータが破損することはありません。ただし、処理速度が遅いため、目標は逐次スケジュールに直列化可能な並行スケジュールを作成することです。