mysqlクエリでロックされたテーブル

王林
リリース: 2023-05-23 09:29:36
オリジナル
7818 人が閲覧しました

Mysql は、一般的に使用されるデータベース管理システムとして、今日のインターネット アプリケーションで重要な役割を果たしています。ただし、Mysql の管理と保守にとって、そのパフォーマンスと安定性を向上させることも非常に重要な側面です。 Mysql のアプリケーション プロセスでは、ロックされたテーブルに遭遇することもよくありますが、この場合、ロックされたテーブルをクエリするにはどうすればよいでしょうか?以下では、Mysqlがロックされたテーブルにクエリを実行する方法を詳しく紹介します。

  1. Mysql の既存のロック ステータスを表示します。

Mysql クライアントに次のコマンドを入力します。

show engine innodb status;
ログイン後にコピー

このコマンドの機能は、 Mysql の現在のロック ステータス ロック ステータス。このステータス情報は、InnoDB ストレージ エンジンの形式でユーザーに返されます。このコマンドを通じて、InnoDB ストレージ エンジンのバージョン、現在取得されているロックの数、ロックされたトランザクションのトランザクション ID など、多くの情報を観察できます。

  1. ロックされたトランザクション情報の表示

Mysql ストレージ エンジンには trx_rollback_to_savepoint パラメーターがあり、現在ロックされているすべてのトランザクション情報を表示するために使用できます。 Mysql クライアントで次のコマンドを入力します。

SELECT r.trx_id waiting_trx_id,
       r.trx_mysql_thread_id waiting_thread,
       r.trx_query waiting_query,
       b.trx_id blocking_trx_id,
       b.trx_mysql_thread_id blocking_thread,
       b.trx_query blocking_query
FROM   information_schema.innodb_lock_waits w
       INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
       INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;
ログイン後にコピー

このコマンドの機能は、ロックされたテーブルの特定の情報と、対応するブロッキング トランザクション ID を表示することです。出力結果のwaiting_trx_idはブロックされているトランザクションID、waiting_threadはトランザクションに対応するプロセス番号、waiting_queryはトランザクションで実行されたSQL文、blocking_trx_idはトランザクションをブロックしているトランザクションID、blocking_threadはトランザクションに対応するプロセス番号を表します。トランザクション。blocking_query はトランザクションによって実行される SQL ステートメントを表します。

  1. ロックされたテーブル情報のクエリ

Mysql ストレージ エンジンには innodb_locks テーブルがあり、現在ロックされているすべてのテーブルの情報を表示するために使用できます。 Mysql クライアントで次のコマンドを入力します。

SELECT concat('`', t1.`TABLE_SCHEMA`, '`.`', t1.`TABLE_NAME`, '`') AS `table`,
       t2.`ENGINE`,
       t2.`TRX_ID`,
       t2.`LOCK_MODE`,
       t2.`LOCK_TYPE`,
       t2.`LOCK_DATA`
FROM   `information_schema`.`TABLES` t1,
       `information_schema`.`INNODB_LOCKS` t2
WHERE  ( ( t1.`TABLE_SCHEMA` = DATABASE() )
         AND ( concat('`', t1.`TABLE_SCHEMA`, '`.`', t1.`TABLE_NAME`, '`') = t2.`LOCK_DATA` ) );
ログイン後にコピー

このコマンドの機能は、現在ロックされているテーブルを表示することです。「table」は現在ロックされているテーブルの名前を表し、「ENGINE」は使用されているデータベースを表します。テーブルのそばにあるストレージエンジン。同時に、「TRX_ID」はテーブルをロックしたトランザクションIDを表し、「LOCK_MODE」はロックモードを表し、「LOCK_TYPE」はロックタイプを表し、「LOCK_DATA」はロックされたデータを表します。

要約:

Mysql でロックされたテーブルをクエリする方法は数多くありますが、上記の方法を通じて、現在ロックされているテーブルと対応するトランザクション情報を詳細に表示できるため、管理に役立ちます。メンバーは Mysql のパフォーマンスのボトルネックを理解し、根本原因から問題を解決します。ただし、ロックされたテーブル情報をクエリするときは、kill -9 やその他の操作によるプロセスの強制終了は避けるようにしてください。そうしないと、予期しない結果が生じる可能性があります。したがって、実際のアプリケーションプロセスでは、Mysql のロックテーブルの状況を慎重に扱い、特定のビジネスとシステムアーキテクチャに基づいて対応するソリューションと戦略を採用して、Mysql の動作効率と安定性を向上させる必要があります。

以上がmysqlクエリでロックされたテーブルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート