ホームページ  >  記事  >  データベース  >  MySQL Advanced Nine - MyISAM テーブル ロック (共有読み取りロック)

MySQL Advanced Nine - MyISAM テーブル ロック (共有読み取りロック)

黄舟
黄舟オリジナル
2016-12-29 16:44:081226ブラウズ

ロックは、コンピューターが複数のプロセスまたはスレッドによるリソースへの同時アクセスを調整するためのメカニズムです。データベースでは、データは多くのユーザーによって共有されるリソースでもあります。データ アクセスの一貫性と有効性をどのように確保するかは、すべてのデータベースにとって問題です。ロックの競合も、データベースへの同時アクセスのパフォーマンスに影響を与える重要な要素です。この観点から、ロックはデータベースにとって特に重要で複雑です。

MySQL ロックの概要

他のデータベースと比較して、MySQL のロック メカニズムは比較的シンプルです。その最も重要な特徴は、異なるストレージ エンジンが異なるロック メカニズムをサポートしていることです。たとえば、MyISAM および MEMORY ストレージ エンジンはテーブル レベルのロック (テーブル レベルのロック) を使用します。BDB ストレージ エンジンはページ レベルのロック (ページ レベルのロック) を使用しますが、テーブル レベルのロックもサポートしますが、デフォルトでは行を使用します。 -レベルロック。

table_locks_waited および table_locks_immediate ステータス変数をチェックすることで、システム上のテーブル ロックの競合を分析できます:

show status like 'table%';

その結果、Table_locks_waited の値が比較的高い場合は、テーブル ロック競合が存在することを示します。は、より深刻なテーブル レベルのロック競合状態です。

MySQL のこれら 3 つのロックの特徴:

オーバーヘッド、ロック速度、デッドロック、粒度、同時実行パフォーマンス

テーブルレベルのロック: 低いオーバーヘッド、高速なロック、デッドロックなし、大きなロック粒度、競合の可能性が最も高く、最も低い同時実行性;

行レベルのロック: 高いオーバーヘッド、遅いロック、デッドロックが発生する、小さなロックの粒度、最も低いロック競合の可能性、および最も高い同時実行性;

ページ ロック: コストは 2 つの中間、デッドロック

ロックの観点からのみ、テーブル レベルのロックは、インデックス条件がわずかで、クエリベースのロックに適しています。 データを更新するアプリケーション行レベルのロックは、一部のオンライン トランザクション処理 (OLTP) システムなど、インデックス条件と同時クエリのみに基づいて少量の異なるデータを同時に更新するアプリケーションに適しています。 。

MySQL テーブルレベルのロックには、テーブル共有読み取りロック (テーブル読み取りロック) とテーブル排他的書き込みロック (テーブル書き込みロック) の 2 つのモードがあります。

テーブルをロックする

1. 共有読み取りロックを追加します

テーブル名を読み取ります

2. ロックを解除します

テーブルのロックを解除します

3. テーブルの排他的書き込みロック

テーブルを書き込みます

説明:

MyISAM テーブルに対する読み取り操作は、同じテーブルに対する他のユーザーの読み取りリクエストをブロックしませんが、MyISAM テーブルに対する書き込み操作は、他のユーザーによる同じテーブルの読み取りおよび書き込み操作をブロックします。 ; MyISAM テーブルの読み取り操作と書き込み操作は、書き込み操作と同様にシリアルです。スレッドがテーブルの書き込みロックを取得すると、ロックを保持しているスレッドのみがテーブルを更新できます。他のスレッドからの読み取りおよび書き込み操作は、ロックが解放されるまで待機します。

SESSION はテーブルをロックするために Lock table コマンドを使用します。この SESSION はロックされたテーブル内のレコードをクエリできますが、同時に他のテーブルを更新またはアクセスするとエラーが表示されます。テーブルは更新されますが、ロックは待機します。

上記は MySQL Advanced 9 - MyISAM Table Lock (Shared Read Lock) の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。