シリアル化の実装 InnoDB は 2 つの方法でシリアル化を実装します。 まず、SELECT 文が明示的なトランザクション ブロック内にある場合 (表 11-9 のケース番号 1 を実行する場合など)、LOCK_S ロックが適用されます。表 11-6 (レコード ロック トランザクション ロック互換性表) によると、LOCK_S ロックは書き込みロックを除外するため、シリアル化分離レベルでは同時読み取り操作のみが許可され、同時書き込みは禁止され、シリアル化可能性が実現されます。 対応するコードは次のとおりです。 ha_innobase::external_lock(...) {... ロックタイプが F_UNLCK ではない場合 /* MySQL は新しいテーブルロックを設定しています */ ... if (trx->isolation_level == TRX_ISO_SERIALIZABLE //シリアル化分離レベル && m_prebuilt->select_lock_type == LOCK_NONE && thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { // 明示的なトランザクションブロック内 /* シリアル化可能な実行を実現するために、InnoDB は概念的にすべての SELECT に 'LOCK IN SHARE MODE' を追加します それ以外の場合は一貫性のある読み取りになります。例外は、AUTOCOMMIT=1 モードでの一貫性のある読み取りです。 これらは読み取り専用トランザクションであり、一貫性のある読み取りとして実行される場合はシリアル化できることがわかっています。 */ m_prebuilt->select_lock_type = LOCK_S; //読み取りロックを追加します。つまり、「LOCK IN SHARE MODE」です。 m_prebuilt->stored_select_lock_type = LOCK_S; } // それ以外の場合はロックしません(これも非常に重要です) ... } それ以外 { TrxInInnoDB::end_stmt(trx); DEBUG_SYNC_C("ha_innobase_end_statement"); } ...} 2 番目の方法は、SELECT ステートメントが明示的なトランザクション ブロック内にない場合に、最新のスナップショット (トランザクションの開始時) を取得してからデータを読み取ることです。このとき、スナップショットベースの一貫性読み取りではロックが不要なため、そのロック状況は表 11-9 の番号 2 に該当する状況になります。 表11-9 シリアル化分離レベルロック 例: S0: さらに、FLUSH...WITH READ LOCK ステートメントの場合、シリアル化分離レベルでは読み取りロック LOCK_S も必要です。 コードは次のとおりです。 ha_innobase::store_lock( ... /* FLUSH TABLES をチェックします...読み取りロック付き */ trx->isolation_level == TRX_ISO_SERIALIZABLEの場合{ m_prebuilt->select_lock_type = LOCK_S; m_prebuilt->stored_select_lock_type = LOCK_S; } それ以外 { m_prebuilt->select_lock_type = LOCK_NONE; m_prebuilt->stored_select_lock_type = LOCK_NONE; } ... } シリアル化に関連するのは 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。 以下もご興味があるかもしれません:
|
>>: Ubuntu の Python で C/C++ メソッドを呼び出すダイナミック リンク ライブラリの詳細な説明
時は経つのが早く、わずか 6 日後には 2013 年が歴史になります。今年は、いわゆるトレンドが多す...
Flash ファイル形式: .FLV および .SWFフラッシュ ビデオ形式には、.flv と .s...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...
日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...
docker を使用すると、ファイルをマウントできない場合があります。これは、仮想マシンの共有フォル...
目次1. 基本理論1.1 取引1.2 分散トランザクション2. 分散トランザクションソリューション2...
app.js: スタートアップファイル、またはエントリファイルpackage.json: プロジェク...
序文少し前に、興味深い問題を目にしました。Vue のデータが変更された後に、ビューを同期的に更新する...
1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...
:= と = の違い=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の...
目次0. Webpackとは1. Webpackの使用2. Webpackのコアコンセプト2.1 エ...
目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...
目次浅いコピーディープコピー補充する要約するコピー(クローン、複製などとも呼ばれる)ですが、ディープ...
Vite とは何ですか? (フロントエンドの新しいおもちゃです) Vite は、ネイティブ ES モ...