MySQL でメタデータ ロックがブロックされている場所を確認する方法

MySQL でメタデータ ロックがブロックされている場所を確認する方法

MySQL でメタデータ ロックがブロックされている場所を確認する方法

手順:

1. セッション1の実行:

   トランザクションを開始します。
   t1から*を選択します。

2. ステップ 1 の後にセッション 2 が実行されます。

  テーブル t1 を削除します。

このとき、セッション 2 のドロップ ステートメントはブロックされます。では、メタデータ ロックをどのように分析して表示するのでしょうか?

方法:

1) show processlist; を実行すると、drop ステートメントがメタデータ ロックを待機していることがわかります。

mysql> プロセスリストを表示します。 
+----+--------------+-----------+---------+----------+----------+-------------------------------------------------------------------------------------------+------------------+ 
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | 
+----+--------------+-----------+---------+----------+----------+-------------------------------------------------------------------------------------------+------------------+ 
| 5 | システム ユーザー | | NULL | 接続 | 1050234 | マスターがイベントを送信するのを待機中 | NULL | 
| 6 | システム ユーザー | | NULL | 接続 | 983193 | スレーブはすべてのリレー ログを読み取りました。スレーブ I/O スレッドがそれを更新するのを待機しています | NULL | 
| 8 | ルート | ローカルホスト | yzs | スリープ | 93 | | NULL | 
| 9 | root | localhost | yzs | クエリ | 3 | テーブル メタデータ ロックを待機中 | テーブル t1 を削除 | 
| 10 | root | localhost | NULL | クエリ | 0 | init | プロセスリストを表示 | 
+----+--------------+-----------+---------+----------+----------+-------------------------------------------------------------------------------------------+------------------+ 
セット内の行数は 5 です (0.00 秒) 

2) 現在実行中のトランザクションのスレッドは trx_mysql_thread_id:8 であることがわかりますが、このスレッドは何を実行しているのでしょうか?

mysql> information_schema.innodb_trx\G から * を選択します 
************************** 1. 行 **************************** 
          トランザクションID: 17683 
         trx_state: 実行中 
        trx_started: 2017-10-18 05:32:46 
   trx_requested_lock_id: NULL 
     trx_wait_started: NULL 
        trx_weight: 0 
    trx_mysql_スレッドID: 8 
         trx_query: NULL 
    trx_operation_state: NULL 
     使用中のtrxテーブル: 0 
     trx_tables_locked: 0 
     trx_lock_structs: 0 
   trx_lock_memory_bytes: 320 
      ロックされた行数: 0 
     trx_rows_modified: 0 
  trx_concurrency_tickets: 0 
    trx_isolation_level: 繰り返し読み取り 
     trx_unique_checks: 1 
  trx_foreign_key_checks: 1 
trx_last_foreign_key_error: NULL 
 trx_adaptive_hash_latched: 0 
 trx_adaptive_hash_timeout: 10000 
     trx_is_read_only: 0 
trx_autocommit_non_locking: 0 
セット内の1行(0.03秒) 

3) このスレッドが select ステートメントを実行していることがわかります。show engine innodb status を実行すると、トランザクションがスリープ状態にあることがわかります。これは、トランザクション ステートメントは実行されたがコミットされていないことを意味します。

トランザクションのスレッドを強制終了するには、kill 8 を実行します。または、ビジネスの SQL ステートメントをチェックして、未送信の SQL ステートメントがあるかどうかを確認します。

mysql> performance_schema.events_statements_current\G から * を選択します 
************************** 1. 行 **************************** 
       スレッドID: 27 
        イベントID: 15 
      END_EVENT_ID: 15 
       EVENT_NAME: ステートメント/sql/select 
         ソース: mysqld.cc:962 
      タイマー開始: 1050544992900922000 
       タイマー終了: 1050544993740836000 
       タイマー待機時間: 839914000 
       ロック時間: 196000000 
        SQL_TEXT: t1から*を選択 
         ダイジェスト: 1aa32397c8ec37230aed78ef16126571 
      DIGEST_TEXT: `t1` から * を選択  
     現在のスキーマ: yzs 
      オブジェクトタイプ: NULL 
     OBJECT_SCHEMA: NULL 
      オブジェクト名: NULL 
 OBJECT_INSTANCE_BEGIN: NULL 
      エラー: 0 
   返されたSQLSTATE: NULL 
      メッセージテキスト: NULL 
         エラー: 0 
        警告: 0 
     影響を受ける行数: 0 
       送信済み行数: 10 
     検査済み行数: 10 
作成されたTMP_DISK_TABLES: 0 
   作成されたTMPテーブル: 0 
    SELECT_FULL_JOIN: 0 
 SELECT_FULL_RANGE_JOIN: 0 
      選択範囲: 0 
   選択範囲チェック: 0 
      選択スキャン: 1 
   ソート_マージ_パス: 0 
       ソート範囲: 0 
       ソート行: 0 
       ソートスキャン: 0 
     インデックス未使用: 1 
   未使用インデックス: 0 
    ネスティングイベントID: NULL 
   ネスティングイベントタイプ: NULL 

ご質問がありましたら、メッセージを残すか、コミュニティに参加して話し合いましょう。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL ロックブロッキングの詳細な分析

<<:  Ubuntu 18.04 向け VMware Tools のインストールと構成のチュートリアル

>>:  Reactの基本のまとめ

推薦する

explainコマンドがMySQLデータを変更する理由

クエリで EXPLAIN を実行するとデータベースが変更されるかどうかを尋ねられた場合、おそらく「い...

HTML チュートリアル、optgroup 要素の理解

カテゴリ選択を選択します。テストの結果、IE と FF はこの要素を適切にサポートできることがわかり...

Vue の双方向イベントバインディング v-model の原理についての簡単な説明

目次説明する:要約する補充するDOM を直接変更して操作する js や jQuery とは異なり、V...

jsは画像切り取り機能を実現する

この記事の例では、画像の切り取りを実現するためのjsの具体的なコードを参考までに共有しています。具体...

Dockerはコンテナに入るためにルートを使用する

まずdockerコンテナを実行しますルートユーザーとしてコマンドを実行する sudo docker ...

JavaScript のプロトタイプとプロトタイプチェーンの詳細な説明

目次プロトタイプチェーン図プロトタイピングに必須の知識プロトタイププロパティ(プロトタイプを表示) ...

CSS 要素を表示および非表示にする 9 つの方法

Web ページの制作では、要素の表示と非表示は非常に一般的な要件です。この記事では、要素を表示したり...

MySQLのクラスタモードでのgalera-clusterのデプロイメントの詳細説明

目次1: galera-clusterの紹介2. galera-clusterの仕組み3: Mari...

JS でシンプルなデータ監視を実装する方法

目次概要最初のステップステップ2なぜ別の _data が必要なのでしょうか?データにもう少しデータを...

HTMLとは何ですか?

HTML 開発の歴史: HTML は英語で Hypertext Marked Language の...

MySQLでデータをエクスポートするいくつかの方法の詳細な説明

MySQL データをエクスポートする目的は、データベースのバックアップ、テーブル構造のエクスポート、...

Linuxはシェルスクリプトを使用して履歴ログファイルを定期的に削除します

1. ツールディレクトリのファイル構造 [root@www tools]# ツリーツール/ ツール/...

よく使われるシングルページアプリケーションウェブサイト共有

CSS3お願いしますこのウェブサイトを自分で見て、パラメータを変更し、CSS3効果をオン/オフにする...

FileZilla_Server:425 データ接続を開けない問題を解決する方法

FileZilla Serverをサーバーにインストールすると、425データ接続を開けない問題が発生...

ウェブページにプレーヤーを埋め込む埋め込み要素の自動開始が false 無効

最近、仕事でサウンド ファイルを再生するために Web ページにプレーヤーを埋め込む必要に迫られまし...