显示 metadata lock 信息的 mysql 插件
有一回碰上在 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 的信息封装的相当严密,即使是写插件也没法用常规途径获取。只好用了一些很恶心的技巧。如果各位有碰到类似的问题,也可以先在测试环境试试。
原文地址:显示 metadata lock 信息的 mysql 插件, 感谢原作者分享。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

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

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

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

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