この記事では、MySQL データベースのロック メカニズムについて説明します。必要な方は参考にしていただければ幸いです。
同時実行制御
データベース管理システムにおける同時実行制御のタスクは、複数のトランザクションがデータベース内の同じデータにアクセスしないようにすることです。データベースの分離と統合、およびデータベースの統合を同時に破壊します。
- #ブロッキング、タイムスタンプ、オプティミスティック同時実行制御、およびペシミスティック同時実行制御は、同時実行制御に使用される主な技術手段です。
MySQL チュートリアル )
ロックの分類- 操作に応じて分けると、次のように分けることができます。
DML ロック、DDL ロック
- ロックの粒度に応じて分割され、
テーブル レベルのロック、行レベルのロック、ページ レベルに分割できます。 lock (mysql)
- ロックレベルに応じて
共有ロックと排他ロックに分けることができます
- ロック方法で分けると
自動ロック、表示ロック
# 使用方法で分けると、 - 楽観的ロックと悲観的ロックに分けることができます
行レベル ロック
- 行レベルのロックは Mysql で最も詳細なロックであり、現在操作されている行のみがロックされることを意味します。行レベルのロックにより、データベース操作における競合を大幅に減らすことができます。ロックの粒度は最も小さくなりますが、ロックのオーバーヘッドも最大になります。行レベルのロックは
- 共有ロック
と 排他ロック
特徴: オーバーヘッドが高く、ロックの粒度が遅い。ロック競合の可能性が最も小さく、最も低い同時実行性が最も高い - テーブル レベルのロック
- テーブル レベルのロックは、 Mysql における最大のロック粒度 ロックの一種は、現在の操作のテーブル全体をロックすることを意味します。実装が簡単で、消費するリソースが少なく、ほとんどの Mysql エンジンでサポートされています。最も一般的に使用される MYISAM と INNODB は、テーブル レベルのロックをサポートします。テーブルレベルのロックは、
- テーブル共有読み取りロック (共有ロック)
と テーブル排他的書き込みロック (排他的ロック)
特徴:オーバーヘッドが低く、ロックが高速です。ロックの粒度が高く、ロックの競合が発生する可能性が最も高く、同時実行性が最も低くなります。 - ページ レベルのロック
- ページ レベル ロックは Mysql のロックの一種で、そのロック粒度は行レベル ロックとテーブル レベル ロックの間です。テーブルレベルのロックは高速ですが、競合が多くなります。行レベルのロックは競合がほとんどありませんが、低速です。ページレベルのロックは、隣接するレコードのグループをロックするために使用されます。 BDB はページ レベルのロックをサポートします
- Mysql 共通ストレージ エンジンのロック メカニズム
- MyISAM と MEMORY はテーブル レベルのロックを使用します
- InnoDB は行レベルのロックとテーブル レベルのロックをサポートします。デフォルトは行レベルのロックです
- InnoDB の行ロックとテーブル ロック
InnoDB エンジンは行ロックとテーブル ロックの両方をサポートしています。そのため、テーブル全体がロックされるのはいつかということです。 、行がロックされるのはいつですか? ?
- InnoDB の行ロックは、インデックス上のインデックス エントリをロックすることによって実現されます。これは、データ ブロック内の対応するデータ行をロックする Mysql や Oracle とは異なります。 InnoDB のこの行ロック実装機能は次のことを意味します:
- インデックス条件を通じてデータが取得される場合にのみ、InnoDB は行レベルのロックを使用します。それ以外の場合、InnoDb はテーブル ロックを使用します
- MySQL の行ロックはレコードのロックではなくインデックスのロックであるため、異なる行のレコードは同じインデックスのキーを使用するとロックの競合が発生する場合にアクセスされます。
- テーブルに複数のインデックスがある場合、InnoDB では、主キー インデックス、一意インデックス、通常のインデックスのいずれが使用されているかに関係なく、異なるトランザクションが異なるインデックスを使用して異なる行をロックできます。 Row lock を使用してデータをロックします。
- インデックス フィールドが条件で使用されている場合でも、データの取得にインデックスを使用するかどうかは、さまざまなコストを判断して MySQL によって決定されます。行プラン。一部の非常に小さなテーブルなど、MySQL がテーブル全体のスキャンの方が効率的であると判断する場合、InnoDB は行ロックの代わりにテーブル ロックを使用します。したがって、ロックの競合を分析するときは、SQL 実行計画を確認することを忘れないでください
行レベルのロックとデッドロック
MyISAM は常に必要なものをすべて一度に取得するため、MyISAM はデッドロックを生成しません。 ロック、またはすべてが満たされている場合または全員が待っています。 InnoDB では、ロックは段階的に取得されるため、デッドロックが発生する可能性があります。
MySQL では、行レベルのロックはレコードを直接ロックするのではなく、インデックスをロックします。インデックスは主キー インデックスと非主キー インデックスに分けられます。SQL ステートメントが主キー インデックスで動作する場合、MySQL はまず主キー インデックスをロックします。次に、関連する主キー インデックスをロックします。更新および削除操作中に、MySQL は where 条件によってスキャンされたすべてのインデックス レコードをロックするだけでなく、隣接するキー値もロックします。これは、いわゆるネクスト キー ロックです。
デッドロック: 2 つのトランザクションが同時に実行されると、1 つは主キー インデックスをロックし、他の関連するインデックスを待機します。もう 1 つは、非主キー インデックスをロックし、主キー インデックスを待機しています。デッドロックが発生します。
- #デッドロックが発生すると、通常、InnoDB はそれを検出し、1 つのトランザクションにロックを解放してロールバックさせ、別のトランザクションにロックを取得させてトランザクションを完了させることができます
#
- 異なるプログラムが複数のテーブルに同時にアクセスする場合は、同じ順序でテーブルにアクセスすることに同意するようにしてください。そうすることで、デッドロックの可能性を大幅に減らすことができます
- 同じトランザクション内で、デッドロックの可能性を減らすために必要なすべてのリソースを一度にロックするようにしてください。
- デッドロックが発生しやすいビジネス部分の場合は、アップグレードされたロック粒度を使用して、テーブル レベルのロックを通じてデッドロックを軽減してみてください。
- 共有ロックと排他的ロック
- 行レベルのロックは次のとおりです。 MySQL では、最も細かいロック粒度である行レベルのロックにより、データベース操作の競合を大幅に軽減できます。行レベルのロックは、共有ロックと排他的ロックに分けられます。
- 1. 共有ロック
- 共有ロックは、
- 読み取りロックとも呼ばれます。
は、読み取り操作によって作成されたロックです。他のユーザーは同時にデータを読み取ることができますが、すべての共有ロックが解放されるまでトランザクションはデータを変更できません。
トランザクション T がデータ A に共有ロックを追加した場合、他のトランザクションは共有ロックを A に追加することしかできず、排他ロックを追加することはできません。共有ロックが付与されているトランザクションはデータの読み取りのみが可能で、データの変更はできません - #トランザクション T がデータ A に共有ロックを追加してからデータを変更すると、他のトランザクションはデータを取得できなくなります。共有ロック。同様に、複数のトランザクションが同じデータの共有ロックを取得した場合、どのトランザクションもデータを変更できません。
- 使用法: SSELECT ... LOCK IN SHARE MODE
-
クエリ ステートメントの後に
LOCK IN SHARE MODEを追加します。他のスレッドがクエリ結果にフォーカスしていない場合、Mysql はクエリ結果の各行に共有ロックを追加します。どの行も排他ロックを使用している場合、共有ロックを正常に適用できますが、それ以外の場合はブロックされます。他のスレッドも共有ロックを使用してテーブルを読み取ることができ、これらのスレッドは同じバージョンのデータ
##2 を読み取ります。排他的ロックは書き込みロックとも呼ばれます。トランザクション T がデータ A に排他的ロックを追加する場合、他のトランザクションは A にいかなる種類のブロックも追加できません。排他ロックを取得するトランザクションは、データの読み取りと変更の両方が可能です
使用法:
SELECT ... FOR UPDATE- 。クエリ ステートメントの後に
- FOR UPDATE
を追加すると、MySQL はクエリ結果の各行に排他ロックを追加します。他のスレッドがクエリ結果セットの行に対して排他ロックを使用しない場合、排他ロックが適用されます。それ以外の場合はブロックされます。
3. インテンション ロックインテンション ロックはテーブル レベルのロックです。トランザクションで次のことを明らかにします。 行に対して要求されるロックのタイプ。 InnoDB の 2 つのテーブル ロック:
- 意図的排他ロック (IX): トランザクションがデータ行に排他ロックを追加する準備をしていることを示します。データ行。トランザクションが最初にデータ行に排他ロックを追加する必要があることを示します。テーブルの IX ロックが削除されます。
- インテンション ロックは、InnoDB によって自動的に追加され、ユーザーの介入は必要ありません
- 概要
- 挿入、更新、削除の場合、InnoDB は関連するデータに排他ロックを自動的に追加します。 Select ステートメント。InnoDB はロックを追加せず、トランザクションは次のステートメントを通じて明示的に追加できます。 共有ロックまたは排他的ロック
排他ロック: SELECT ... FOR UPDATE
以上がmysqlデータベースロックメカニズムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLのパフォーマンスを効果的に監視する方法は? MySqladmin、ShowGlobalStatus、PerconAmonitoring and Management(PMM)、MySQL EnterpriseMonitorなどのツールを使用します。 1. mysqladminを使用して、接続の数を表示します。 2。showglobalstatusを使用して、クエリ番号を表示します。 3.PMMは、詳細なパフォーマンスデータとグラフィカルインターフェイスを提供します。 4.mysqlenterprisemonitorは、豊富な監視機能とアラームメカニズムを提供します。

MySQLとSQLServerの違いは次のとおりです。1)MySQLはオープンソースであり、Webおよび埋め込みシステムに適しています。2)SQLServerはMicrosoftの商用製品であり、エンタープライズレベルのアプリケーションに適しています。ストレージエンジン、パフォーマンスの最適化、アプリケーションシナリオの2つには大きな違いがあります。選択するときは、プロジェクトのサイズと将来のスケーラビリティを考慮する必要があります。

高可用性、高度なセキュリティ、優れた統合を必要とするエンタープライズレベルのアプリケーションシナリオでは、MySQLの代わりにSQLServerを選択する必要があります。 1)SQLServerは、高可用性や高度なセキュリティなどのエンタープライズレベルの機能を提供します。 2)VisualStudioやPowerbiなどのMicrosoftエコシステムと密接に統合されています。 3)SQLSERVERは、パフォーマンスの最適化に優れた機能を果たし、メモリが最適化されたテーブルと列ストレージインデックスをサポートします。

mysqlManagesCharacterSetSetSetsAndCollations ByUSINGUTF-8ASTHEDEDEFAULT、CONFIGURATIONATDATABASE、TABLE、ANDCOLUMNLEVELS、ANDREQUIRINGCAREACTERSETANDCOLLATIONSFORADABASE.2

MySQLトリガーは、特定のデータ操作が実行されたときに一連の操作を実行するために使用されるテーブルに関連付けられた自動的に実行されたストアドプロシージャです。 1)定義と機能のトリガー:データ検証、ロギングなどに使用。2)動作原則:それは前後に分割され、行レベルのトリガーをサポートします。 3)使用例:給与の変更を記録したり、在庫を更新したりするために使用できます。 4)デバッグスキル:ShowTriggersとShowCreatetriggerコマンドを使用します。 5)パフォーマンスの最適化:複雑な操作を避け、インデックスを使用し、トランザクションを管理します。

MySQLでユーザーアカウントを作成および管理する手順は次のとおりです。1。ユーザーの作成:createUser'newuser '@' localhost'identifidedby'password 'を使用します。 2。許可を割り当てる:grantselect、insert、updateonmydatabase.to'newuser'@'localhost 'を使用します。 3.許可エラーを修正:Revokeallprivilegesonmydatabase.from'newuser'@'localhost 'を使用します。次に、許可を再割り当てします。 4。最適化権限:Showgraを使用します

MySQLは、迅速な開発や中小規模のアプリケーションに適していますが、Oracleは大規模な企業や高可用性のニーズに適しています。 1)MySQLはオープンソースで使いやすく、Webアプリケーションや中小企業に適しています。 2)Oracleは強力で、大企業や政府機関に適しています。 3)MySQLはさまざまなストレージエンジンをサポートし、Oracleは豊富なエンタープライズレベルの機能を提供します。

他のリレーショナルデータベースと比較したMySQLの欠点には次のものがあります。1。パフォーマンスの問題:大規模なデータを処理する際にボトルネックに遭遇する可能性があり、PostgreSQLは複雑なクエリとビッグデータ処理でより良いパフォーマンスを発揮します。 2。スケーラビリティ:水平スケーリング能力は、Google SpannerやAmazon Auroraほど良くありません。 3。機能的な制限:高度な機能におけるPostgreSQLやOracleほど良くないため、一部の関数では、より多くのカスタムコードとメンテナンスが必要です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
