ロックの概要ロックは、コンピューターが複数のプロセスまたはスレッドを調整してリソースにアクセスするためのメカニズムです。 データベースでは、従来のコンピュータ リソース (CPU、RAM、I/O など) の競合に加えて、データは多くのユーザーが共有するリソースでもあります。同時データ アクセスの一貫性と有効性を保証するには、すべてのデータベースが解決しなければならない問題です。ロックの競合も、データベースの同時アクセス パフォーマンスに影響を与える重要な要素です。この観点から、ロックはデータベースにとって特に重要で、より複雑です。 ロックの分類データベース操作の粒度テーブルロック: 操作中は、テーブル行ロック全体がロックされます。 操作中は現在の操作ラインがロックされます。 データ操作の種類読み取りロック(共有ロック): 同じデータに対して、互いの書き込みロック (排他ロック) に影響を与えることなく、複数の読み取り操作を同時に実行できます。 操作が完了するまで、他の書き込みロックと読み取りロックがブロックされます。 MySQL ロック他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純です。最も注目すべき特徴は、異なるストレージ エンジンが異なるロック メカニズムをサポートしていることです。 さまざまなストレージエンジンでサポートされるロックレベル
ロックの紹介どのロックが優れているかを一概に言うことは困難です。特定のアプリケーション シナリオに基づいて、どのロックがより適しているかを分析する必要があります。
MyISAM テーブルロックテーブルロックを追加する方法クエリ ステートメント (選択) を実行する前に、MyISAM は関連するすべてのテーブルを自動的にロックします。更新操作 (更新、削除、挿入など) を実行する前に、関連するテーブルに書き込みロックを自動的に追加します。このプロセスでは、ユーザーの介入は必要ありません。したがって、通常、ユーザーは LOCK TABLE コマンドを直接使用して MyISAM テーブルを明示的にロックする必要はありません。 ロック解除読み取りロックを追加します: テーブル table_name の読み取りをロックします。 ---テーブルのロックを解除します。 書き込みロックを追加: テーブル table_name の書き込みをロックします。 書き込みロックを追加します。現在のセッションは読み取りと書き込みが可能で、他のセッションはブロックされます (待機中)。読み取りロックは書き込みを制限し、書き込みロックは読み取りと書き込みを制限します。 ロック競合1. MyISAM テーブルに対する読み取り操作は、同じテーブルに対する他のユーザーの読み取り要求をブロックしませんが、同じテーブルに対する書き込み要求をブロックします。 2. MyISAM への書き込み操作は、テーブル 1 に対する他のユーザーの読み取りおよび書き込み操作をブロックします。 3. MyISAM ロックのスケジュールは書き込み優先です。 メインテーブルとしては適していません。ロックを書き込んだ後、他のスレッドによる大量の更新により、クエリがロックを取得することが困難になり、永続的なブロックが発生する可能性があります。 ロックの使用ロックの使用状況を確認し、開いているテーブルを表示します。 テーブルのロック状態を確認します。「table_locks%」のような状態が表示されます。 Table_locks_immediate: テーブルレベルのロックが取得できる回数。即時ロックが取得されるたびに、値が 1 ずつ増加します。 Table_locks_waited: ロックをすぐに取得できない場合に待機する必要がある回数。待機するたびに値が 1 ずつ増加します。これは、テーブル レベルのロック競合の重大度を判断するために使用できます。 InnoDB ロックInnoDBとMyISAMの最大の違いは、まずトランザクションをサポートしていること、次に行レベルのロックを使用していることです。 行ロック共有ロック: 読み取りロックとも呼ばれるこのロックは、複数のトランザクションで共有できますが、読み取りのみ可能で、排他ロックへの書き込みはできません。 書き込みロックとも呼ばれるロックは共有されません。ロックを取得できないトランザクションは、読み取りおよび書き込み操作を実行できません。更新、削除、および挿入ステートメントが実行されると、innoDB は関連するデータ セットに排他ロックを自動的に追加します。異なる選択ステートメントにはロックは追加されません。ロックはクエリに明示的に追加されます。共有ロックを追加します。 select * from table_name where ... 共有モードでロック 排他ロックを追加します。 table_name から * を選択します。ここで ... 更新用 ロックのエスカレーションインデックス障害、行ロックがテーブルロックにアップグレードされ、その背後にインデックスがない場合、行ロックもテーブルロックにアップグレードされます。 ギャップロックInnoDBはギャップに存在しないデータもロックします。これをギャップロックと呼びます。 ロック競合'innodb_row_lock%' のようなステータスを表示します。 Innodb_row_lock_current_waits 現在待機中のロックの数 Innodb_row_lock_time ロックの合計期間 Innodb_row_lock_time_avg ロックの平均期間 Innodb_row_lock_time_max ロックの最大期間 Innodb_row_lock_waits システムが起動してからの待機の合計数 要約するinnoDB ストレージ エンジンは行ロックを実装します。ロック メカニズムの実装によって生じるパフォーマンス消費はテーブル ロックよりも高くなる可能性がありますが、全体的な同時処理能力の点では MyISAM テーブル ロックよりもはるかに優れています。システムの同時処理が比較的高い場合、InnoDB の全体的なパフォーマンスは MyISAM よりも明らかに優れています。 最適化の提案非インデックス行ロックをテーブル ロックにアップグレードすることを回避するために、すべてのデータ取得がインデックスを介して完了するようにしてください。インデックスを合理的に設計し、ロックの範囲を最小限に抑えます。ギャップ ロックを回避するために、インデックス条件とインデックス範囲を最小限に抑えます。トランザクション サイズを制御し、ロックされるリソースの量と時間の長さを削減します。可能な限り、低レベルのトランザクション分離を使用します (ビジネス ニーズを満たす必要があります)。 さまざまな MySQL ロックの詳細な理解に関するこの記事はこれで終わりです。より関連性の高い MySQL ロック コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Ubuntu 18.04 で apt ソースを Alibaba Cloud ソースに変更する詳細なプロセス
>>: CSSを使用して、頻繁に表示される奇妙なボタンを簡単に実装します。
目次Dockerとは展開する1. イメージをプルする2. 画像を表示する3. コンテナを実行する4....
この記事では、例を使用して、MySQL 共同インデックスの機能と使用方法を説明します。ご参考までに、...
この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...
まず最初に指摘しておきたいのは、人間は視覚的な区分を通じてコンテンツの意味を判断できるが、検索エ...
Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コア...
プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...
MySQL DATE_ADD(date,INTERVAL expr type) 関数と ADDDA...
目次序文原因現象なぜ?分析要約する序文今日は、非常に典型的な MySQL の「落とし穴」についてお話...
1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...
ブラウザの互換性とは、スタイルの互換性 (CSS)、インタラクションの互換性 (JavaScript...
ページレイアウトは、Web ページを扱い始めた頃からずっと気にかけていたことです。初期のテーブル構造...
たくさん集めましたが、すべて失敗に終わりました。最終的に、この方法は優れており、使用に影響を与えない...
序文フロントエンド開発では、配列内に要素が存在するかどうかを判断する必要があることがよくあります。実...
HTML で長いデータを表示する場合、マウスをその上に移動するとデータを切り捨てて完全なデータを表示...
この記事では、マーキーのシンプルな効果を実現するためのVueの具体的なコードを参考までに共有します。...