トランザクションとは何ですか?
分離と分離レベル トランザクションといえば、ACID (原子性、一貫性、独立性、永続性) を思い浮かべるでしょう。今日は、I、つまり「独立性」についてお話します。データベース上で複数のトランザクションが同時に実行されると、ダーティ リード、非反復リード、ファントム リードが発生する可能性があります。これらの問題を解決するために、「分離レベル」という概念が導入されました。分離レベルが強くなるほどパフォーマンスは低下するため、パフォーマンスと分離レベルの間でバランスを取る必要があります。 SQL 標準トランザクション分離レベルには次のものがあります。
主な理由は、コミットされた読み取りと繰り返し可能な読み取りを区別することが難しいため、小さな例を見てみましょう。まずテーブルを作成し、データ1を挿入します データベーステストを作成します。 使用テスト; テーブル test(id int primary key) を作成します。 test(id) 値(1) に挿入します。
異なる分離レベルでのトランザクション A の異なる戻り結果、つまり図の V1、V2、V3 の戻り値を見てみましょう。
データベースにビューが作成され、アクセス時にビューの論理結果が使用されます。 「繰り返し可能読み取り」分離レベルでは、このビューはトランザクションの開始時に作成され、トランザクション全体で使用されます。 「Read Committed」分離レベルでは、このビューは各 SQL ステートメントの実行の開始時に作成されます。 ここで注目すべきは、「コミットされていない読み取り」分離レベルでは、ビューの概念を使用せずにレコードの最新の値を直接返すのに対し、「シリアル化可能」分離レベルでは、並列アクセスを回避するためにロックを直接使用するということです。
個人の銀行口座の表を管理しているとします。 1 つのテーブルには毎月末の残高が保存され、もう 1 つのテーブルには請求書の詳細が保存されます。このとき、データの校正、つまり先月の残高と現在の残高の差が今月の請求明細と一致しているかどうかを判断する必要があります。校正プロセス中に、ユーザーが新しいトランザクションを実行しても、校正結果に影響が及ばないことを期待する必要があります。 トランザクション分離の実装 実際、MySQL では、レコードが更新されるたびに、レコードごとにロールバック操作が記録されます。レコードの最新の値を使用して、ロールバック操作を通じて以前の状態の値を取得できます。値が 1 から 2、3、4 に順番に変更されると、ロールバック ログには次のようなレコードが記録されます。 現在の値は 4 ですが、このレコードを照会すると、異なる時間に開始されたトランザクションには異なる読み取りビューが設定されます。図に示すように、ビュー A、B、C では、このレコードの値はそれぞれ 1、2、4 です。同じレコードがシステム内で複数のバージョンを持つことができ、これがデータベースのマルチバージョン同時実行制御 (MVCC) です。読み取りビュー A の場合、1 を取得するには、図内のすべてのロールバック操作を順番に実行して現在の値を取得する必要があります。 4 を 5 に変更する別のトランザクションがある場合でも、このトランザクションは読み取りビュー A、B、および C に対応するトランザクションと競合しません。
不要になったら削除してください。つまり、システムは、これらのロールバック ログを使用する必要がないトランザクションがある場合、ロールバック ログを削除すると判断することになります。
それは、このロールバック ログより前の読み取りビューがシステム内に存在しない場合です。
トランザクションとは、システム内に非常に古いトランザクション ビューが存在することを意味します。トランザクションがコミットされる前に、ロールバック レコードを保持する必要があり、大量のストレージ領域が占有されることになります。さらに、トランザクションはロック リソースを占有し、データベースがダウンする可能性があります。 上記は、msyql トランザクション分離について知っておく必要のある詳細です。mysql トランザクション分離の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: JavaScript 変数の昇格についての簡単な説明
>>: Ubuntu 20.04 ファイアウォール設定の簡単なチュートリアル (初心者)
SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...
MySQL 8 Windows版 zipインストール手順(ダウンロードアドレス) 1. ZIPファイ...
以前、プロジェクトを行う際に ECharts を使用しました。今日はそれをメモとして整理し、より多く...
1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...
3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイス...
1. 現在の日付 DATE_SUB(curdate(),INTERVAL 0 DAY) を選択します...
Azure Container Registry は、Docker Registry 2.0 仕様に...
1. カスタムフックとは何かロジックの再利用簡単に言えば、カスタム フックを使用すると、特定のコンポ...
目次mysql フィルター レプリケーションメインデータベースに実装ライブラリから実装いくつかの質問...
初めての投稿ですので、間違いや問題点などありましたら、コメント欄で指摘していただければ、今後改善させ...
この記事の例では、簡単なショッピングカート機能を実現するためのjsの具体的なコードを参考までに共有し...
ウェブフロントエンド1学生証名前性別年01張三男20 02李思女性21総人数60フォームのコンポーネ...
出典: http://www.ruoyi.vip/ 'vue' から Vue をイン...
目次テクノロジースタック効果分析するテクノロジースタックサイドバー用Antdtabは要素を使用します...
目次1. プロキシモジュールをインストールする2. プロキシを設定する1. プロキシモジュールをイン...