序文ロックの粒度に応じて区別する
ロックのシナリオによると
グローバルロックロック対象は、データベースインスタンス全体です。 読み取りロック付きテーブルフラッシュ (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. HTMLの概要htyper テキスト マークアップ言語 ハイパーテキスト マークアップ言語ハ...
1. 事件の背景:仕事上、Ubuntu への vscode リモート接続を使用する必要があります。 ...
フォーム項目を動的に追加するiview の動的なフォーム追加は非常に簡単です。フォーム項目を配列に設...
いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデー...
mysql サービスは開始されていますが、接続できません。この問題を解決するにはどうすればよいでしょ...
まず、provide/inject を使用する理由について説明しましょう。祖父コンポーネントと孫コン...
目次シナリオ中核問題ステータス監視状態監視の利点国家監視の欠点復興実行のアイデア依存関係の収集要約す...
エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...
目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...
リクエストロジックフロントエンド --> https経由でnginxをリクエストnginx -...
この記事では、ローカル マシンに Java 8 をインストールせずに、Java 8 を使用して簡単な...
最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...
序文今日は、聖杯レイアウトとダブルウィングレイアウト、そしてそれらの違いについてお話しします。この2...
LinuxにRedisをインストールしたら、Javaを使って接続します。Javaコードは次のとおりで...
序文フロントエンドフレームワークのヘビーユーザーとして、私はテクノロジーを選択する際にそのエコロジー...