目次
グローバル ロック
FTWRL
グローバル ロックの使用シナリオ
それでは、なぜグローバル ロックが必要なのでしょうか?
ロックを回避する方法
–単一トランザクション コマンド ロック
読み取り専用設定
ホームページ データベース mysql チュートリアル MySQL グローバル ロックについて話しましょう

MySQL グローバル ロックについて話しましょう

Jun 17, 2022 pm 01:53 PM
mysql

この記事では、mysql に関する関連知識を提供します。主にグローバル ロックに関する関連問題を紹介します。グローバル ロックは、データベース全体をロックします。データベースに読み取りロックを追加すると、他のリクエストはデータベースに書き込みロックを追加できなくなります。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

MySQL グローバル ロックについて話しましょう

推奨学習: mysql ビデオ チュートリアル

データベース設計の本来の目的は、共有リソースとして同時実行の問題に対処することです。複数のユーザーによる同時アクセスが発生した場合、データベースはリソース アクセス ルールを合理的に制御する必要があります。ロックは、このアクセス ルールを実装するために使用される重要なデータ構造です。

まず、ロックの一般的な分類の図を掲載しましょう。

ロックの範囲に応じて、MySQL のロックはグローバル ロックに大別できます。 、テーブル ロック、テーブル ロック、ロック、行ロック。最初にこれらの種類のロックを主に学習しますが、この記事ではグローバル ロックについて学習します。

グローバル ロック

グローバル ロックは、データベース全体をロックすることです。データベースに読み取りロックを追加した後、他のリクエストはデータベースに書き込みロックを追加できません。データベースに書き込みロックを追加すると、後続の他のリクエストはデータベースに読み取りまたは書き込みロックを追加できません。

FTWRL

MySQL は、グローバル読み取りロック、読み取りロック付きテーブルのフラッシュ (FTWRL) を追加するメソッドを提供します。ライブラリ全体を読み取り専用状態にする必要がある場合、このコマンドを使用すると、他のスレッドの次のステートメントがブロックされます: データ更新ステートメント (追加、削除、変更)、データ定義ステートメント (テーブルの作成を含む) 、テーブル構造の変更など)および更新 クラス トランザクションのコミット ステートメント。

グローバル ロックの使用シナリオ

グローバル ロックの使用シナリオ: データベース全体の論理バックアップを作成します。論理バックアップとは、データベース全体のすべてのテーブルを選択し、テキストとして保存することを意味します。つまり、グローバル ロックは、マスタ/スレーブ データのバックアップまたはデータのインポートとエクスポートを実行する場合にのみ使用されます。

それでは、なぜグローバル ロックが必要なのでしょうか?

データのバックアップやデータのインポート、エクスポートを行う際、この期間中にデータの追加、削除、変更が同時に行われると、データの不整合が発生するためです。

以前は、前述の FTWRL を使用して、バックアップ中に他のスレッドがデータベースを更新しないようにする方法がありました。 注: バックアップ プロセス中、ライブラリ全体は完全に読み取り状態になります。状態のみ。

グローバル ロックはこのデータベースに向けられているため、グローバル ロックの追加は非常に危険に思えます:

  • メイン データベースにバックアップする場合、バックアップ期間中は更新を実行できません。 , 基本的に全ての業務を停止しております。
  • スレーブ データベースでバックアップすると、バックアップ期間中にマスター データベースから同期された binlog を実行できなくなり、マスターとスレーブの遅延とデータの不整合が発生します。

ロックを回避する方法

グローバル ロックの追加は非常に大きな影響を与えるため、ロックを回避できるでしょうか?

上記の導入により、ロックはデータの不整合の問題を解決するためのものであることがわかりました。したがって、データの不整合の問題を解決できる限り、グローバル ロックを追加する必要はありません。データのバックアップ開始時に操作ログを記録しておけば、バックアップ中はロックなしでデータベースへの追加・削除・変更・問い合わせが可能となり、バックアップ中は追加・削除の操作記録が残るという考え方もあります。 、変更とクエリは 1 つのログ ファイルに記録されます。バックアップが完了した後、この期間中にログ ファイル内のすべての操作が実行されます。これにより、バックアップの前後でデータの一貫性が確保されます。

要約すると、ロックがないと、バックアップ データとメイン データは論理的な時点になく、このビューは論理的に矛盾します。論理時点が一貫していること、つまり論理ビューが一貫していることを確認すれば、データの一貫性を確保できます。ここから、以前に学習したトランザクション分離レベルを考えます。反復可能な分離レベルでトランザクションを開くことは、一貫した見解。

MySQL のデフォルト エンジンである InnoDB には、データの一貫性を確保するためのメカニズムがあります。 InnoDB エンジンにはデータ スナップショット バージョン機能があります。MVCC は履歴バージョンのスナップショットを保持するため、この機能は MVCC と呼ばれます。各スナップショットはトランザクション バージョン番号に対応します。データをバックアップするとき、トランザクション バージョン番号を申請します。読み取り時データをフェッチする場合は、自分のトランザクション バージョン番号よりも小さいトランザクション バージョン番号を持つデータを読み取るだけで済みます。

–単一トランザクション コマンド ロック

公式の論理バックアップ ツールは mysqldump です。 mysqldump がパラメーター -single-transaction を使用する場合、一貫したビューが確実に取得されるように、データをインポートする前にトランザクションが開始されます。 MVCC のサポートにより、このプロセス中にデータは正常に更新されます。

--single-transaction パラメータの役割は、トランザクションの分離レベルを反復可能な読み取り、つまり REPEATABLE READ に設定することです。これにより、トランザクション内のすべての同じクエリが同じデータを読み取ることが保証されます。ダンプ中に、他の InnoDB エンジン スレッドがテーブル データを変更して送信しても、ダンプ スレッドのデータには影響しません。

そして、WITH CONSISTENT SNAPSHOT をスナップショット レベルに設定します。反復可能な読み取りのみの場合、トランザクションの開始時にデータがダンプされる前に、他のスレッドがデータを変更して送信し、この時点での最初のクエリの結果が他のスレッドによって送信された結果であり、WITH であると想像してください。 CONSISTENT SNAPSHOT では、トランザクションの開始時に、最初のクエリの結果がトランザクション開始時のデータ A であることを保証できます。この時点で他のスレッドがデータを B に変更したとしても、クエリの結果は A のままです。

単一トランザクション方式は、すべてのテーブルがトランザクション エンジンを使用するライブラリにのみ適用されます。 mysqldump プロセスに --single-transaction を追加すると、InnoDB データの完全な一貫性を確保できます。トランザクションをサポートしていない MyISAM のようなエンジンの場合、バックアップ プロセス中に更新がある場合、最新のデータのみを取得できます。バックアップの一貫性が破壊されます。現時点ではまだグローバル ロックが必要なので、FTWRL コマンドを使用する必要があります。

読み取り専用設定

ライブラリ全体が読み取り専用なので、なぜ set global readonly = true を使用しないのですか?という質問もあるかもしれません。

readonly メソッドでもライブラリ全体を読み取り専用状態にできることは事実ですが、主に次の 2 つの理由により、それでも FTWRL メソッドを使用することをお勧めします。 #一部のシステムでは、readonly の値は、データベースがメイン データベースであるかスタンバイ データベースであるかを決定するなど、他のロジックに使用されます。したがって、グローバル変数を変更すると、より大きな影響が生じます。

    例外処理メカニズムには違いがあります。 FTWRL コマンドの実行後にクライアントが異常に切断された場合、MySQL は自動的にグローバル ロックを解放し、ライブラリ全体が正常に更新できる状態に戻ります。
  • ライブラリ全体を読み取り専用に設定した後、クライアントで例外が発生すると、データベースは読み取り専用状態のままになり、ライブラリ全体が長時間書き込みできない状態になります。 、リスクが高くなります。
推奨学習:

mysql ビデオ チュートリアル

以上がMySQL グローバル ロックについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLユーザーとデータベースの関係 MySQLユーザーとデータベースの関係 Apr 08, 2025 pm 07:15 PM

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

MySQL:初心者向けのデータ管理の容易さ MySQL:初心者向けのデータ管理の容易さ Apr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

NAVICATでデータベースパスワードを取得できますか? NAVICATでデータベースパスワードを取得できますか? Apr 08, 2025 pm 09:51 PM

NAVICAT自体はデータベースパスワードを保存せず、暗号化されたパスワードのみを取得できます。解決策:1。パスワードマネージャーを確認します。 2。NAVICATの「パスワードを記憶する」機能を確認します。 3.データベースパスワードをリセットします。 4.データベース管理者に連絡してください。

MySQLのクエリ最適化は、特に大規模なデータセットを扱う場合、データベースのパフォーマンスを改善するために不可欠です MySQLのクエリ最適化は、特に大規模なデータセットを扱う場合、データベースのパフォーマンスを改善するために不可欠です Apr 08, 2025 pm 07:12 PM

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MariadBのNAVICATでデータベースパスワードを表示する方法は? MariadBのNAVICATでデータベースパスワードを表示する方法は? Apr 08, 2025 pm 09:18 PM

Passwordが暗号化された形式で保存されているため、MariadbのNavicatはデータベースパスワードを直接表示できません。データベースのセキュリティを確保するには、パスワードをリセットするには3つの方法があります。NAVICATを介してパスワードをリセットし、複雑なパスワードを設定します。構成ファイルを表示します(推奨されていない、高リスク)。システムコマンドラインツールを使用します(推奨されません。コマンドラインツールに習熟する必要があります)。

mysqlを表示する方法 mysqlを表示する方法 Apr 08, 2025 pm 07:21 PM

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。

MySQLでテーブルをコピーする方法 MySQLでテーブルをコピーする方法 Apr 08, 2025 pm 07:24 PM

MySQLでテーブルをコピーするには、新しいテーブルの作成、データの挿入、外部キーの設定、インデックスのコピー、トリガー、ストアドプロシージャ、および機能が必要です。特定の手順には、同じ構造を持つ新しいテーブルの作成が含まれます。元のテーブルからデータを新しいテーブルに挿入します。同じ外部キーの制約を設定します(元のテーブルに1つがある場合)。同じインデックスを作成します。同じトリガーを作成します(元のテーブルに1つがある場合)。同じストアドプロシージャまたは関数を作成します(元のテーブルが使用されている場合)。

See all articles