ロックの概要ロックは、コンピューターが複数のプロセスまたはスレッドを調整してリソースにアクセスするためのメカニズムです。 データベースでは、従来のコンピュータ リソース (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を使用して、頻繁に表示される奇妙なボタンを簡単に実装します。
目次まず、値の一部と一致させるために使用される特殊文字であるワイルドカードについて簡単に紹介します。...
必要:公式サイトのリソースサーバーは確かに1つのインスタンスでは使えず、複数のインスタンスを一緒に使...
ミニプログラムデータキャッシュ関連知識データ キャッシュ: データをキャッシュして、アプレットを終了...
クラシックな色の組み合わせの中でも、黒、白、グレーの時代を超えた魅力を否定できる人はおそらくいないで...
目次アレイ重複排除1. from() を新しい Set() メソッドに重ねる2. スプレッド演算子 ...
入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...
1. ソースコードからovsをコンパイルしてインストールします。依存関係をインストールします: # ...
CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...
目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...
1. インラインスタイル仮想DOMにインラインスタイルを追加するには、式を使用してスタイルオブジェク...
フロントエンドの初心者として、私は数日間フロントエンドをいじってみました。 。今日、私は自分が固く信...
この記事では、クリック時にサブメニューを表示するためのJavaScriptの具体的なコードを参考まで...
ある読者から連絡があり、ダウンロードが終了し、操作がまだ開始されていないのに、なぜ Tomcat の...
<br /> 英語原文: http://desktoppub.about.com/od/...
1. 基本的な使い方 <!DOCTYPE html> <html lang=&qu...