序文ロックの粒度に応じて区別する
ロックのシナリオによると
グローバルロックロック対象は、データベースインスタンス全体です。 読み取りロック付きテーブルフラッシュ (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ポジショニング
MySQL ページング クエリは通常、制限を通じて実装されます。 limit は 1 つまたは 2 ...
ワームは、その名前が示すように、自ら複製し、その数は倍増、つまり指数関数的に増加します。 MySQL...
コンポーネントの基本1 コンポーネントの再利用コンポーネントは再利用可能な Vue インスタンスです...
新しい公式サイトはオンラインですが、携帯電話で新しい公式サイトにアクセスすると、エクスペリエンスが非...
1. エラーの再現MySQL データベースにはアクセスできますが、データベース テーブルを読み取るこ...
1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
Fuser コマンドとは何ですか? fuser コマンドは、特定のファイル、ディレクトリ、またはソケ...
序文この記事では、div の幅を 100% に設定し、親要素を超えてパディングまたはマージンを設定す...
MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...
前に書いた内容: ビジネス ロジックの判断を行うために、最新のトランザクション ID を表示する必要...
1. コマンドの紹介date コマンドは、現在の時刻または指定された時刻を指定された形式で表示するた...
導入今日は Python でデータベースに接続する方法を学んだので、MySQL データベースをインス...
主キー:キーワード: 主キー機能: null にすることはできず、一意である必要があります。主キーの...
目次1. キャラクター文法パラメータ索引戻り値2. 連結文法パラメータ文字列2 [, …文字列N]戻...