2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【MySQL】5.7からは実行中のクエリのEXPLAINが取れるんです!

Posted at

MySQL5.7以降では実行中のクエリのEXPLAINが取れる

誰かさん(人じゃないかもしれないけど)が非常に重いクエリを流してたとする。
しかもそれは処理が終わってないとスロークエリに出ないので、EXPLAINで実行計画確認したくても5.6まではできなかった。
(PROCESSLISTのInfoはクエリの全体は見えないことが多いから)

でも、5.7からは取れるんです。

取り方

SHOW PROCESSLIST;

で実行中のクエリのIDを取得しましょう。

1枚目(モザイク).png

(※社内DBの情報部分についてはぼかして表示しています)

上の例だと 1670163 ですね。

EXPLAIN for connection <ID>

で今実行中のクエリのEXPLAINが取れるんです。

EXPLAIN for connection 1670163

と入れて実行すると以下のように実行計画が確認できます。

2枚目(モザイク).png

上の例だとインデックスは利いてるんだけど一行目にあるテーブルが刈り込まれてないんだなー、ということが分かります。

ちなみに

ここで少し残念なのは Visual EXPLAINで表示できない ことですかね。

とはいえ、

もし、実行中のクエリがshow processlistで見つかって、そのMySQLのバージョンがMySQL5.7以上ならぜひ使ってみてください。

参照

https://dev.mysql.com/doc/refman/5.7/en/explain-for-connection.html
https://dev.mysql.com/doc/refman/8.0/en/explain-for-connection.html

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?