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 の実行に必要な権限の分析

推薦する

VMware 仮想マシンの 3 つのネットワーク方式と原則 (概要)

1. ブリッジ: デフォルトでは VMnet0 が使用されます1. 原則:ブリッジは、それぞれ 2...

DockerでPython環境をパッケージ化するプロセスの詳細な説明

docker パッケージング Python 環境の手順は次のとおりです。 1 pip listの下に...

CSSはスクロールを許可しながらスクロールバーを非表示にするためにオーバーフローを設定します

CSS は、スクロールを許可しながらスクロール バーを非表示にするために Overflow を設定し...

dockerでopenGaussデータベースを構成する方法の詳細な説明

Windowsユーザー向けDocker で openGauss を使用するopenGaussイメージ...

Linux で大容量メモリ ページを持つ Oracle データベースを最適化する方法

序文PC サーバーは今日まで発展を続け、パフォーマンスにおいて大きな進歩を遂げてきました。 64ビッ...

JSONオブジェクトのキーを置き換える最良の方法

JSON (JavaScript Object Notation、JS Object Notatio...

MySQL での正規表現置換のための replace と regexp の使用法の分析

この記事では、例を使用して、replace と regexp を使用して MySQL で正規表現を置...

LinuxでのMySQLのインストール手順

1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...

HarborをベースにしたDocker専用倉庫の構築方法

目次1. ハーバーの紹介1. ハーバーが民間倉庫を建設3. 港湾の維持管理4. Harborユーザー...

RHCE ブリッジング、パスワード不要のログイン、ポート番号の変更の概要

目次1. ブリッジを設定し、検証のためにパケットをキャプチャする1. ブリッジデバイスとセッションを...

CentOS7.5 MySQLのインストールチュートリアル

1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...

Vue プロジェクトでブラウザ キャッシュ設定を無効にする例

プロジェクトをリリースするときに、キャッシュをクリーンアップする必要があるという問題に遭遇することが...

MySQL の従来のソート、カスタム ソート、中国語のピンイン文字によるソート

MySQL の通常のソート、カスタム ソート、中国語のピンイン文字によるソート。実際の SQL を記...

CSS スティッキーフッタークラシックレイアウトの実装

スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...

MySQL 8.0 Windows zip パッケージ版の詳細なインストール手順

MySQL 8.0 Windows zipのインストール手順は次のように紹介されています。準備する:...