ホームページ データベース mysql チュートリアル 显示 metadata lock 信息的 mysql 插件

显示 metadata lock 信息的 mysql 插件

Jun 07, 2016 pm 04:38 PM
lock mysql 1つ 情報 プラグイン 見せる

有一回碰上在 mysql 5.5 中,一些表没法执行 DDL ,会一直被阻塞

有一回碰上在 mysql 5.5 中,一些表没法执行 DDL ,会一直被阻塞住。show processlist 会看到

mysql> show full processlist;
+----+------+-----------------+------+---------+------+---------------------------------+-----------------------+
| Id | User | Host            | db   | Command | Time | State                           | Info                  |
+----+------+-----------------+------+---------+------+---------------------------------+-----------------------+
...
|  6 | root | localhost:56841 | test | Query   |    0 | init                            | show full processlist |
|  7 | root | localhost:56843 | test | Query   |   13 | Waiting for table metadata lock | rename table u to uu  |
...
+----+------+-----------------+------+---------+------+---------------------------------+-----------------------+
ログイン後にコピー

可以看出,是被一个 metadata lock 阻塞住了。但是从 process list 里是没法看出是哪个线程持有了这个锁。用别的方式,也只能得到通过 lock table 方式获取的锁或 innodb 事务的信息。对于一些比较隐蔽的方式,比如

mysql> begin;
mysql> select * from test.u;
ログイン後にコピー

这样也同样会获取 metadata lock 。在 autocommit 为 0 的时候,没有显式 begin 也是如此。这类情况没法从任何途径获取究竟是谁上了锁。

于是我就试着做了一个 mysql 的 information schema 插件。 https://github.com/xiezhenye/mysql-plugin-mdl-lock 安装后,只要 select * from information_schema.MDL_LOCKS 就可以获取到所有 metadata lock ,也就是 mdl lock 的信息。

mysql> select * from information_schema.MDL_LOCKS;
+-----------+-------------+---------------------+-----------+----------+------+
| THREAD_ID | DURATION    | TYPE                | NAMESPACE | DATABASE | NAME |
+-----------+-------------+---------------------+-----------+----------+------+
|         7 | STATEMENT   | INTENTION_EXCLUSIVE | GLOBAL    |          |      |
|         7 | TRANSACTION | SHARED_WRITE        | TABLE     | test     | t    |
+-----------+-------------+---------------------+-----------+----------+------+
2 rows in set (0.00 sec)
ログイン後にコピー

在写这个插件的时候,发现 mysql 把 mdl lock 的信息封装的相当严密,即使是写插件也没法用常规途径获取。只好用了一些很恶心的技巧。如果各位有碰到类似的问题,也可以先在测试环境试试。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Debian文字列は、複数のブラウザと互換性があります Debian文字列は、複数のブラウザと互換性があります Apr 02, 2025 am 08:30 AM

「DebianStrings」は標準的な用語ではなく、その特定の意味はまだ不明です。この記事は、ブラウザの互換性について直接コメントすることはできません。ただし、「DebianStrings」がDebianシステムで実行されているWebアプリケーションを指す場合、そのブラウザの互換性はアプリケーション自体の技術アーキテクチャに依存します。ほとんどの最新のWebアプリケーションは、クロスブラウザーの互換性に取り組んでいます。これは、次のWeb標準と、適切に互換性のあるフロントエンドテクノロジー(HTML、CSS、JavaScriptなど)およびバックエンドテクノロジー(PHP、Python、Node.jsなど)を使用することに依存しています。アプリケーションが複数のブラウザと互換性があることを確認するには、開発者がクロスブラウザーテストを実施し、応答性を使用する必要があることがよくあります

Beego ormのモデルに関連付けられているデータベースを指定する方法は? Beego ormのモデルに関連付けられているデータベースを指定する方法は? Apr 02, 2025 pm 03:54 PM

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...

ウェブサイトにDebian文字列を適用する方法 ウェブサイトにDebian文字列を適用する方法 Apr 02, 2025 am 08:21 AM

この記事では、Debian SystemsでWebサイトのパフォーマンスを最適化する方法について説明します。 「DebianStrings」は標準的な用語ではなく、Webサイトのパフォーマンスを改善するためにDebian Systemsで使用されるツールまたはテクノロジーを指す場合があります。以下はいくつかの実用的なヒントです。1。パゴダパネルを使用して、WebサーバーとPHP環境構成のインストールおよび構成プロセスを簡素化することをお勧めします。 Nginx1.22.1をWebサーバーとして、Scriptインタープリターとしてphp8.2、MySQL10.7.3-MariadBをデータベースシステムとしてインストールすることをお勧めします。 fileInfo、opcache、memcached、redなど、必要なPHP拡張機能を有効にしてください

GOプログラミングでは、MySQLとRedisの間で接続を正しく管理し、リソースをリリースする方法は? GOプログラミングでは、MySQLとRedisの間で接続を正しく管理し、リソースをリリースする方法は? Apr 02, 2025 pm 05:03 PM

GOプログラミングのリソース管理:MySQLとRedisは、特にデータベースとキャッシュを使用して、リソースを正しく管理する方法を学習するために接続およびリリースします...

Go関数パラメーターの渡されます:関数内で変更された後、Pointer変数が変更されていないのはなぜですか? Go関数パラメーターの渡されます:関数内で変更された後、Pointer変数が変更されていないのはなぜですか? Apr 02, 2025 am 09:21 AM

go言語に渡される関数パラメーターに関する質問:なぜポインター変数が変更されていないのですか?この記事では、GO言語プログラムにおけるポインター変数割り当ての問題について説明します...

SQL.Openを使用するとき、DSNが空に渡されたときにエラーを報告しないのはなぜですか? SQL.Openを使用するとき、DSNが空に渡されたときにエラーを報告しないのはなぜですか? Apr 02, 2025 pm 12:54 PM

SQL.Openを使用する場合、DSNがエラーを報告しないのはなぜですか? GO言語では、sql.open ...

同時注文を高くするときにデータベースのボトルネックを避ける方法は? 同時注文を高くするときにデータベースのボトルネックを避ける方法は? Apr 02, 2025 am 09:03 AM

高い並行性環境での注文処理:データベースのボトルネックを避ける方法は? eコマースシステムでは、注文を出すには、多くの場合、在庫の削減とユーザーバランスの更新が含まれます...

MySQLとRedisの間のデータの一貫性のソリューションを選択する方法:遅延した二重削除と最初にデータベースの変更とキャッシュと適用可能なシナリオの削除の違いは? MySQLとRedisの間のデータの一貫性のソリューションを選択する方法:遅延した二重削除と最初にデータベースの変更とキャッシュと適用可能なシナリオの削除の違いは? Apr 02, 2025 am 11:57 AM

MySQLとRedisの間のデータの一貫性に関する2つのソリューション:ダブル削除の遅延と最初にデータベースの変更、次にキャッシュの削除を使用して、MySQLとRedisのデータの一貫性の問題を処理するために使用されます。

See all articles