MySQL ロックの知識ポイントのまとめ

MySQL ロックの知識ポイントのまとめ

ロックの概念

①. 現実世界では、鍵は外の世界から身を隠したいときに使う道具です。

②. コンピュータにおいて、複数のプロセスやスレッドが同時にリソースにアクセスできるように調整する仕組み。

③ データベースでは、従来のコンピューティングリソース(CPU、RAM、I/Oなど)の競合に加えて、データは多くのユーザーによって共有され、アクセスされるリソースでもあります。

④. 同時データアクセスの一貫性と有効性をどのように確保するかは、すべてのデータベースが解決しなければならない問題です。

⑤. ロック競合もデータベースの同時アクセス性能に影響を与える重要な要素です。

MySQL ロックの概要

他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純です。最も注目すべき特徴は、異なるストレージ エンジンが異なるロック メカニズムをサポートしていることです。たとえば、MyISAM および MEMORY ストレージ エンジンはテーブル レベルのロックを使用します。 BDB ストレージ エンジンはページ レベルのロックを使用しますが、テーブル レベルのロックもサポートします。 InnoDB ストレージ エンジンは行レベルのロックとテーブル レベルのロックの両方をサポートしていますが、デフォルトでは行レベルのロックが使用されます。

テーブル レベル ロック: テーブル レベル ロックは、MySQL で最も細かいロックであり、現在の操作のテーブル全体をロックすることを意味します。オーバーヘッドが低く、ロックが高速で、デッドロックは発生せず、ロックの粒度が大きく、ロック競合の可能性が最も高く、同時実行性が最も低くなります。

行レベル ロック: 行レベル ロックは MySQL で最も細かい粒度のロックであり、現在操作中の行のみがロックされます。オーバーヘッドが高く、ロックが遅く、デッドロックが発生する可能性があります。ロックの粒度は最小で、ロック競合の可能性は最低で、同時実行性は最高です。

ページ レベル ロック: ページ レベル ロックは、MySQL のロックの一種で、ロックの粒度は行レベル ロックとテーブル レベル ロックの中間です。テーブルレベルのロックは高速ですが、競合が多く発生します。行レベルの競合は少なくなりますが、速度は遅くなります。したがって、隣接するレコードのグループを一度にロックするために、妥協的なページ レベルが採用されます。 BDB はページレベルのロックをサポートしています。オーバーヘッドとロック時間はテーブル ロックと行ロックの間であり、デッドロックが発生する可能性があります。ロックの粒度はテーブル ロックと行ロックの間であり、同時実行性は平均的です。

上記の特性から、どのロックが優れているかを一概に言うのは難しいことがわかります。特定のアプリケーションの特性に基づいて、どのロックがより適しているかを言うことしかできません。 !ロックの観点からのみ見ると、テーブル レベルのロックは、Web アプリケーションなど、クエリ指向でインデックス条件に基づいて少量のデータのみを更新するアプリケーションに適しています。行レベルのロックは、一部のオンライン トランザクション処理 (OLTP) システムなど、インデックス条件と同時クエリに基づいて少量の異なるデータを大量に同時に更新するアプリケーションに適しています。


①商品を購入する際、在庫が1つしかなく、2人が同時に購入しようとした場合、誰が受け取るのでしょうか?

②. トランザクションを使用して、まず在庫テーブルから商品データを取得し、次に注文を挿入し、支払い後に支払いテーブル情報を挿入します。

③. 商品の数量を更新します。このプロセスでは、ロックを使用することで限られたリソースを保護し、分離性と同時実行性の矛盾を解決できます。

ロックの分類

操作別:

  1. 読み取りロック(共有ロック):同じデータに対して、互いに影響を与えることなく複数の読み取り操作を同時に実行できます。
  2. 書き込みロック(排他ロック):現在の書き込み操作が完了するまで、他の書き込みロックと読み取りロックはブロックされます。

粒子サイズ別:

  1. テーブルロック
  2. 行ロック
  3. ページロック

上記は、MySQL ロックに関するすべての関連知識ポイントです。123WORDPRESS.COM をお読みいただき、サポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL のロック待機とデッドロック問題の分析
  • MySQL ロックブロッキングの詳細な分析
  • MySQL のロックに関する問題

<<:  Linux でファイアウォールがオフになっているかどうかを確認する方法

>>:  docker の実行に必要な権限の分析

推薦する

ウェブページのカラーマッチングスキルについての簡単な説明(フロントエンド開発者必読)

一般的に、Web ページの背景色は、より柔らかく、よりシンプルで、より明るく、暗いテキストとマッチし...

シンプルなHTMLとCSSの使い方の詳細な説明

HTML と CSS を含む JD.com のホームページの静的ページ効果を 3 日間で完成させます...

js QRコードスキャンログインの原理についての簡単な説明

目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...

Apache ab同時負荷ストレステストの実装方法

腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...

MySQL 8.0 に移行する際の注意点 (要約)

パスワードモードPDO::__construct(): サーバーがクライアントに不明な認証方法を要求...

Linux システムで crontab を使用して MySQL データベースを定期的にバックアップする方法

システムの crontab を使用して定期的にバックアップ ファイルを実行し、バックアップ結果を日付...

インラインブロックを使用した複数のdiv間の間隔はプログラミング方法とは異なります

inline-block について学習しているときに、境界線と inline-block を持つ複数...

vscodeで保存した後のHTML自動フォーマットの問題を解決する

vsCode のバージョンは最近更新され、現在のバージョン番号は 1.43 です。実際、vsCode...

Windows10システムにスーパーセットをインストールする手順

Superset は、エレガントなインターフェースとデータ テーブルに基づく動的なデータ生成を主な機...

Jenkins を通じて None のイメージを定期的にクリーンアップする方法

序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...

Cronジョブを使用してCpanelでPHPを定期的に実行する方法

cpanel 管理バックエンドを開き、「詳細」オプションの下に「Clock Guardian Job...

HTML の基本的な使用法には、リンク、スタイルシート、span、div などが含まれます。

1. リンクハイパーテキスト リンクは HTML において非常に重要です。基本的な形式は次のとおりで...

ウェブページエクスペリエンス: 計画と設計

1. デザインの方向性を明確にする<br />まず、どのユーザーを対象にデザインするのか...

mini-vueレンダリングのシンプルな実装

目次序文ターゲット最初のステップ:ステップ2:ステップ3:ステップ4:要約する序文現在主流のフレーム...

jsはウォーターフォールフローのボトムアウトによるデータの動的ロードを実現します

この記事では、ウォーターフォールフローが底に達したときにデータを動的にロードするためのjsの具体的な...