みなさんこんにちは、久しぶりです!本日も「ティーチャーガールデータベースシステム」の研究を続けています。データベースを学ぶように女の子を教える、あなたはそのようなクールなタイトルを見ませんでしたか?「言葉は驚くべきものではなく、終わりがない」、はい、タイトルはとてもクールです。
私の妹シャオブは18歳で、キャンパスの女神で、優れた成績、多目的なスポーツ、穏やかで直立した性格を持っています。しかし、私が知る限り、皆の目には、輝く小さな埋葬は、ハムスターのマントを着て地面を転がるスーパーハウスレディーでした。そしてこれらすべての変化はその夜から始まった。
それ以来、シャオ・ブは私に宿題を手伝ってくれるようしばしば頼みました。今日、彼女はデータベースシステムの同時実行制御を理解したいと考えています。このチュートリアルでは、Xiao Buとの対話による同時実行制御について説明します。
事業
トランザクション(トランザクション)は、データベースシステムの高度な機能を完了するためにデータベースで実行される1つ以上の操作のシーケンスです。
SQLトランザクションステートメント
-
トランザクションの開始(開始):
BEGIN;
-
トランザクションのコミット(コミット):
COMMIT;
データベースへのトランザクションの変更をデータベースに永続的に書き込みます -
トランザクションの中止(中止):
ROLLBACK;
-
トランザクションが実行されたことがないかのように、データベースに対するすべてのトランザクション変更を元に戻します
-
トランザクションはそれ自体またはDBMSによって終了できます
トランザクションのACIDプロパティ(TheACIDProperties)
原子性:「すべて」
-
トランザクションの操作はすべて実行されるか、まったく行われない
-
トランザクションの実行の終了は2つだけです
- すべての操作を実行した後に送信⇒原子性を破壊せずに
- いくつかの操作を実行した後に打ち切る⇒原子性を破壊する
- DBMSはトランザクションの原子性を保証します
中止されたトランザクション(abortedtxn)によって実行された操作は、元に戻す(元に戻す)必要があります
一貫性:「itlookscorrecttome」
トランザクション手順が正しく、トランザクションの開始時にデータベースが一貫した状態にある場合、トランザクションが終了してもデータベースは一貫した状態にあります。
- ユーザーはトランザクションの一貫性を保証します(間違ったプログラムを作成しないでください)
分離: "asifalone"
トランザクションの実行が他のトランザクションによって妨害されない
複数のトランザクションを実行するには2つの方法があります
-
逐次実行⇒分離を破壊しない
-
実行をインターリーブする⇒分離が壊れる可能性がある
DBMSはトランザクションの分離を保証します
- 同時実行制御(concurrencycontrol):複数のトランザクションの操作の正しいクロス実行順序を決定します
耐久性:「survivefailures」
-
トランザクションがコミットされたら、データベースへのすべての変更をデータベースに永続的に書き込む必要があります
-
失敗(失敗)により、トランザクションはデータベースを変更し、4つの結果が生じます。
- 送信されたトランザクションに対するすべての変更は永続的に保存されています⇒耐久性を破棄しないでください
- トランザクションをコミットするための変更は、部分的に永続的なストレージのみです⇒永続性を破棄します
- 中止されたトランザクションの一部の変更が永続化されました⇒永続性を破棄します
- 中止されたトランザクションの変更は永続的なストレージではありません⇒耐久性は損なわれません
- DBMSはトランザクションの耐久性を保証します
- やり直し(やり直し)トランザクションをコミットしてデータベースを変更します
- データベースを変更するためにトランザクションを元に戻す(元に戻す)
同時実行制御
基本的な概念
- データベース(データベース):データオブジェクトの固定コレクション
- データオブジェクトは、属性値、タプル、ページ、関係、データベースなどの抽象的な概念です
- データオブジェクトはデータベース要素とも呼ばれます
- データの挿入と削除は考慮しません
- トランザクション:データベースオブジェクトに対する一連の読み取り/書き込み操作
- トランザクションはデータベースに対して多くの操作を実行できますが、DBMSはデータオブジェクトに対するトランザクションの読み取り/書き込み操作のみを考慮します
スケジュール
スケジュールは、1つ以上のトランザクションの一連の重要な操作です。
シリアルスケジューリング(SerialSchedules)
スケジュール内の異なるトランザクションの操作がインターリーブされていない場合、そのスケジュールはシリアルスケジュールです。
非シリアルスケジューリング(NonserialSchedules)
シリアルスケジューリングではないスケジューリングは、非シリアルスケジューリングと呼ばれます。
スケジュールの正確さ(スケジュールの正確さ)
各トランザクションは分離して実行され(executedinisolation)、データベースを1つの一貫した状態(一貫した状態)から別の一貫した状態に変更します。
シリアルスケジューリングはデータベースの一貫性を維持できます
非シリアルスケジューリングはデータベースの一貫性を破壊する可能性があります
異常
非シリアルスケジューリングはトランザクションの異常な動作(異常動作)につながり、それによりデータベースの一貫性が破壊されます
脏写(DirtyWrites)
T1が送信される前に、T1によって書き込まれた値はT2によって上書きされました。
ダーティーリード
UnrepeatableReads(UnrepeatableReads)
-
T2はT1によって読み取られたAの値を変更し、T2はコミットします。
-
T1が値Aを再度読み取ろうとすると、T1がAの値を変更しなくても、T1は異なる結果を取得します。
ファントム
同等のスケジュール
2つのスケジュールがどのデータベースインスタンスにも同じ影響を与える場合、それらは同等です。
シリアライズ可能なスケジュール
スケジュールがシリアルスケジュールに相当する場合、そのスケジュールはシリアル化可能なスケジュール(serializableschedule)です。
アドバンテージ
短所
-
シリアライズ可能なスケジューリングの同時実行性が低い
-
一部のシナリオでは、同時トランザクションを厳密に分離する必要がない
-
1つのトランザクションによる一部のオブジェクトの変更は、他の並行トランザクションに公開される可能性があります
-
弱い分離レベル(weakerisolationlevel)は、システムの同時実行性を向上させることができます
分離レベル
異なる分離レベルでは、1つのトランザクションによって変更されたオブジェクトの値は、他の並行トランザクションの可視性とは異なります
- トランザクション分離レベルは、トランザクションが開始する前に設定できます
SETTRANSACTIONISOLATIONLEVEL<isolation-level>;
コミットされていない読み取り
コミットされていないトランザクション(uncommittedtxn)によって行われた変更は、他のトランザクションから見える
コミットされた読み取り
コミットされたトランザクション(committedtxn)によって行われた変更のみが、他のトランザクションから見える。
反復可能読み取り(RepeatableRead)
トランザクションがオブジェクトXの値を変更しない場合、いつでもトランザクションによって読み取られるX値は、トランザクションの開始時に読み取られるX値と等しくなります。
シリアライズ可能
同時実行制御のシリアル化
競合はシリアライズ可能
シリアライズ可能な分離レベル(enforce)をサポートするDBMS実装はすべて競合シリアライズ可能です
-
衝突のシリアライズ可能な状態は、通常のシリアライズ可能な状態よりも厳しい
-
DBMSでの実装を容易にするために、競合をシリアル化できます。
衝突(Con fl icts)
2つの操作が競合する(con fl ict)。
- これら2つの操作は異なるトランザクションに属しています
- これらの2つの操作には同じオブジェクトが含まれ、少なくとも1つの操作は
書き込みと書き込みの競合
書き込みと書き込みの競合により、ダーティ書き込みが発生する可能性があります(dirtywrite)
書き込みと読み取りの競合
書き込みと読み取りの競合によりダーティリードが発生する可能性がある
読み取りと書き込みの競合
読み取りと書き込みの競合により、読み取りが繰り返されなくなる可能性があります
衝突等価(Con ic ict等価)
2つのスケジューリングが同じトランザクションの同じ操作に関係している場合、2つのスケジューリングの競合は同等です(等価)。
- 競合する操作の各ペアは、両方のスケジュールで同じ順序です
シリアライズ可能な競合スケジューリング
スケジュールの競合が特定のシリアルスケジュールに相当する場合、そのスケジュールは競合するシリアル化可能なスケジュールです。
競合しないシリアル化可能なスケジューリング
まとめ
遊んで、遊んで、遊んで、学習をからかわないでください。
この記事では、同時実行制御におけるトランザクション、スケジューリング、分離レベル、およびシリアル化について説明します。勉強するときの理解と記憶を深める。