ホームページ >データベース >mysql チュートリアル >mysqlのロック粒度とは何ですか?

mysqlのロック粒度とは何ですか?

王林
王林オリジナル
2020-06-28 11:54:014352ブラウズ

Mysql ロック粒度は、通常ロック レベルと呼ばれるものです。データベース エンジンには複数粒度のロックがあり、1 つのトランザクションでさまざまな種類のリソースをロックできます。 MySQL データベースには、ページ レベルのロック、テーブル レベルのロック、行レベルのロックという 3 つのロック レベルがあります。

mysqlのロック粒度とは何ですか?

#ロックの粒度

(推奨チュートリアル:

mysql チュートリアル)

ロックの粒度は、通常ロック レベルと呼ばれるものです。


データベース エンジンには複数粒度のロックがあり、1 つのトランザクションでさまざまな種類のリソースをロックできます。ロックのオーバーヘッドを最小限に抑えるために、データベース エンジンはタスクに適切なレベルでリソースを自動的にロックします。

より小さい粒度 (行など) でロックすると同時実行性が向上しますが、多くの行がロックされるとより多くのロックを保持する必要があるため、オーバーヘッドが高くなります。より大きな粒度 (テーブルなど) でロックすると、テーブル全体をロックすると他のトランザクションがテーブルのどの部分にもアクセスできなくなるため、同時実行性が低下します。ただし、維持する必要があるロックが少ないため、オーバーヘッドは低くなります。

ロック階層

データベース エンジンは、多くの場合、リソースを完全に保護するために複数の粒度でロックを取得する必要があります。この複数の粒度レベルのロックのセットは、ロック階層と呼ばれます。たとえば、インデックスからの読み取りを完全に保護するには、データベース エンジン インスタンスで行に対する共有ロックを取得し、ページとテーブルに対して意図的な共有ロックを取得する必要がある場合があります。

MySQL には 3 つのロック レベルがあります: ページ レベル、テーブル レベル、行レベル

MyISAM および MEMORY ストレージ エンジンはテーブル レベルのロック (テーブル レベルのロック) を使用します。

##BDB ストレージ エンジンはページ レベルのロックを使用しますが、テーブル レベルのロックもサポートします。

InnoDB ストレージ エンジンは、行レベルのロック (行レベルのロック) とテーブル レベルのロックの両方をサポートします。もサポートされていますが、デフォルトでは行レベルのロックが使用されます。

MySQL ロックの特性は、次のように大まかに要約できます。

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

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

ページ ロック: コストとロック時間はテーブル ロックと行ロックの間であり、デッドロックが発生します。ロックの粒度はテーブル ロックと行ロックの間で、同時実行性は平均的です。

以上がmysqlのロック粒度とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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