MySQL 自体はファイルシステムに基づいて開発されましたが、ロックの存在が異なります。 データベース ソフトウェアである MySQL では、共有リソースへの同時アクセスが避けられません。異なるリソースへの同時アクセスを調整および管理するために、ロック メカニズムが作成されます。ロック メカニズムの存在により、データベースのデータの整合性と一貫性が確保されるためです。 ロック レベルに応じて、ロックは行レベル ロック、テーブル レベル ロック、ページ レベル ロックに分類されます。 共有ロック。トランザクションがデータを読み取ることを可能にします。 MyISAM ストレージ エンジンではテーブル ロックのみがサポートされますが、InnoDB ストレージ エンジンでは行ロックとテーブル ロックがサポートされます。 MyISAM ストレージ エンジンがデータを変更または削除すると、排他ロックが生成され、テーブル全体がロックされるため、同時書き込みのパフォーマンスが低下します。読み取り時には共有ロックが生成され、テーブルがロックされず、読み取りパフォーマンスが向上します。 InnoDB ストレージ エンジンがデータを変更または削除すると、排他ロックが生成されます。ロックされた特定のインデックス レコードは、通常、テーブル内の他の行に影響を与えず、同時書き込みのパフォーマンスが向上します。読み取り時には、共有ロックが生成され、テーブルと行がロックされないため、読み取りパフォーマンスが向上します。 行ロックは、レコード行ではなくインデックス レコードをロックします。インデックスがない場合、暗黙的なインデックスがロックに使用されます。 テーブルの一部の行が排他ロックを取得した場合、テーブルに意図的排他ロックが生成されます。このとき、トランザクションがテーブル全体をロックしようとすると、意図的排他ロックの存在が判明するとトランザクションがブロックされます。意図的ロックは、各行をトラバースして排他ロックがあるかどうか確認する必要がなく、テーブルをロックできるかどうかを直接判断できます。意図的ロックは、行ロックとテーブル ロックの関係を効率的に調整します。 行レベル ロックは、ロック範囲に応じて 3 つのタイプに分けられます。
もちろん、ロックには長所と短所があり、デッドロックが発生する可能性もあります。 最後に、ロックの存在により、後続のトランザクションの機能が強化されます。 MySQL は、データをある一貫性状態から別の一貫性状態に完全に切り替えることができるメカニズムを設計しています。このメカニズムはトランザクションと呼ばれます。 トランザクションには、原子性 (A)、一貫性 (C)、独立性 (I)、永続性 (D) という 4 つの主要な特性があり、これらは ACID と呼ばれます。
原子性と耐久性は REDO ログによって実現され、一貫性は UNDO ログによって実現され、分離性はロック メカニズムによって実現されます。 本質的に、アトミック性は永続性をサポートするために存在します。トランザクションの一部が REDO ログに書き込まれ、クラッシュや停電が発生した場合、トランザクションはアトミック性に従って復元される必要があります。この場合、ログ ファイルに永続化されたデータは、バックトラックによって元に戻す必要があります。 InnoDB ストレージ エンジンでは、REDO ログは ib_logfile0 と ib_logfile1 に対応します。 次に、トランザクションをロールバックする必要がある場合、一貫性を保証する必要があり、一貫性を実現するために UNDO ログが使用されます。UNDO ログには、トランザクションの複数のバージョンの情報の一部が保存されます。UNDO ログを通じて、トランザクションを変更前の状態にロールバックできます。 ここで、MySQL の MVCC マルチバージョン同時実行制御について言及する必要があります。これは、UNDO ログを通じても実装されます。 トランザクションの実行中には、同時に他のトランザクションが存在する可能性があり、複数のトランザクションを互いに分離する、つまり同時実行制御を実現する必要があります。分離を実現するためにロックが使用されます。 MySQL のトランザクション分離レベルには、Read Uncommitted、Read Committed、Read Repeatable、および Serializable があります。このうち、コミット読み取りと繰り返し読み取りは、MVCC マルチバージョン同時実行制御に基づいて実装されています。 ロックはトランザクションの同時実行制御に利点をもたらしますが、ダーティ リード、反復不可能なリード、ファントム リードなどの欠点ももたらします。 ダーティ リードとは、トランザクションが別のトランザクションのコミットされていないコンテンツを読み取ることを意味します。別のトランザクションがロールバックされると、ダーティ データが表示されます。 ダーティ リード問題を解決するには、分離レベルを少なくとも Read Committed に設定する必要があります。 上記は、MySQL のロックとトランザクションの詳細についての簡単な分析です。MySQL のロックとトランザクションの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Dockerを使用して完全な開発環境を構築するための詳細なチュートリアル
>>: Vue のルータールーティングの 2 つのモード (ハッシュと履歴) の詳細な説明
目次成果を達成する転がり荷重知識備蓄コンポーネントのパッケージ1. コンポーネントの命名2. 小道具...
目次1. 準備2. 減圧3. 統合を開始する1. 準備Ckeditor_4.5.7_full + C...
目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...
目次1. 基本的な使い方2. 画像量の制御3. 画像形式の制限/複数の画像を選択可能補足: vueプ...
CN2ラインとは何ですか? CN2 は、China Telecom Next Carrier Ne...
前: マークアップ言語 - フレーズ要素 オリジナルソース 第 7 章 アンカーHTML のリンクの...
序文これらの原則は実際の戦闘から要約されています。あらゆる原則の背後には血なまぐさい教訓があるこれら...
fdisk と比較すると、parted はあまり使用されず、主に 2T を超えるパーティションに使用...
目次1. 左端接頭辞原則2. 表に戻る3. インデックスプッシュダウン序文:インデックス プッシュダ...
目次導入インストール表示フィールドフィルターソートキー導入Rhit は、標準フォルダー (gzip ...
【質問】 HP サーバーを使用しています。SSD が IOPS 約 5000 を書き込むと、%uti...
目次1 現在のデータベースの内容を表示し、データベースをバックアップする2 bin_log関数を有効...
目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...
上の記事で、SWFObject V1.5 の使い方の紹介は一旦終了です。これから、SWFObject...
MySQLとElasticsearch間のデータ非対称性問題の解決策jdbc-input-plugi...