検索
ホームページデータベースmysql チュートリアルmysqlデータベースロックメカニズムの概要

この記事では、MySQL データベースのロック メカニズムについて説明します。必要な方は参考にしていただければ幸いです。

同時実行制御

  • データベース管理システムにおける同時実行制御のタスクは、複数のトランザクションがデータベース内の同じデータにアクセスしないようにすることです。データベースの分離と統合、およびデータベースの統合を同時に破壊します。

  • #ブロッキング、タイムスタンプ、オプティミスティック同時実行制御、およびペシミスティック同時実行制御は、同時実行制御に使用される主な技術手段です。

ロック

同時トランザクションが同時にリソースにアクセスすると、データの不整合が生じる可能性があるため、データベース データの一貫性を確保するためにデータ アクセスを順序付けるメカニズムが必要です。ロックはメカニズムの 1 つです (推奨チュートリアル:

MySQL チュートリアル )

ロックの分類

  • 操作に応じて分けると、次のように分けることができます。

    DML ロック、DDL ロック

  • ロックの粒度に応じて分割され、

    テーブル レベルのロック、行レベルのロック、ページ レベルに分割できます。 lock (mysql)

  • ロックレベルに応じて

    共有ロックと排他ロックに分けることができます

  • ロック方法で分けると

    自動ロック、表示ロック

  • # 使用方法で分けると、
  • 楽観的ロックと悲観的ロックに分けることができます

  • DML ロックは、行レベルのロック (TX ロック) やテーブル ロックなど、データの整合性を保護するために使用されます。レベルロック(TMロック)。 DDL ロックは、テーブルやインデックスなどの構造定義などのデータベース オブジェクトの構造を保護するために使用されます。これには、排他的 DDL ロック、共有 DDL ロック、割り込み可能な解析ロックが含まれます。

行レベル ロック

    行レベルのロックは Mysql で最も詳細なロックであり、現在操作されている行のみがロックされることを意味します。行レベルのロックにより、データベース操作における競合を大幅に減らすことができます。ロックの粒度は最も小さくなりますが、ロックのオーバーヘッドも最大になります。行レベルのロックは
  • 共有ロック

    排他ロック

  • 特徴: オーバーヘッドが高く、ロックの粒度が遅い。ロック競合の可能性が最も小さく、最も低い同時実行性が最も高い
  • テーブル レベルのロック

    テーブル レベルのロックは、 Mysql における最大のロック粒度 ロックの一種は、現在の操作のテーブル全体をロックすることを意味します。実装が簡単で、消費するリソースが少なく、ほとんどの Mysql エンジンでサポートされています。最も一般的に使用される MYISAM と INNODB は、テーブル レベルのロックをサポートします。テーブルレベルのロックは、
  • テーブル共有読み取りロック (共有ロック)

    テーブル排他的書き込みロック (排他的ロック)

  • 特徴:オーバーヘッドが低く、ロックが高速です。ロックの粒度が高く、ロックの競合が発生する可能性が最も高く、同時実行性が最も低くなります。
  • ページ レベルのロック

    ページ レベル ロックは Mysql のロックの一種で、そのロック粒度は行レベル ロックとテーブル レベル ロックの間です。テーブルレベルのロックは高速ですが、競合が多くなります。行レベルのロックは競合がほとんどありませんが、低速です。ページレベルのロックは、隣接するレコードのグループをロックするために使用されます。 BDB はページ レベルのロックをサポートします
  • Mysql 共通ストレージ エンジンのロック メカニズム

    MyISAM と MEMORY はテーブル レベルのロックを使用します
  • BDB はページ レベルのロックまたはテーブル レベルのロックを使用します。デフォルトはページ レベルのロックです。
  • InnoDB は行レベルのロックとテーブル レベルのロックをサポートします。デフォルトは行レベルのロックです
  • InnoDB の行ロックとテーブル ロック

InnoDB エンジンは行ロックとテーブル ロックの両方をサポートしています。そのため、テーブル全体がロックされるのはいつかということです。 、行がロックされるのはいつですか? ?

    InnoDB の行ロックは、インデックス上のインデックス エントリをロックすることによって実現されます。これは、データ ブロック内の対応するデータ行をロックする Mysql や Oracle とは異なります。 InnoDB のこの行ロック実装機能は次のことを意味します:
  • インデックス条件を通じてデータが取得される場合にのみ、InnoDB は行レベルのロックを使用します。それ以外の場合、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 つのテーブル ロック:

意図共有ロック (IS): トランザクションがデータ行に共有ロックを追加する準備をしていることを示します。共有ロックがデータ行に追加されます。 テーブルの IS ロックは、事前に取得する必要があります。
  • 意図的排他ロック (IX): トランザクションがデータ行に排他ロックを追加する準備をしていることを示します。データ行。トランザクションが最初にデータ行に排他ロックを追加する必要があることを示します。テーブルの IX ロックが削除されます。
    • インテンション ロックは、InnoDB によって自動的に追加され、ユーザーの介入は必要ありません
    • 概要
  • 挿入、更新、削除の場合、InnoDB は関連するデータに排他ロックを自動的に追加します。 Select ステートメント。InnoDB はロックを追加せず、トランザクションは次のステートメントを通じて明示的に追加できます。 共有ロックまたは排他的ロック

共有ロック: select ... LOCK IN SHARE MODE

排他ロック: SELECT ... FOR UPDATE

    以上がmysqlデータベースロックメカニズムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事は博客园で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    MySQLのパフォーマンスを監視するために使用できるツールは何ですか?MySQLのパフォーマンスを監視するために使用できるツールは何ですか?Apr 23, 2025 am 12:21 AM

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

    MySQLはSQL Serverとどのように違いますか?MySQLはSQL Serverとどのように違いますか?Apr 23, 2025 am 12:20 AM

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

    どのシナリオでMySQLよりもSQL Serverを選択できますか?どのシナリオでMySQLよりもSQL Serverを選択できますか?Apr 23, 2025 am 12:20 AM

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

    MySQLは文字セットと照合をどのように処理しますか?MySQLは文字セットと照合をどのように処理しますか?Apr 23, 2025 am 12:19 AM

    mysqlManagesCharacterSetSetSetsAndCollat​​ions ByUSINGUTF-8ASTHEDEDEFAULT、CONFIGURATIONATDATABASE、TABLE、ANDCOLUMNLEVELS、ANDREQUIRINGCAREACTERSETANDCOLLATIONSFORADABASE.2

    mysqlのトリガーとは何ですか?mysqlのトリガーとは何ですか?Apr 23, 2025 am 12:11 AM

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

    MySQLでユーザーアカウントをどのように作成および管理しますか?MySQLでユーザーアカウントをどのように作成および管理しますか?Apr 22, 2025 pm 06:05 PM

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

    MySQLはOracleとどのように違いますか?MySQLはOracleとどのように違いますか?Apr 22, 2025 pm 05:57 PM

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

    他のリレーショナルデータベースと比較してMySQLを使用することの欠点は何ですか?他のリレーショナルデータベースと比較してMySQLを使用することの欠点は何ですか?Apr 22, 2025 pm 05:49 PM

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

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

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

    ホットツール

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    Safe Exam Browser

    Safe Exam Browser

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

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

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

    SublimeText3 Linux 新バージョン

    SublimeText3 Linux 新バージョン

    SublimeText3 Linux 最新バージョン