ホームページ データベース mysql チュートリアル MySQL が RC トランザクション分離を実装する方法

MySQL が RC トランザクション分離を実装する方法

May 28, 2023 pm 03:04 PM
mysql rc

ReadView メカニズムは、UNDO ログのバージョン チェーンに基づいた読み取りビュー メカニズムです。トランザクションによって更新されると、各トランザクションは ReadView を生成します

  • それ自体のデータ。

  • または ReadView を生成する前に送信されたトランザクションによって変更された値を読み取ることも、

  • を読み取ることもできます。

    ただし、ReadView を生成すると、すでにアクティブなトランザクションが存在しますが、ReadView の生成後にデータを変更して送信すると、現時点では読み取ることができません

  • またはReadView を生成し、データを変更して送信するトランザクションを開いた場合、

を読み取ることができないため、上記のメカニズムは ReadView# になります。 ##ReadView に基づいて RC を実装するにはどうすればよいですか?コア設計: トランザクションが RC を設定すると、クエリを開始するたびに ReadView が再生成されます。

データベースにデータ行があり、これはトランザクション ID=50 のトランザクションです。かなり前に挿入されました。現在アクティブなトランザクションは次のとおりです:

  • トランザクション A (id=60)

  • トランザクション B (id=70)

今すぐトランザクション B は、このデータ b を更新するために更新を開始します。このとき、データの trx_id はトランザクション B の id=70 になり、同時に undo ログが生成されます。

MySQL が RC トランザクション分離を実装する方法

この時点で、トランザクション A が開始されます。クエリ操作により ReadView が生成されます。

MySQL が RC トランザクション分離を実装する方法##この時点で、トランザクション A は、クエリを実行すると、現在のデータの trx_id=70 がわかります。つまり、これは ReadView のトランザクション ID 範囲に属しており、ReadView を生成する前にこのアクティブなトランザクションが存在したことを意味します。このデータの値を変更したのはこのトランザクションでしたが、この時点ではトランザクション B はまだ送信されていません。 ReadView の m_ids アクティブ トランザクション リスト ここでは、ID [60, 70] が 2 つありますが、このとき

ReadView

メカニズムに従って、トランザクション A はトランザクション B によって変更された値 b を見つけることができません。 次に、UNDO ログのバージョン チェーンを下方向に検索すると、元の値が見つかります。その trx_id が 50 であることがわかります。これは、現在の ReadView の min_trx_id よりも小さいです。これは、トランザクションがあったことを意味します。 ReadView を生成する前に挿入されました。この値はずっと前に取得されて送信されているため、元の値を見つけることができます。

トランザクション B がコミットされたと仮定します。これは、トランザクション B がデータベース内でアクティブなトランザクションではなくなったことを意味します。次回トランザクション A がクエリを実行すると、トランザクション B の変更された値を読み取ることができます。では、トランザクション A は、送信されたトランザクション B の変更された値をどのようにして読み取ることができるのでしょうか?

トランザクション A が次回クエリを開始し、ReadView を生成できるようにします。データベース内でアクティブなトランザクションはトランザクション A のみであるため、次のようになります:

  • min_trx_id

    は 60

  • mac_trx_id

    は 71

  • #m_ids=60

    、トランザクション B の id=70 は、m_idsアクティブなトランザクション リスト

  • には表示されません。この時点で、トランザクション A はこの ReadView に基づいて再度クエリを実行し、このデータの trx_id = 70 は、ReadView の min_trx_id と max_trx_id の範囲の間にありますが、現時点では m_ids リストに含まれていないため、この ReadView を生成する前にトランザクション B が送信されていることを示します。クエリ操作を実行すると、トランザクション B によって行われた更新操作を確認できます。これにより、トランザクション A は値 B を取得します。

以上がMySQL が RC トランザクション分離を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ホットトピック

MySQLでケースステートメントを使用する方法は? MySQLでケースステートメントを使用する方法は? Sep 20, 2025 am 02:00 AM

答えは次のとおりです。MySQLのケースステートメントは、クエリに条件付きロジックを実装するために使用され、2つのフォームをサポートします:シンプルと検索。 Select、Where、Orderbyなどの条項では、異なる値を動的に返すことができます。たとえば、分数セグメントによるスコアの分類、集計関数を組み合わせて状態数をカウントするか、秩序の特定の役割に優先順位を付けることが必要であり、デフォルトの状況を処理するために他の人を使用することをお勧めします。

MySQLバックアップをスクリプトで自動化する方法は? MySQLバックアップをスクリプトで自動化する方法は? Sep 21, 2025 am 02:24 AM

データベース構成とMySQLDUMPコマンドを含むシェルスクリプトを作成し、mysql_backup.shとして保存します。 2。〜/.my.cnfファイルを作成してMySQL資格情報を保存し、セキュリティを改善するために600アクセス許可を設定し、スクリプトを変更して構成ファイル認証を使用します。 3. chmod xを使用してスクリプトを実行可能にし、バックアップが成功したかどうかを手動でテストします。 4. 02/path/to/mysql_backup.sh >>/to/backup/backup.log2>&1など、Crontab-eを介して時限タスクを追加し、毎日午前2時に自動バックアップとロギングを実現します。 5。

行が存在する場合は更新する方法またはmysqlにない場合は挿入する方法 行が存在する場合は更新する方法またはmysqlにない場合は挿入する方法 Sep 21, 2025 am 01:45 AM

挿入... onduplicateKeyUpdateの実装が存在する場合は更新されます。それ以外の場合は挿入され、一意または主要なキーの制約が必要です。 2。代替IDの変化を引き起こす可能性がある、交換の削除後に再挿入します。 3. Insertignoreは挿入のみを挿入し、繰り返しデータをせず、更新しません。 UpSertの最初の実装を使用することをお勧めします。

mysqlでサブ征服を使用する方法は? mysqlでサブ征服を使用する方法は? Sep 20, 2025 am 01:07 AM

別のクエリの結果に基づいて、フィルタリングまたは計算を実装するための条項を選択した場所でサブ征服を使用できます。 Inなどのオペレーターは、すべてが一般的に使用されます。エイリアスは、派生テーブルとして必要です。単一の値を選択して返す必要があります。関連するサブクリーは、各行を実行するために外部クエリに依存しています。たとえば、平均給与が部門よりも高い従業員を確認するか、会社の平均給与リストを追加します。サブQueriesは論理的な明確さを改善しますが、パフォーマンスは参加よりも低い場合があるため、予想される結果を返すことを確認する必要があります。

mysqlで説明コマンドを使用する方法は? mysqlで説明コマンドを使用する方法は? Sep 18, 2025 am 01:48 AM

説明の説明、showindexusage、table -readorder、androwfilteringtooptimizeperformance; useitbeforeselecttoAnalyzesteps、checkkeycolumnslikeTypeandrows、識別の識別のために、cechycolumnslikeTypeandrows、およびcembinewithingingionstrageiisforigheiiseforigheiiseatigiestraisise

mysqlで異なる値を選択する方法は? mysqlで異なる値を選択する方法は? Sep 16, 2025 am 12:52 AM

個別のキーワードを使用して、指定された列から重複した値を削除し、一意の値を返します。 1.基本的な構文は、selectsinctinctcolumn_namefromtable_nameです。 2。selectdistinctcityfromcustomersなどの単一列の一意の値をクエリします。 3. SelectDistinctCity、StateFromcustomersなどの複数の列の一意の組み合わせをクエリします。 4。where句を使用してフィルタリングし、selectdistinctproduct_namefromorders whereOrder_date> '202などの一意の値を取得します。

MySQLでタイムゾーンを処理する方法は? MySQLでタイムゾーンを処理する方法は? Sep 20, 2025 am 04:37 AM

UTCを使用して時間を保存し、MySQLサーバータイムゾーンをUTCに設定し、タイムスタンプを使用して自動タイムゾーン変換を実現し、セッションのユーザーのニーズに応じてタイムゾーンを調整し、Convert_TZ関数を介してローカルタイムを表示し、タイムゾーンテーブルがロードされていることを確認します。

MySQLの2つのポイント間の距離を計算する方法 MySQLの2つのポイント間の距離を計算する方法 Sep 21, 2025 am 02:15 AM

MySQLは、Haversine式またはST_Distance_Sphere関数を介して地理的距離を計算できます。前者はすべてのバージョンに適しており、後者は5.7からより簡単で正確な球形距離計算を提供します。

See all articles