序文ロックの粒度に応じて区別する
ロックのシナリオによると
グローバルロックロック対象は、データベースインスタンス全体です。 読み取りロック付きテーブルフラッシュ (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ポジショニング
バックエンド プログラマーは、さまざまな場所で Linux を扱います。Linux ログの読み方がわ...
この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...
目次1. Javascript とは何ですか? 2. DOMとは何か3. JSコードの実行方法4. ...
この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...
最新の Ubuntu Server バージョンを使用している場合、ようこそメッセージに、Ubuntu...
今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...
目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...
序文hover疑似クラスが要素に境界線を追加すると、要素内のコンテンツがずれることがあります。box...
<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトのタ...
この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...
ffmpeg は非常に強力なオーディオおよびビデオ処理ツールです。公式 Web サイトは http:...
デフォルトでは、 /etc/default/docker 設定は有効になりません。docker 環境...
ウェブサイトリンク: http://strml.net/サミュエル・リード著ヒント: 昨日、Mome...
コードは次のようになります。 。プロセス{ 境界線:1px 実線 #B7B7B8; 背景:#F8F8...
この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...