データベーストランザクション


トランザクションとは?


トランザクションは、作業の整合性を保証します.
すなわち、すべての論理タスクセットを完全に処理または処理できない場合、一部のタスクのみが適用されることを回避するために、元の状態に戻ることができる.
ユーザの観点から,操作の論理単位と理解でき,システムの観点から,データにアクセスまたは変更するプログラムの単位と理解できる.

トランザクションとロック


-ロック:同期を制御する機能
-取引:データの一貫性を確保するための機能
勘定科目のデータ整合性:データ値が正確である必要があります.
つまり、話にならないデータがあってはいけない.
勘定科目のデータの一貫性:一貫性があり、矛盾しない
->つまり、一部のデータの値は互いに一致しなければならない.
🔒 ロック:複数のコネクタが同じリソース(レコードまたはテーブル)を同時に要求する場合、1つの時点で1つのコネクタしか変更できません.
🔒 ≪トランザクション|Transaction|emdw≫:1つの論理アクション・セットに1つのクエリーがあるか、2つ以上のクエリーがあるかにかかわらず、論理アクション・セット自体が100%適用されるか、適用されないかを確認します.

トランザクションのプロパティ


トランザクションはACIDの4つの特性を満たす必要があります。


1.原子性
取引中に問題が発生した場合は、問題が発生しない限り、すべての操作を実行する必要があります.
2.一貫性
トランザクションが完了した場合でも、トランザクションが発生する前と同じように、データの一貫性を確保します.
3.孤立性(Isolation)
すべての取引は独立して完成しなければならず、互いに干渉しない.
4.持続可能性
トランザクションが正常に終了したら、タスクの結果をデータベースに永続的に保存する必要があります.

取引ステータス



Active
トランザクションのアクティブな状態.トランザクションは実行中であり、アクション中の状態です.
Failed
トランザクションの失敗ステータス.取引がこれ以上正常に行われない状態を指す.
Partially committed
トランザクションのコミットコマンドが到着しました.トランザクションのコミット前のsql文が実行され、コミットされたステータスのみが残ります.
Commited
トランザクションの正常な完了ステータス
Aborted
トランザクションのキャンセルステータス.トランザクションをキャンセルし、トランザクションを実行する前のデータのステータスに戻ります.

「協力提出」と「Committed」の違い


Commitリクエストの受信->PartialCommed
  • Commit->Committed
  • エラー発生->Failed
  • これは、CommittedがCommit要求を受信すると、CommittedはCommitが正常に完了した状態を示すことを意味する.

    取引の使用上の注意事項


    トランザクションは、必要最小限のコードにのみ使用することが望ましい.

    どうしたんですか。🤷🏻‍♀️


    一般的に、データベース接続の数は限られています.ただし、単位プログラムごとにコネクタを持つ時間が長い場合は、空きコネクタの数が減少します.これにより、コネクタを単位図ごとに取得するために必要な待機がある場合がある.

    硬直状態(Deadlock)


    行き詰まりとは


    硬直状態とは、2つ以上のトランザクションがリソースのロックを取得すると同時に、別のトランザクションに要求されるロックであり、どのくらい待っても状況は変わりません.

    MySQLでの行き詰まりの例


    MySQL MVCCの機能に従って、トランザクションで更新操作を実行するとロックが得られます.
    マルチバージョン同時制御(MVCC)
    これは、同期性を制御するために同時にアクセスできるデータベースの1つです.
    •従来のRDBMSよりも高速
  • 非アクティブデータが蓄積されているため、システム整理が必要

  • トランザクション1がテーブルBの最初のロー・ロックを取得し、トランザクション2もテーブルAの最初のロー・ロックを取得したと仮定します.
    トランザクションをコミットせずに最初のローのロックを要求した場合、
    Transaction 1> insert into A values(1);
    Transaction 2> insert into B values(1);
    ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
    
    Deadlockが発生しました.

    Deadlockの周波数を下げる方法

  • 事務の提出が多い
  • 所定の順序でテーブルにアクセスする.
    上で、トランザクション1はテーブルB->Aの順にアクセスし、トランザクション2はテーブルA->Bの順にアクセス->トランザクションを同じテーブルの順に折りたたむために、
  • 読み書きロックの使用を避ける(SELECTからFOR UPDATE)