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