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 ご質問がありましたら、メッセージを残すか、コミュニティに参加して話し合いましょう。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: Ubuntu 18.04 向け VMware Tools のインストールと構成のチュートリアル
npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...
<tfoot> タグは、テーブル フッターのスタイルを定義するために使用されます。基本構...
複合インデックス (結合インデックスとも呼ばれます) は、複数の列に対して作成されるインデックスです...
Windows 10 に Docker をインストールする場合、コンテナタイプを Linux コンテ...
設置環境WIN10 VMware Workstation Pro 15.0.0 ビルド 101344...
1.デバイス幅定義: 出力デバイスの画面表示幅を定義します。 Web ページが Safari で開か...
1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...
今日、Nginxを使っていたら500エラーが発生しました。エラーコードを検索してみんなに共有しました...
導入簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...
序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...
凡例コンポーネントは、ECharts でよく使用されるコンポーネントです。シリーズ マーカーの名前を...
HTML フォームは、さまざまな種類のユーザー入力を収集するために使用されます。次のコードは、HTM...
PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...
Angular入門Angular は、Google が開発したオープンソースの Web フロントエン...
node を D ドライブにインストールしましたが、C ドライブのスペースを占有したくなかったため、...