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 における水平および垂直の中央揃え方法の詳細な説明 (基礎)

推薦する

JS addEventListener() およびattachEvent() メソッドは登録イベントを実装します

JavaScript の DOM イベント モデルでは、オブジェクトの addEventListen...

Xshell にショートカット コマンドを追加する方法

便利なターミナル エミュレーターである Xshell は、開発者がホスト サーバーをリモート管理する...

ico ミラー コードを HTML に追加します (favicon.ico はルート ディレクトリに配置されます)

コード:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC &...

子コンポーネントを通じて親コンポーネントのプロパティを変更するための Vue のさまざまな実装方法

目次序文一般的な方法1. 親コンポーネントを介して子コンポーネントの発行イベントをリッスンしてpro...

Windows 2016 Server セキュリティ設定

目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...

外部ファイル(js/vbs/css)をインポートするときに文字化けを回避する方法

ページ内にはjs、cssなどの外部ファイルが導入されており、外部ファイルのエンコードが現在のページフ...

Linux/Mac MySQL パスワードを忘れた場合のパスワード変更コマンドラインメソッド

すべての前提条件にはルート権限が必要です1. MySQLプロセスを終了する //Linux sudo...

Dockerコンテナのセルフスタートを実装する方法

コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...

Windows10 での MySQL msi インストール チュートリアル (画像とテキスト付き)

1. ダウンロード1. MySQL msi 公式 Web サイトから最新のダウンロードをクリックす...

データベース接続のURLの詳細な説明と概要

データベース接続のURLの詳細な説明と概要JDBC URL = プロトコル名 + サブプロトコル名 ...

jQueryはHTML要素の非表示と表示を実装します

商品を検索するときに、すべてのブランドまたは一部のブランドを表示するTaobaoの機能を真似してみま...

Vueカスタムカプセル化ボタンコンポーネント

Vueボタンコンポーネントのカスタムカプセル化コードは参考用です。具体的な内容は次のとおりです。ボタ...

ウェブサイト構築経験概要

<br />注目を集めるウェブサイトを作成するには、どのような原則に従うべきでしょうか?...

mysql-connector-java8.0.27 へのアップグレードに関する注意事項

最近、オンライン セキュリティ スキャンにより、MySQL コネクタに脆弱性が見つかりました。確認し...

タグが新しいページを開くかどうかという問題。主要ウェブサイトの開設状況をまとめました

a タグが新しいページを開くかどうか: (1)百度百科事典:ヘッダーが異なる場合は新しいページが開き...