Latch
latchとは:
ロックは、データベース システムとファイル システムを区別する重要な機能です。ロック メカニズムは、共有リソースへの同時アクセスを管理するために使用されます。 Innodbストレージ エンジンはテーブル データを行レベルでロックします。これは優れています。ただし、Innodb も複数の場所でロックを使用し、複数の異なるリソースが同時アクセスを提供できるようにします。たとえば、バッファプールによって要約された LRU リストを操作するとき、LRU リスト内の要素を削除、追加、または移動する場合、一貫性を確保するために、ロックが関与する必要があります。 ラッチロック。
latchとlock
latchの違いは、必要なロック時間が非常に短い必要があるため、一般にラッチ(軽量レベルロック)と呼ばれます。この状態が長時間続くと、アプリケーションのパフォーマンスが非常に低下します。 Innodb ストレージ エンジンでは、latch は mutex (ミューテックス) と RW-Lock (読み取り/書き込みロック) に分割できます。
そして、lock オブジェクトは、テーブル、行、ページなど、データベース内のオブジェクトをロックするために使用されるトランザクションです。そして一般に、lockのオブジェクトは、トランザクションcommitまたはrollbackの後にのみ解放されます(解放時間はトランザクション分離レベルによって異なる場合があります)。さらに、lock には、ほとんどのデータベースと同様に、デッドロック メカニズムがあります。
show Engine innodb mutex と同じlatch
name
列にはlatchの情報が表示されます ソースコードの場所(行数) )。
latchの分類は次のように分類されます:
mutex: 一部のリソースの共有と同時実行が必要になる場合がありますが、それほど頻繁ではないため、オペレーティング システム、mutexはすべて排他的です。 RW-LATCH: Read-write lock
latchの理解:
例:
select を実行すると、データはにキャッシュされます
バッファプールで、このデータに同時にアクセスまたは変更する複数のスレッドには、同時実行制御メカニズム (latch) が必要です。 データベースがアクセスするデータは、まずキャッシュに保存される必要があります。キャッシュは通常、ディスク領域よりも小さいですが、データ バッファーは、データ ページがメモリ内にあるかどうかを記録するために ハッシュ テーブルを使用します。 MySQL の対応する RW-Latch は、errlog に明確に記載されています。 658 RW-ラッチは行によって作成されました。 エラーログのストレステストの例を見てください: ログによれば、スレッドを分析できます 140140355766016 記録まで x ロックされていますが、スレッドを待機しています スレッド の RW-Latch のリリース。 latchコンテンツプロセス ) でリンクリストにアクセスx 2) b 並んで待っていますx cpu が使用されますが、cpu が待機していることに気付いたので、cpu がチェーンから b3 を追い出します。見つける時が来ましたデータ。 4)b a bは並ばないでください、これは後のスピンつまりアイドリングですCPU 、そして、aのロックが解除されているかどうかを確認するためにメモリのデータ構造を見てください5)b ぐるぐる回った後、bspinの期間に c に入った後、何度も連続して Spin を実行した後、OS WAITS6) オペレーティング システムが CPU から B を追い出します。 ラッチロックの機能: 1.キューなし 2.spin 3.os待機 4.cpu忙しいです verymelly smallデータベースはオペレーティングシステムから適用され、バッファープールを占有しません。メモリ データ構造に 1 を書き込みます。 b スレッドはメモリ データ構造に数値があることを確認し、 confirm コンテンツ タイプ: エラーログから取得した latch競合プロセス リンクされたリストにはチェーン保護機構 があり、小さなメモリこの時点で読み取ることができるスレッド a が立ち上がり、チェーン上にデータが見つかった場合、管理は になります。 read) が見つかったら、読み取りロックを解除するだけで、bが表示され、読み取りを要求します。この時点で、読み取りロックは共有できるようです。 cもアクセスして読み取ります。チェーン内の2つのブロックの内容を変更するには、r、r、wは相互に排他的であるように見えます。 1 またはアクティブなリクエストのいずれかで同時に実行されます。 cpu 2を終了し、空の cpu リソースを占有します (空のコードを実行し、ループを確認します) aとb が使用されているかどうかを確認するためにしばらく時間がかかります(spin)を終了しますが、このプロセスでは cがキューに入れられて待機していないため、他のスレッドが立ち上がっている可能性があります待機中にチェーンを占有するためです。複数回実行されてもこのままの場合は、スリープ、終了cpuになる可能性があります。なぜ占有されるのですか(オペレーティングシステムが彼女のアイドル状態を認識して強制的に占有することを恐れています)彼を引き離す)など(彼はaとbがリソースを占有していることを知っているので、時間が比較的短い、つまり、チェーンを横断する時間が非常に短い)。 latch競合の現象: 1、latch競合は、cpubusy2、latchとして表示されます。 競合 行列はありません、しばらくお待ちくださいランダムな時間に戻って見てみましょう モニタリングインジケータ ----------セマフォ----------OS待機アレイ情報:予約数 2OS 待機アレイ情報: 信号数 2 RW-excl スピン 0、ラウンド 0、OS 待機 0RW-sx スピン 0、ラウンド0、OS 待機数 0待機ごとのスピンラウンド数: 4.00 RW-shared、0.00 RW-excl、0.00 RW-sx は、各回転のパラメーターを要求することを意味します os waits: sleepの数を示します。突然の成長が比較的速い場合、latchの競合が深刻であることを意味します。競合の理由 。 1、メモリアクセスが多すぎる(探し続ける) 2、 リストチェーンが長すぎる(10000 早い、保持される可能性が高すぎる) なので、インスタンスの数を増やして、大きなプールを小さなプールに切り分けて リストを作ると、チェーンが短くなります latch競合: latch競合が深刻な場合1. sqlを実行し、メモリ読み取り数を削減します 効果はより明白です 2. インスタンスの数を増やすラッチを正確に見つけて解決する方法1.show Engine Innodb mutex 2. 確認する内容ラッチの種類 3.の位置決め
以上がラッチとは何ですか?ラッチとロックの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。