2022-12-03

MySQL WorkBench でスロークエリをとって ISUCON 頑張る

Written by: ekusiadadus

MySQL WorkBench でスロークエリをとって ISUCON 頑張る

MySQL WorkBench でスロークエリをとって ISUCON 頑張る

MySQL WorkBench を 仕事で最近使うようになりました。 MWB を触っているうちに、結構いろいろなことができることに気が付きました。 例えば、ER 図を作成したり、スロークエリログをとることです。

また、達人が教える Web パフォーマンスチューニングが発売されて、Twitter で話題になっていて気になっていました。

「達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践」について読み始めて、色々突っ込みどころというか、間違いが満載なので、Qiitaにまとめでも書こうかと下書きで書いているのですが、あまりに多すぎて、自分の時間の優先順位を思い出して書くのを止めようかと…

— Yoichiro Takehora (竹洞 陽一郎) (@takehora) June 7, 2022

今回は、MWB になれるため+ISUCON 本 の練習にprivate-isuを解いていこうと思います。

環境構築

AMI で作成していきます。 なんとなく手順を書いておきます。

1. AWS コンソール -> EC2 🍇

ec2.png

2. Launch Instances 🍈

ec22.png

3. private-isu から AMI ID で検索 🍉

ec23.png

ec24.png

4. Instance type を c4.large に 🍊

ec25.png

5. Key pair + セキュリティグループ設定 🍋

ec26.png

6. ディスクサイズ設定 🍌

ec27.png

7. 起動 🍎

ec29.png

ec212.png

8. SSH 🍍

ssh.png

ec211.png

MWB 接続 🍏

MWB で、private-isu 内の MySQL に接続します。 ssh2.png

成功すると、以下のように接続が確立されます。

ssh3.png

SQL も実行できます。 mysqlworkbench3.png

ER 図作成 🍐

MWB では、ER 図を簡単に作成できます。

image.png

mysqlworkbench4.png

スロークエリログ 🍑

Perfomance Reports -> Statement Analysis から、スロークエリログを確認できます。

mysqlworkbench5.png

"SELECT `id`, `user_id`, `body`, `mime`, `created_at` FROM `posts` WHERE `user_id` = ? ORDER BY `created_at` DESC"

が N+1 クエリになってそうです。 早速、解消していきましょう。

private-isu 改善 🍒

ec230.png

image.png

score: 216 -> score: 18028

N+1 クエリと無駄に呼ばれているクエリを解消することで、大幅に改善することができました!

最後に 🥥

達人が教える Web パフォーマンスチューニングを読んで、とっても勉強になりました。

良き ISUCON ライフを!