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の基本のまとめ

推薦する

Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...

W3C標準に準拠したHTML標準で注意すべき点を詳細に解説

XML/HTML コードコンテンツをクリップボードにコピー<!DOCTYPE html PUB...

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装0. 背景実際の開発環境では、フロントエン...

フロントエンドJavaScriptのクラス

目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...

CSS で実装された円形のプログレスバー

成果を達成する 実装コードhtml <div class="wrap"&g...

Windows に mysql5.7.28 winx64 の解凍バージョンをインストールするための詳細なチュートリアル

目次1. 解凍する2. データフォルダを作成する3. MySQLに環境変数を追加する3.1 コントロ...

Windows Server 2012 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

本日、会社の内部サーバーにログインしたところ、リモートアクセスができませんでした。エラー メッセージ...

Linux 環境変数とプロセス アドレス空間の概要

目次Linux 環境変数とプロセスアドレス空間コードを通じて環境変数を取得するプロセスアドレス空間な...

Vue elementUI フォームのネストされたテーブルと各行の検証の詳細な説明

目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...

Vueはテーマ切り替えのための複数のアイデアを実装します

目次テーマを動的に変更する最初の方法: 動的コンポーネント2番目の方法はルーティング分離です要約する...

divとtableの選択と組み合わせ方について簡単に説明します

ページレイアウトは、Web ページを扱い始めた頃からずっと気にかけていたことです。初期のテーブル構造...

HTML タグ マーキーを使用してスクロール効果を実現する簡単な方法 (必読)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

CentOS に Redis と MySQL をインストールする

1|0MySQL(MariaDB) 1|11. 説明MariaDB データベース管理システムは My...

MySQL インフラストラクチャ チュートリアル: クエリ ステートメント実行プロセスの詳細な説明

序文私は以前から、SQL 文がどのように実行され、どのような順序で実行されるのかを知りたいと思ってい...

vuex ベースのショッピングカート機能の実装

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...