Mysql のデッドロックの表示とデッドロックの除去の詳細な説明

Mysql のデッドロックの表示とデッドロックの除去の詳細な説明

序文

しばらく前にMysqlのデッドロック問題に遭遇したので、解決しました。

問題の説明: Mysql の変更ステートメントが有効にならないようで、Mysql GUI ツールを使用してフィールドの値を編集すると例外がポップアップ表示されます。

デッドロックとは何ですか?

MySQL のデッドロック問題を解決する前に、まずデッドロックとは何かを理解しましょう。

デッドロックとは、実行中にリソースの競合により、2 つ以上のプロセスが互いに待機する現象を指します。外部からの力がなければ、先に進めなくなります。このとき、システムはデッドロック状態にある、またはシステムがデッドロックを起こしていると言われます。このように常に互いを待機しているプロセスをデッドロック プロセスと呼びます。

デッドロックの兆候

デッドロックには、次の 2 つの具体的な現れ方があります。

Mysql の追加および変更ステートメントが正しく機能しません。Mysql GUI ツールを使用してフィールドの値を編集すると、例外が発生します。 デッドロックを回避する方法

デッドロックを防ぐ方法は、デッドロック条件が満たされる状況を避けることです。そのためには、開発プロセス中に次の原則に従う必要があります。

1. データの変更を伴うステートメントの同時実行を避けてください。

2. 各トランザクションは、一度に使用されるすべてのデータをロックする必要があります。そうしないと、実行が許可されません。

3. ロック順序が事前に指定されており、すべてのトランザクションはこの順序でデータをロックする必要があります。たとえば、トランザクション内で異なるプロセスがオブジェクトを更新する順序は、可能な限り一貫性を保つ必要があります。

デッドロックを表示

MySQL でロックされたテーブルがあるかどうかを照会する方法は多数あります。ここでは、最も一般的に使用される方法のみを紹介します。

1. 進行中の取引を表示する

情報スキーマ.INNODB_TRXから*を選択します

プロセス ID 3175 のトランザクションがロックされており、ID 3173 の別のトランザクションが実行中だがコミットされていないことがわかります。

2. ロックされたトランザクションを表示する

INFORMATION_SCHEMA.INNODB_LOCKS から * を選択します。 

3. ロックを待機しているトランザクションを表示する

INFORMATION_SCHEMA.INNODB_LOCK_WAITS から * を選択します。 

4. テーブルがロックされているかどうかを確認する

In_use > 0 の場合に開いているテーブルを表示します。 

デッドロックが発生すると、これらのメソッドは現在のデッドロックに関連する情報を照会できます。

5. 最近のデッドロックのログを表示する

エンジンの InnoDB ステータスを表示

デッドロックの解決

デッドロックを解決する必要がある場合、プロセス ID を見つけて直接強制終了するという単純かつ強力な方法があります。

現在進行中のプロセスを表示する

プロセスリストを表示

// SELECT * FROM information_schema.INNODB_TRX; を使用することもできます。

これら 2 つのコマンドによって検出されたプロセス ID は同じです。

プロセスに対応するプロセスIDを強制終了します

キルID

検証(強制終了後にロックが残っているかどうかを確認)

In_use > 0 の場合に開いているテーブルを表示します。

参考リンク

Mysql テーブルの表示とテーブルのロック解除

MySQL デッドロックとは何ですか?

これで、MySQL のデッドロック チェックとデッドロック除去に関するこの記事は終了です。MySQL のデッドロック チェックとデッドロック除去の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLのデッドロックチェック処理の通常の方法
  • MySQLデッドロックの原因と解決策
  • MySQLデッドロック問題の詳細な分析
  • MySQL デッドロック ルーチン: 一意のインデックスの下でのバッチ挿入順序の不一致
  • MySQL デッドロック シナリオ例の分析
  • 魔法のMySQLデッドロックトラブルシューティング記録
  • MySQL データベースのパージデッドロック問題の分析
  • SQLによる分散デッドロックの検出と排除の詳細な説明

<<:  Vueデータ監視の原理の詳細な説明

>>:  HTML における水平および垂直の中央揃え方法の詳細な説明 (基礎)

推薦する

MySQL ALTERコマンドの知識ポイントのまとめ

テーブル名を変更したり、テーブル フィールドを変更したりする必要がある場合は、 MySQL ALTE...

JS 実用的なオブジェクト指向スネークゲームの例

目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....

MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?

目次クエリの背景1. クエリをいいね2. JSON関数クエリ3. 共同インデックスクエリ4. 全文イ...

Nginx セッション損失問題の解決策

nginx をリバース プロキシ tomcat として使用する場合、セッション損失が発生する可能性が...

vsCodeはワンクリックでvueテンプレートを生成します

1. ショートカットCtrl + Shift + Pを使用してコンソールを呼び出します 2、「スニペ...

Ubuntu 16.04 で FTP サーバーを構築するチュートリアル

Ubuntu 16.04 FTP サーバーをビルドするftpをインストールするftp をインストール...

Vueのスロットの詳細な説明

Vue でのコードの再利用により、mixnis が提供されます。テンプレートの再利用により、スロット...

MySQL インデックス カバレッジの例の分析

この記事では、MySQL インデックス カバレッジについて例を挙げて説明します。ご参考までに、詳細は...

Kubernetes YAMLファイルの使用

目次01 YAMLファイルの概要YAML---キー値型YAML---リスト型02 K8Sにおけるマス...

CSS リセットスタイルリセットの実装例

はじめに: すべてのブラウザには、「ユーザー エージェント スタイル シート」と呼ばれる、すべてのペ...

一般的なメールボックスで正常に表示できる HTML メールを作成するためのヒント

HTML メールを送信するためのヒント: スタイルを使用してインライン CSS を記述する、使用する...

CSS でテキストシャドウと要素シャドウ効果を使用する

テキストシャドウの紹介CSSでは、 text-shadowプロパティを使用してテキストの影を設定しま...

Windows で nginx を素早くインストールし、自動的に起動するように設定する

目次1. Windows システムでの Nginx のインストールと起動プロセス: 2. 起動時にN...

レンダリング関数と JSX の詳細

目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...