国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ データベース mysql チュートリアル トランザクションと同時実行制御: DBMS

トランザクションと同時実行制御: DBMS

Jan 05, 2025 pm 04:07 PM

Transactions and Concurrency Controls: DBMS

DB 管理システム (DBMS) のトランザクション

定義:

データベース管理システム (DBMS) の トランザクション は、単一の論理的な作業(yè)単位として実行される一連の操作です。トランザクションには、データベース內(nèi)のデータの読み取り、挿入、更新、または削除が含まれる場合があります。トランザクションの主な特徴は、トランザクションがアトミックであることです。これは、トランザクション內(nèi)のすべての操作が正常に完了するか、データベースにまったく適用されないことを意味します。


トランザクションの主要なプロパティ: ACID プロパティ

トランザクションは、データベースの一貫性と信頼性を確保するために、ACID プロパティに準(zhǔn)拠する必要があります。これらのプロパティは次のとおりです:

  1. 原子性:

    • アトミック性により、トランザクションが単一の分割不可能な作業(yè)単位として扱われることが保証されます。トランザクション內(nèi)のすべての操作が実行されるか、何も実行されないかのどちらかです。トランザクションの一部が失敗した場合、トランザクション全體がロールバックされ、データベースが一貫した狀態(tài)に保たれます。
    • : トランザクションにアカウント A からアカウント B への送金が含まれる場合、アトミック性により、送金全體が完了する (A からお金が差し引かれ、B に追加される) か、何も行われない (お金は送金されない) ことが保証されます。失敗した場合)。
  2. 一貫性:

    • 一貫性により、トランザクションによってデータベースがある有効な狀態(tài)から別の有効な狀態(tài)に移行することが保証されます。どのトランザクションもデータベースの整合性制約 (主キー、外部キーなど) に違反してはなりません。トランザクションがコミットされた後は、データベースは常に一貫した狀態(tài)になる必要があります。
    • : 2 つの銀行口座間で送金した後、両方の口座の殘高の合計(jì)は一定のままである必要があります。データベースの整合性ルールに違反すると、トランザクションはロールバックされます。
  3. 隔離:

    • 分離により、トランザクションの実行中にトランザクションの操作が他のトランザクションから確実に隠蔽されます。複數(shù)のトランザクションが同時に発生している場合でも、各トランザクションは他のトランザクションの操作を認(rèn)識すべきではありません。これにより、ダーティ リード、非反復(fù)読み取り、ファントム リードが防止されます。
    • : 2 人のユーザーが同じ銀行口座から同時に送金している場合、分離により一方の取引が他方の取引に干渉しないことが保証され、二重引き出しなどのエラーが防止されます。
  4. 耐久性:

    • 耐久性により、トランザクションがコミットされると、システムがクラッシュした場合でも、その変更は永続的に保たれることが保証されます。コミットが成功すると、トランザクションによって行われた変更はデータベースに保存され、失われることはありません。
    • : ユーザーが注文に成功した場合、コミット直後に突然の停電が発生した場合でも、データベースの変更 (在庫の更新や発注など) は維持されるはずです。

取引の種類

  1. 単純なトランザクション:

    • これらには、データの読み取りまたは書き込みなどの単一の操作が含まれます。たとえば、単純な読み取りクエリや更新クエリはトランザクションの一部である可能性があります。
  2. 複雑なトランザクション:

    • これらには、読み取り、更新、挿入、削除などの複數(shù)の操作が含まれます。複雑なトランザクションとは、ある口座から別の口座への送金など、ビジネス プロセスを完了するために設(shè)計(jì)された一連の操作のことです。これには、口座殘高の確認(rèn)、一方からの引き落とし、もう一方への追加が含まれます。

トランザクションのライフサイクル

一般的なトランザクションは次の手順に従います:

  1. トランザクションの開始:

    • これはトランザクションの開始を示します。これは、新しいトランザクションが実行されようとしていることを示します。
  2. 操作の実行:

    • トランザクションは、レコードの選択、挿入、更新、削除などの一連のデータベース操作を?qū)g行します。これらの操作は、トランザクションの一部として順次実行されます。
  3. トランザクションのコミット:

    • すべての操作が完了すると、トランザクションがコミットされます。これは、トランザクションによって行われたすべての変更がデータベースに永続的に保存されることを意味します。一度コミットされたトランザクションはロールバックできません。
  4. ロールバックトランザクション:

    • トランザクションの実行中にエラーまたは障害 (制約違反など) が発生した場合、トランザクションはロールバックされます。これは、トランザクションによって行われたすべての変更が元に戻され、データベースが元の狀態(tài)に戻ることを意味します。
  5. トランザクションの終了:

    • コミットまたはロールバックの後、トランザクションは終了します。これは、トランザクションのライフサイクルが完了したことを示します。

トランザクション狀態(tài)

トランザクションは、ライフサイクル中、次のいずれかの狀態(tài)にある必要があります:

  1. アクティブ:

    • トランザクションの初期狀態(tài)。トランザクションは、操作の実行中、この狀態(tài)に留まります。
  2. 部分的にコミット済み:

    • この狀態(tài)は、トランザクションの最後のステートメントが実行された後に発生します。この時點(diǎn)で、トランザクションはすべての操作を終了しましたが、まだデータベースにコミットされていません。
  3. 失敗:

    • 通常、制約違反やシステム障害などの問題により、通常の実行が続行できないことが判明した場合、トランザクションは 失敗 狀態(tài)に入ります。
  4. 中止されました:

    • トランザクションがロールバックされ、データベースがトランザクション開始前の狀態(tài)に復(fù)元されると、データベースは aborted 狀態(tài)に入ります。
  5. コミット済み:

    • すべての操作が正常に完了し、その変更がデータベースに永続的に適用されると、トランザクションは コミット済み 狀態(tài)になります。
  6. 終了:

    • トランザクションは、コミットまたは中止された場合、終了とみなされます。トランザクションがコミットまたは中止された狀態(tài)に達(dá)すると、再開することはできません。

DBMSのスケジュール

スケジュールは、特定の順序で実行される複數(shù)のトランザクションからの一連の操作です。スケジュールは、複數(shù)のトランザクションの読み取りおよび書き込み操作の実行順序を決定します。主な目的は、同時トランザクションがどのように相互作用するかを判斷し、データベースが一貫した狀態(tài)に保たれるようにすることです。

スケジュールは シリアル または 非シリアル にすることができます。


スケジュールの種類

  1. 連載スケジュール:
    • シリアル スケジュールとは、トランザクションがインターリーブなしで次々に実行されるスケジュールです。これは、1 つのトランザクションの操作が次のトランザクションが開始される前に完全に完了することを意味します。
    • シリアルスケジュールでは同時実行性はなく、スケジュールはトランザクションを順番に実行することと同等です。

シリアルスケジュールの例:

  • トランザクション 1: T1: Read(A);書き込み(A);専念
  • トランザクション 2: T2: Read(B);書き込み(B);専念
  • トランザクションは次々に実行され、操作に重複はありません。
  1. 非連続スケジュール:
    • 非シリアルスケジュールでは、複數(shù)のトランザクションからの操作をインターリーブすることができます。このタイプのスケジュールでは、トランザクションは同時に実行されます。つまり、トランザクションの操作が混在します。
    • 非シリアル スケジュールは、操作の実行順序に応じて異なる結(jié)果を引き起こす可能性があるため、ACID プロパティを維持するには慎重な管理が必要です。

非連続スケジュールの例:

  • T1: 読み取り(A);書き込み(A);
  • T2: 読み取り(B);書き込み(B);
  • T1: コミット;
  • T2: コミット;
  • トランザクション T1 と T2 の操作はインターリーブされます。

直列化可能性

直列化可能性 は、複數(shù)のトランザクションを同時に実行した結(jié)果が、トランザクションが逐次的に (次々に) 実行された場合と同じであることを保証する概念です。データベースへの影響という點(diǎn)でシリアル スケジュールと同等である場合、スケジュールはシリアル化可能であると言われます。

重要性:

シリアル化可能性の目標(biāo)は、同時トランザクションによって競合や異常 (ダーティ リード、更新の喪失など) が発生せず、データベースが一貫した狀態(tài)に保たれるようにすることです。

シリアル化可能性には主に 2 つのタイプがあります:

  1. シリアル化可能性の競合:
    • スケジュールは、競合しない操作を交換することによってシリアル スケジュールに変換できる場合、競合シリアル化可能です。 2 つの操作は、異なるトランザクションからのもので、同じデータ項(xiàng)目にアクセスし、少なくとも 1 つが書き込み操作である場合、競合しているとみなされます。
    • 競合操作:
      • 読み取り/書き込み競合は、あるトランザクションが別のトランザクションが書き込むデータ項(xiàng)目を読み取るときに発生します。
      • 書き込み-書き込み競合は、2 つのトランザクションが両方とも同じデータ項(xiàng)目に書き込む場合に発生します。

競合の直列化可能性の例:

  • スケジュール:
    • T1: Write(A);
    • T2: Write(B);
    • T1: 読み取り(B);
    • T2: Read(A);
  • このスケジュールはシリアルスケジュールに再配置でき、競合シリアル化可能です。
  1. シリアル化可能性を表示:
    • 最終結(jié)果の點(diǎn)でスケジュールがシリアル スケジュールと同等である場合、つまり、同じ読み取りと書き込みが発生し、トランザクションが正しくシリアル化されている場合、スケジュールはビュー シリアル化可能です。ただし、ビューの直列化可能性では、競合する直列化可能性のように操作を必ずしも交換する必要はありません。

同等の競合、シリアル化可能な競合

  • 同等の競合:

    • 2 つのスケジュールは、同じ操作が含まれ、操作の順序が同じで、競合する操作の順序が保持される場合、競合同等 であると言われます。これは、両方のスケジュールでトランザクションをインターリーブすると同じ結(jié)果が生成され、競合が同等であることが保証されることを意味します。
  • シリアル化可能な競合:

    • スケジュールは、トランザクションを再配置して競合順序を維持しながらシリアルスケジュールを形成できる場合、競合シリアル化可能です。簡単に言うと、データの一貫性を損なうことなくトランザクションをシリアル化できる場合、つまり、競合する操作の順序を維持できる場合、スケジュールは競合シリアル化可能です。

競合のシリアル化可能性と競合と同等のスケジュールの例

次のトランザクションとその操作を考えてみましょう:

  • トランザクション T1: Read(A);書き込み(A);専念
  • トランザクション T2: Read(A);書き込み(A);専念

スケジュール 1:

T1: Read(A);
T2: Read(A);
T1: Write(A);
T2: Write(A);
T1: Commit;
T2: Commit;

スケジュール 2:

T2: Read(A);
T1: Read(A);
T2: Write(A);
T1: Write(A);
T1: Commit;
T2: Commit;

競合シリアル化可能性チェック:

  • スケジュール 1スケジュール 2 は、競合する操作 (A の読み取り/書き込み) の順序が維持されるため、競合同等 です。どちらのスケジュールもシリアル スケジュールに変換できます。
    • T1: 読み取り(A);書き込み(A);コミット;
    • T2: 読み取り(A);書き込み(A);コミット;
  • したがって、両方のスケジュールは 競合シリアル化可能です。

トランザクションの分離と原子性

ACID プロパティなどのトランザクションの基本的なプロパティに加えて、トランザクションの失敗の管理は、データベースの一貫性と信頼性を維持するための重要な側(cè)面です。トランザクションが同時に実行される場合、データベースは、トランザクション中の障害によってデータベースの狀態(tài)が破壊されず、データベースの原子性と一貫性が維持されることを保証する必要があります。このセクションでは、障害処理が DBMS のトランザクション分離とアトミック性にどのような影響を與えるかについて説明します。


アトミック性と障害処理

原子性 は、トランザクションが単一の分割不可能な作業(yè)単位として扱われることを保証するトランザクションのプロパティです。これは、トランザクションが完全に完了したか、まったく実行されなかったことを意味します。トランザクションの一部が失敗した場合は、部分的な変更がデータベースに適用されないように、トランザクション全體をロールバックする必要があります。

トランザクションが失敗した場合、データベースに與えた影響をすべて元に戻して、データベースをトランザクション開始前の狀態(tài)に戻す必要があります。トランザクションの同時実行が可能なシステムでは、トランザクション T1 が失敗した場合、データベースのアトミック性を維持するために、T1 に依存するすべてのトランザクション (つまり、T1 の影響を受けるデータの読み取りまたは書き込みを持つトランザクション T2) も中止する必要があります。トランザクションが失敗した別のトランザクションに依存している場合、部分的な変更や不整合なデータを殘すべきではありません。

トランザクション実行中の不一致を防ぐには、特にトランザクションが失敗した場合に、トランザクション操作の順序を決定するスケジュールを管理することが重要です。障害を適切に管理できるように、特定の種類のスケジュールを制限する必要があります。


回復(fù)可能なスケジュール

回復(fù)可能なスケジュールは、トランザクション T2 が依存するトランザクション T1 がコミットされた後でのみコミットするスケジュールです。より簡単に言うと、トランザクション T2 がトランザクション T1 によって書き込まれたデータを読み取る場合、T2 が行う前に T1 がコミットする必要があります。これにより、T2 がコミットされていないトランザクションに基づいて変更をコミットしないことが保証され、T1 のロールバックで T2 のロールバックも必要になるというシナリオが回避されます。

このルールに違反するスケジュールは、回復(fù)不可能なスケジュールと呼ばれます。たとえば、T1 によって書き込まれたデータを読み取った後に T2 がコミットしたが、T1 が失敗してロールバックされた場合、T2 のコミットは T1 のコミットされていない変更に依存しているため、データベースは一貫した狀態(tài)に回復(fù)できません。この狀況では、T2 を元に戻すことができなくなり、データの不整合が発生します。

回復(fù)不可能なスケジュールの例:
回復(fù)不可能なスケジュールでは、次のようにしましょう:

  • トランザクション T6 は項(xiàng)目 A にデータを書き込みます。
  • トランザクション T7 は、T6 によって書き込まれた A の値を読み取り、すぐにコミットします。

T6 がコミットする前に失敗した場合、T7 は T6 によって行われたコミットされていない変更に依存します。 T7 はすでにコミットしているため、T7 をロールバックすることができず、T6 の障害から回復(fù)できない狀況が発生します。これにより、回復(fù)不能なスケジュールが発生します。

スケジュールを回復(fù)可能にするには、T7 が T6 のコミット後までコミットを遅らせ、T7 が T6 からのコミットされていないデータに依存しないようにする必要があります。


カスケードレススケジュール

スケジュールが回復(fù)可能であっても、特にカスケード ロールバックが発生した場合、トランザクション障害の回復(fù)中に問題が発生する可能性があります。 カスケード ロールバック とは、1 つのトランザクションの失敗が他の依存トランザクションのロールバックの連鎖反応を引き起こす?fàn)顩rを指します。この狀況は、コミットされていない別のトランザクションによって書き込まれたデータをトランザクションが読み取るときに発生します。

たとえば、次のようなシナリオを考えてみましょう。

  • トランザクション T8 はデータ項(xiàng)目 A に値を書き込み、トランザクション T9 によって読み取られます。
  • トランザクション T9 は A に値を書き込み、その値はトランザクション T10 によって読み取られます。
  • T8 が失敗した場合、T8 に依存する T9 もロールバックする必要があります。 T9 に依存する T10 もロールバックする必要があります。これにより、カスケード ロールバック効果が生じ、複數(shù)のトランザクションの作業(yè)が不必要に元に戻されます。

カスケード ロールバックは、たとえ 1 つのトランザクションが失敗しただけであっても、大量の作業(yè)を元に戻すことになるため、望ましくありません。カスケードロールバックを防ぐために、カスケードレススケジュールを使用できます。カスケードレス スケジュールとは、まだコミットされていないトランザクションによって書き込まれたデータをトランザクションが読み取らないスケジュールです。

正式には、カスケードレス スケジュールとは、任意の 2 つのトランザクション T1 および T2 で、T1 によって書き込まれたデータ項(xiàng)目を T2 が読み取る場合、T2 がデータ項(xiàng)目を読み取る前に T1 がコミットされている必要があるスケジュールです。これにより、トランザクションがコミットされていないデータに依存することがなくなり、カスケード ロールバックが発生しなくなります。

すべてのカスケードレス スケジュールは、回復(fù)可能なスケジュールでもあります。つまり、カスケードレス スケジュールは、カスケード ロールバックを防ぐだけでなく、トランザクション障害が発生した場合でもデータベースが正しく回復(fù)できることを保証します。

カスケードレス スケジュールの例:
次の點(diǎn)を考慮してください:

  • トランザクション T8 は A を書き込み、T9 は A を読み取ります。
  • カスケードレス スケジュールでは、T9 は T8 がコミットした後にのみ A を読み取ることができます。

これにより、T8 が正常に完了しない限り、T9 が T8 からデータを読み取らないことが保証され、T8 が失敗した場合でも T9 をロールバックする必要がなくなります。


トランザクション分離レベル

トランザクション分離は、同時トランザクションがデータベースの整合性を侵害する形で相互に干渉しないようにします。トランザクションの分離レベルは、トランザクションが他のトランザクションから分離される程度を定義します。

低絶縁から高絶縁まで、さまざまな 絶縁レベルがあります。

  1. コミットされていない読み取り:

    • この分離レベルにより、トランザクションは他のコミットされていないトランザクションによって書き込まれたデータを読み取ることができます。このレベルでは、トランザクションが後でロールバックされる可能性のあるデータを読み取るダーティ リードなどの問題が発生し、一貫性のない結(jié)果が生じる可能性があります。
  2. コミットされた読み取り:

    • このレベルのトランザクションは、他のトランザクションによってコミットされたデータのみを読み取ることができます。これによりダーティ リードは防止されますが、反復(fù)不可能な読み取りが発生する可能性があります。つまり、トランザクションが同じデータを 2 回読み取り、その間に別のトランザクションがデータを変更したために異なる結(jié)果が得られることになります。
  3. 反復(fù)読み取り:

    • このレベルは、ダーティ読み取りと非反復(fù)読み取りの両方を防止します。ただし、ファントム読み取りは引き続き許可されます。この場合、他のトランザクションがレコードを挿入または削除すると、トランザクションは異なる行セットに遭遇する可能性があります。
  4. シリアル化可能:

    • これは最高の分離レベルです。これにより、同時トランザクションの結(jié)果が、トランザクションが次々と直列に実行された場合と同じになることが保証されます。これにより、ダーティ読み取り、反復(fù)不能読み取り、ファントム読み取りが防止されますが、その厳密な性質(zhì)によりパフォーマンスに影響を與える可能性があります。

データベースまたはトランザクションに対して選択された分離レベルは、データの整合性とパフォーマンスのバランスに影響します。一般に、分離レベルが高くなると同時実行性の制限が大きくなるため、パフォーマンスが低下します。


DBMS の同時実行制御

同時実行制御は、複數(shù)のトランザクションの同時実行を可能にしながら、正しいトランザクションの実行を保証するデータベース管理システム (DBMS) の重要な側(cè)面です。同時実行制御の目標(biāo)は、トランザクションのインターリーブや障害のシナリオに直面しても、データベースの一貫性と整合性を維持することです。このセクションでは、さまざまなロック モード、2 フェーズ ロック プロトコル、デッドロック処理 メカニズム、および タイムスタンプ ベースのプロトコルを含む、ロックベースのプロトコルについて説明します。 .

ロックベースのプロトコル

ロックは、同時に実行されるトランザクション間の競合を防ぐために DBMS で使用される基本的なメカニズムです。ロックはデータ項(xiàng)目に適用されてアクセスを制御し、複數(shù)のトランザクションがデータベースの整合性を侵害しないようにします。ロックベースの同時実行制御では、トランザクションはデータ項(xiàng)目に対して操作を?qū)g行する前にそのロックを取得し、操作が完了するとロックを解放します。

ロックの種類

データ項(xiàng)目をロックできるさまざまなモードがあります。このセクションでは、次の 2 つの基本モードに注目します:

  1. 共有ロック (S):
    • トランザクションは、項(xiàng)目の読み取りのみが必要な場合に、データ項(xiàng)目の共有ロックを保持します。
    • 複數(shù)のトランザクションは、同じデータ項(xiàng)目に対して同時に共有ロックを保持できます。これにより、異なるトランザクションによるデータ項(xiàng)目の同時読み取りが可能になります。
    • 共有ロックでは、トランザクションによるデータ項(xiàng)目の変更は許可されません。

:

  • トランザクション T1 はアイテム A の共有ロックを保持し、A を読み取ります。
  • トランザクション T2 は項(xiàng)目 A の共有ロックを保持し、A を読み取ります。
  • どちらもデータを読み取ることはできますが、A に書き込むことはできません。
  1. 排他ロック (X):
    • トランザクションは、データ項(xiàng)目の読み取りと書き込みの両方が必要な場合、そのデータ項(xiàng)目に対して排他的ロックを保持します。
    • 特定のデータ項(xiàng)目に対して排他ロックを保持できるトランザクションは常に 1 つだけです。トランザクションに排他ロックがある場合、他のトランザクションは同じデータ項(xiàng)目の共有ロックまたは排他ロックを取得できません。

:

  • トランザクション T1 は項(xiàng)目 A の排他ロックを保持し、それに書き込みます。
  • T1 が A の排他ロックを保持している間、他のトランザクションは A に対して読み書きできません。

ロックの付與

ロックは、システムが従うプロトコルに基づいて付與され、さまざまなロックベースのプロトコルによって、トランザクションの実行中にロックが要求および付與される方法を制御できます。これらのプロトコルは、更新の喪失、一時的な不整合、他のトランザクションによるアクセス中のコミットされていないデータなどの競合を回避するのに役立ちます。


2 フェーズ ロック プロトコル (2PL)

2 フェーズ ロック プロトコル は、直列化可能性 を確保するために広く使用されているプロトコルです。これは、トランザクションの結(jié)果が 1 回後に実行した場合と同等になるような方法でトランザクションが実行されることを保証するプロパティです。別のもの(シリアル)。 2 フェーズ ロックは、トランザクションの実行中に 2 つのフェーズを強(qiáng)制することでシリアル化可能性を保証します。

  1. 成長期:

    • このフェーズでは、トランザクションはロックを取得できますが、ロックを解放することはできません。
    • トランザクションは任意の數(shù)のロックを要求できますが、一度ロックを解放すると、新しいロックを取得できなくなります。このフェーズは、最初のロック解除操作が実行されると終了します。
  2. 縮小フェーズ:

    • このフェーズでは、トランザクションはロックを解放できますが、新しいロックを取得できません。
    • トランザクションがロックの解放を開始すると、追加のデータ項(xiàng)目をロックできなくなります。このフェーズは、トランザクションがコミットまたは中止されると終了します。

2 フェーズ ロック プロトコルは、ロック グラフ內(nèi)のサイクルを防ぎ、実行順序がシリアル化可能な厳密なシーケンスに従うことを保証するため、シリアル化可能性 を保証します。

:

  • トランザクション T1 と T2 はデータ項(xiàng)目 A と B を更新する必要があります。2PL を使用すると、両方のトランザクションは成長フェーズで必要なロックを取得し、操作が完了した後 (縮小フェーズ) にのみロックを解放します。

デッドロックの処理

デッドロック は、2 つ以上のトランザクションが互いにロックを解放するのを待っているときに発生し、どのトランザクションも続行できない狀況が発生します。これにより、1 つ以上のトランザクションがロールバックされない限り解決できない待機(jī)トランザクションのサイクルが作成されます。

デッドロックの防止

デッドロック防止技術(shù)は、トランザクションの動作に制限を課すことでデッドロックの発生を回避するように設(shè)計(jì)されています。デッドロックを防ぐための一般的な戦略の 1 つは、タイムスタンプを使用してトランザクションに優(yōu)先順位を付けることです。

タイムスタンプベースのデッドロック防止スキーム

タイムスタンプを使用する 2 つの著名な デッドロック防止スキームがあります。

  1. ウェイト?ダイ?スキーム:
    • これは非プリエンプティブのデッドロック防止手法です。
    • トランザクション Ti が Tj が保持するデータ項(xiàng)目を要求した場合、Ti は、そのタイムスタンプが Tj のタイムスタンプより小さい場合 (つまり、Ti が Tj より古い場合) にのみ待機(jī)できます。
    • Ti のタイムスタンプが Tj のタイムスタンプより大きい場合、Ti はロールバックされます (つまり、Ti は「死亡」します)。

:

  • トランザクション T14、T15、および T16 のタイムスタンプがそれぞれ 5、10、および 15 である場合:
    • T14 が T15 が保持するデータ項(xiàng)目を要求した場合、T14 の方が古いため、T14 は待機(jī)します。
    • T16 が T15 が保持するデータ項(xiàng)目を要求した場合、T16 は T15 よりも若いため、T16 はロールバックされます。
  1. 傷待ちスキーム:
    • これは先制的デッドロック防止手法です。
    • トランザクション Ti が Tj が保持するデータ項(xiàng)目を要求した場合、Ti は、そのタイムスタンプが Tj のタイムスタンプより大きい場合 (つまり、Ti が Tj より若い場合) にのみ待機(jī)できます。
    • Ti のタイムスタンプが Tj のタイムスタンプより小さい場合、Ti は Tj をプリエンプトし、Tj はロールバックされます (つまり、Tj は Ti によって「負(fù)傷」します)。

:

  • トランザクション T14、T15、および T16 のタイムスタンプがそれぞれ 5、10、および 15 である場合:
    • T14 が T15 が保持するデータ項(xiàng)目を要求すると、T14 は T15 をプリエンプトし、T15 がロールバックされます。
    • T16 が T15 が保持するデータ項(xiàng)目を要求した場合、T16 は T15 よりも若いため待機(jī)します。

タイムスタンプベースのプロトコル

ロックベースのプロトコルに加えて、タイムスタンプベースのプロトコルもデータベースの同時実行性を管理します。これらのプロトコルは、タイムスタンプを使用してトランザクションを順序付けし、競合を解決し、トランザクションが連続的に実行されているかのようにシステムが動作することを保証します。

タイムスタンプとその役割

タイムスタンプは、トランザクションの作成時にトランザクションに割り當(dāng)てられる數(shù)値です。 トランザクションのタイムスタンプによって優(yōu)先度が決まります。タイムスタンプの値が低いほどトランザクションが古いことを示し、値が高いほどトランザクションが新しいことを示します。

  1. W-タイムスタンプ(Q):

    • これは、データ項(xiàng)目 Q に対する書き込み操作が正常に実行されたトランザクションの最大のタイムスタンプを示します。
    • データ項(xiàng)目を変更した最後のトランザクションを特定するのに役立ちます。
  2. R-タイムスタンプ(Q):

    • これは、データ項(xiàng)目 Q の読み取り操作を正常に実行したトランザクションの最大のタイムスタンプを示します。
    • データ項(xiàng)目を読み取った最後のトランザクションを特定するのに役立ちます。

タイムスタンプ順序付けプロトコル

タイムスタンプ順序付けプロトコルは、タイムスタンプに基づいてトランザクションに合計(jì)順序を強(qiáng)制することでシリアル化可能性を保証します。プロトコルでは次のことが必要です:

  • トランザクション Ti がデータ項(xiàng)目 Q を書き込み、別のトランザクション Tj が Q の読み取りまたは書き込みを行う場合、Ti のタイムスタンプは Tj より小さくなければなりません。
  • 同様に、Ti がデータ項(xiàng)目 Q を読み取り、Tj が Q を書き込む場合、Ti のタイムスタンプは Tj より小さくなければなりません。

このプロトコルは、ロックではなくトランザクションのタイムスタンプに基づいて競合を解決します。

:

  • タイムスタンプ 10 のトランザクション T1 はデータ項(xiàng)目 A を書き込みます。
  • タイムスタンプ 12 のトランザクション T2 がデータ項(xiàng)目 A を読み取ります。
  • タイムスタンプ順序付けプロトコルにより、T1 の書き込み操作が T2 の読み取り操作の前に実行され、正しいトランザクション順序が維持されます。

以上がトランザクションと同時実行制御: DBMSの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLトランザクションの酸性特性は何ですか? MySQLトランザクションの酸性特性は何ですか? Jun 20, 2025 am 01:06 AM

MySQLトランザクションは、酸の特性に従って、データベーストランザクションの信頼性と一貫性を確保します。第一に、Atomicityは、トランザクションが不可分な全體として実行されることを保証します。たとえば、転送操作では、引き出しと預(yù)金を完了するか、同時に発生しない必要があります。第二に、一貫性により、トランザクションはデータベースをある有効な狀態(tài)から別の狀態(tài)に遷移させ、制約やトリガーなどのメカニズムを介して正しいデータロジックを維持します。第三に、分離は、同時実行時の複數(shù)のトランザクションの可視性を制御し、汚い読み、非繰り返しの読書、ファンタジーの読みを防ぎます。 MySQLは、ReadUncommittedおよびReadCommiをサポートしています。

MySQL binディレクトリをシステムパスに追加する方法 MySQL binディレクトリをシステムパスに追加する方法 Jul 01, 2025 am 01:39 AM

MySQLのBINディレクトリをシステムパスに追加するには、異なるオペレーティングシステムに従って構(gòu)成する必要があります。 1。Windowsシステム:MySQLインストールディレクトリでビンフォルダーを見つけます(デフォルトパスは通常C:\ programfiles \ mysql \ mysqlserverx.x \ binです)、「このコンピューター」→「プロパテ?!埂父叨趣圣伐攻匹嘣O(shè)定」→「高度なシステム設(shè)定」→「環(huán)境バリエブル」、「環(huán)境バリアブル」、Mysqlbinを節(jié)約します。コマンドプロンプトとmysql-versionの検証を入力します。 2.MacosおよびLinuxシステム:Bashユーザー編集?/.Bashrcまたは?/.bash_

MySQLのトランザクション分離レベルはどのくらいですか?デフォルトはどれですか? MySQLのトランザクション分離レベルはどのくらいですか?デフォルトはどれですか? Jun 23, 2025 pm 03:05 PM

MySQLのデフォルトのトランザクション分離レベルはRepeatablEREADであり、MVCCおよびGAPロックを介して汚れた読み取りや非回復(fù)可能な読み取りを防ぎ、ほとんどの場合ファントムの読み取りを回避します。他の主要なレベルには、読み取りのない読み物(読み取りcommitted)が含まれ、ダーティリードを許可しますが、最速のパフォーマンスを許可します。データの整合性を確保するが、パフォーマンスを犠牲にする。

MySQLサーバーへの安全なリモート接続を確立します MySQLサーバーへの安全なリモート接続を確立します Jul 04, 2025 am 01:44 AM

tosecurelyconnecttoaremotemysqlserver、usesshtunneling、configuremysqlforremoteacess、setfirewallrules、andconsidersslencryption .first、Encistishansshtunnelwithssh-l3307:localhost:3306user@remote-server-nandconnectviamysql-h127.0.0.1-p3307.second、editmys

MySQL Workbenchはどこで接続情報(bào)を保存しますか MySQL Workbenchはどこで接続情報(bào)を保存しますか Jun 26, 2025 am 05:23 AM

MySQLWorkBenchは、システム構(gòu)成ファイルに接続情報(bào)を保存します。特定のパスは、オペレーティングシステムによって異なります。1。Windowsシステムの%appData%\ mysql \ workbench \ connections.xmlにあります。 2。?/library/applicationsupport/mysql/workbench/connections.xmlにあるMacOSシステムにあります。 3.通常、?/.mysql/workbench/connections.xml in linuxシステムまたは?/.local/share/data/mysql/worにあります

データベース接続プールの背後にある原則は何ですか? データベース接続プールの背後にある原則は何ですか? Jun 20, 2025 am 01:07 AM

AconnectionPoolisacacheofDatabaseconectionsthaterkeptenandReusedReusedReusedReedimponeeficiency.insteadofing andClosingConnectionsforeachReactess、TheapplicationBorrowsAconnectionSectionSectionsepool、useit、andthreturnsit、reducingoverheadandandimporformance.co

MySQLスロークエリログを分析して、パフォーマンスボトルネックを見つける MySQLスロークエリログを分析して、パフォーマンスボトルネックを見つける Jul 04, 2025 am 02:46 AM

MySQLスロークエリログをオンにし、位置づけ可能なパフォーマンスの問題を分析します。 1.構(gòu)成ファイルを編集するか、動的にSLOW_QUERY_LOGおよびLONG_QUERY_TIMEを設(shè)定します。 2。ログには、query_time、lock_time、rows_examinedなどの重要なフィールドが含まれており、効率のボトルネックの判斷を支援します。 3. mysqldumpslowまたはpt-query-digestツールを使用して、ログを効率的に分析します。 4.最適化の提案には、インデックスの追加、Select*の回避、複雑なクエリの分割などが含まれます。たとえば、user_idにインデックスを追加すると、スキャンされた行の數(shù)を大幅に削減し、クエリ効率を改善できます。

mysqlでmysqldumpを使用して論理バックアップを?qū)g行します mysqlでmysqldumpを使用して論理バックアップを?qū)g行します Jul 06, 2025 am 02:55 AM

MySQLDUMPは、MySQLデータベースの論理バックアップを?qū)g行するための一般的なツールです。データベースを再構(gòu)築するための作成および挿入ステートメントを含むSQLファイルを生成します。 1.元のファイルをバックアップするのではなく、データベースの構(gòu)造とコンテンツをポータブルSQLコマンドに変換します。 2。小さなデータベースや選択的回復(fù)に適しており、TBレベルのデータの迅速な回復(fù)には適していません。 3.一般的なオプションには、-single-Transaction、 - database、 - all-database、 - routinesなどが含まれます。 4. MySQLコマンドを使用して回復(fù)中にインポートし、外部キーチェックをオフにして速度を向上させることができます。 5.バックアップを定期的にテストし、圧縮と自動調(diào)整を使用することをお勧めします。

See all articles