序文ロックの粒度に応じて区別する
ロックのシナリオによると
グローバルロックロック対象は、データベースインスタンス全体です。 読み取りロック付きテーブルフラッシュ (FTWRL) - データベース全体を読み取り専用にする 使用シナリオ: データベース全体の論理バックアップを作成する 完全なデータベース論理バックアップデータをバックアップするためにグローバル ロックが必要なのはなぜですか? たとえば、売上の場合、出荷を記録するテーブルと控除を記録するテーブルが 1 つあります。その結果、出荷記録テーブルをバックアップしました。このとき、誰かが何かを購入したのに、代金のみが控除され、出荷記録はありませんでした。これは明らかに受け入れられません。 公式の論理バックアップ ツールは mysqldump です。 mysqldump がパラメータ –single-transaction を使用する場合、一貫したビューを確保するために、データをインポートする前にトランザクションが開始されます。 MVCC のサポートのおかげで、このプロセス中にデータを正常に更新できます。ただし、これはトランザクションに基づいており、MyISAM データ エンジンでは使用できません。この場合、一部のテーブルが InnoDB データ エンジンに基づいていない可能性があります。 もちろん、すべてが InnoDB データ エンジン テーブルである場合は、デフォルトの mysqldump を使用して、パラメーター –single-transaction を追加し、グローバル論理バックアップを実行することをお勧めします。 FTWRL と set global readonly=true の違い
テーブルロックコマンド: テーブル {tableName} を読み取り/書き込みでロックする (書き込みは読み取りよりも強力です。書き込みができる場合は読み取りもできます)、テーブルのロックを解除する ロックされたリソースでは、現在のスレッドのみが対応する操作を実行できます。また、現在のスレッドは、ロックされたテーブルに対してのみ対応する操作を実行できます。 たとえば、テーブル t1 を読み取りロックすると、現在のスレッドは読み取りのみ可能で書き込みはできず、他のスレッドは読み取りも書き込みもできません。 MDLロック明示的な使用は必要ありません。テーブルにアクセスするときに自動的に追加されます (テーブル構造の変更によって発生する問題を防ぐため) テーブルを追加、削除、変更、またはチェックするときに MDL 読み取りロックを適用し、テーブルの構造を変更するときに MDL 書き込みロックを適用します。
行ロック行ロックは各エンジンによってエンジンレベルで実装されます (MyISAM は行ロックをサポートしていないため、エンジンは一度に 1 つのスレッドでのみ更新操作を実行できます) トランザクションの場合: 1 行または複数行のデータが必要なときに行ロックが追加されますが、トランザクションがコミットされるまですべての行ロックは解除されません。つまり、他のスレッドが行データにアクセスする必要がある場合、そのスレッドのトランザクションがコミットされるまで待ってからアクセスする必要があります。 例:
したがって、注意すべき点は、トランザクション操作を実行するときに、更新が連続していない場合は、アクセスが最も多いステートメントを最後に実行することです(ロックは連続していますが、ロックの解放は一緒に解放されるため)。
デッドロックデッドロックは多くの状況で発生しますが、そのほとんどはデータベース操作の問題によって発生します。例えば
この問題に対処するには 2 つの戦略があります。
レコードロック列ロックのケース トランザクションによってロックされた特定のレコード情報をロック後に対象とする トリガー条件: クエリ条件が正確に一致し、一致条件フィールドが一意である 例: update t1 set name="张三" where id=12138 機能: レコードが現在のトランザクションによって管理されている場合、ロックされた後は他のトランザクションによって取得されず、「繰り返し読み取り」や「データ ダーティ リード」の問題が発生します。 ギャップロック列ロックのケース ギャップとは、その間にあるデータを意味します 主キーインデックス id に複数の未入力データがあります。このとき、スレッド A と B の 2 つがあり、A が 0 ~ 10 の間のデータを照会し、B が id=3 にデータを挿入すると、データのダーティ リード問題が発生します。 そのため、between などの範囲でトランザクションを実行する場合は、制約のためにギャップロックが追加されます。 プロキーロック一時キー ロックは、クエリされたレコードをロックし、範囲クエリ内のすべてのギャップ スペースもロックし、次に次の隣接する間隔もロックします。 (リンは隣接を意味します) 楽観的ロックと悲観的ロック
要約するMySQL のロック機構に関するこの記事はこれで終わりです。MySQL のロック機構についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: docker リモート API のワンクリック TLS 暗号化の実装
>>: CSSスプライト技術は複数の背景を1つのPNG画像に統合しますCSSポジショニング
以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...
目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...
この記事では、MySQL ユーザー権限管理の例について説明します。ご参考までに、詳細は以下の通りです...
1. はじめにWeb プロジェクトを Linux サーバーで公開する場合、SSL 証明書を構成する必...
原因かつて私は Vultr に WordPress を設定しましたが、よく知られている理由により、こ...
正解useRouterの使用: // ルーターパス: "/user/:uid" ...
序文: MySQL では、システムが多くの文字セットをサポートしており、異なる文字セット間にはわずか...
<本文> <div id="ルート"> <h1 ...
序文403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-...
序文モバイル端末のREM適応ソリューションのレビューと概要remの使い方rem 単位の計算は、HTM...
この方法は2021年2月7日に編集されました。私が使用しているバージョンは8.0.23です。事件の原...
今日も私のページが文字化けしていたので、インターネットで関連する問題を検索しました。この方法はかなり...
MySQL 5.7.13 Mac用インストールチュートリアル、非常に詳細で、以下のように記録されてい...
退屈していたので、突然角丸四角形の実装を思いつきました。しかし、私たちはこの話題についてあまりにも長...
この記事のシナリオと組み合わせて、Nginx と Java 環境 (SpringBoot プロジェク...