序文ロックの粒度に応じて区別する
ロックのシナリオによると
グローバルロックロック対象は、データベースインスタンス全体です。 読み取りロック付きテーブルフラッシュ (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ポジショニング
序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...
透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...
1. はじめに● ランダム書き込みではヘッドがトラックを頻繁に変更するため、効率が大幅に低下します。...
目次CSS カスタム変数機能は古くから存在していますが、実際の開発ではあまり使用されていません。その...
序文同社の Ubuntu サーバーは、さまざまなシステムのディレクトリを異なる論理パーティションに配...
序文Boost ライブラリは、標準ライブラリのバックアップとして機能し、C++ 標準化プロセスの開発...
TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...
1. インストールapt-get install mysql-server にはアカウントとパスワー...
この記事は、2018 年 9 月 19 日に Adobe Systems Inc で開催された ...
導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...
W3C 標準化プロセスは 7 つの異なるステップに分かれています。 W3C 標準化プロセスは 7 つ...
transform:scale()比例したズームインまたはズームアウトを実現できます。 transi...
vscode エディタを使用して vue テンプレートを作成すると、新しい vue ファイルを作成す...
ターミナル分割画面ツールは2つあります: screen と tmux 1. 画面分割を使用する(上下...
1. mycatとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベ...