SHOW PROCESSLISTから完全なクエリを表示する方法


296

SHOW PROCESSLISTクエリを発行すると、実行中のSQLクエリの最初の100文字だけが情報列に返されます。

Mysql設定を変更するか、別の種類のリクエストを発行して完全なクエリを表示することは可能ですか(私が見ているクエリは100文字を超えています)

回答:


482
SHOW FULL PROCESSLIST

を使用しない場合FULL「各ステートメントの最初の100文字のみがInfoフィールドに表示されます」

phpMyAdminを使用する場合は、「全文」オプション(結果テーブルの左上隅にある「←T→」)をクリックして、切り捨てられていない結果を表示する必要があります。


3
phpmyadminはこれを気にせず、切り捨てられた情報を表示しているようです。
giorgio79 2012

@ giorgio79:正しく思い出せば、phpMyAdminはすべての文字列の結果を切り捨てます。私がウェブ開発を行ってから4年が経過しているため、私は非常に誤解される可能性があります。
James McNellis、2012

2
を使用している場合でも、クエリが特定の長さの後に切り捨てられるのを目にしていSHOW FULL PROCESSLISTます。どういうわけかもっと充実させることができますか?
wizonesolutions 2014

コマンドの最後にSHOW FULL PROCESSLISTセミコロンが必要;ですか?
Rakibul Haq

1
@ R.Haqこれが実行する唯一のクエリである場合、セミコロンは必要ありません。複数のクエリを実行する場合は、それぞれの後にセミコロンが必要です。
フリオガルシア

85

Show Processlistは、別のテーブルから情報をフェッチします。データをプルして、クエリ全体を含む「INFO」列を確認する方法は次のとおりです。

select * from INFORMATION_SCHEMA.PROCESSLIST where db = 'somedb';

要件に基づいて、任意の条件を追加するか、無視することができます。

クエリの出力は次のようになります。

+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| ID    | USER | HOST            | DB     | COMMAND | TIME | STATE     | INFO                                                     |
+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
|     5 | ssss | localhost:41060 | somedb | Sleep   |    3 |           | NULL                                                     |
| 58169 | root | localhost       | somedb | Query   |    0 | executing | select * from sometable where tblColumnName = 'someName' |

12
これはおそらく最も有用な答えです。
dr_ 2016年

私の情報列は示していますCOMMIT。実際のクエリの詳細を表示する方法を知っていますか?
m.spyratos 2018年

localhost:41060、41060は何を表していますか?推測?
Farveen Hassan

12

MySQLのドキュメントを読んだところSHOW FULL PROCESSLIST、デフォルトでは現在のユーザー接続からのスレッドのみがリストされます。

MySQL SHOW FULL PROCESSLISTドキュメントからの引用:

PROCESS権限を持っている場合は、すべてのスレッドを表示できます。

したがってProcess_privmysql.userテーブルの列を有効にすることができます。FLUSH PRIVILEGES後で実行することを忘れないでください:)


12

SHOW PROCESSLISTからの完全なクエリを参照してください。

SHOW FULL PROCESSLIST;

または

 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;

10

手動で対話せずにシェルセッションで更新されたプロセス(例では2秒)を取得し続けたい場合は、次のコマンドを使用します。

watch -n 2 'mysql -h 127.0.0.1 -P 3306 -u some_user -psome_pass some_database -e "show full processlist;"'

の唯一の悪い点show [full] processlistは、出力結果をフィルタリングできないことです。一方、SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST表示したくないものを出力から削除するためのオープンな可能性を発行します。

SELECT * from INFORMATION_SCHEMA.PROCESSLIST
WHERE DB = 'somedatabase'
AND COMMAND <> 'Sleep'
AND HOST NOT LIKE '10.164.25.133%' \G
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.