MySQL WorkBench でスロークエリをとって ISUCON 頑張る
MySQL WorkBench でスロークエリをとって ISUCON 頑張る
MySQL WorkBench を 仕事で最近使うようになりました。
MWB を触っているうちに、結構いろいろなことができることに気が付きました。
例えば、ER 図を作成したり、スロークエリログをとることです。
また、達人が教える Web パフォーマンスチューニングが発売されて、Twitter で話題になっていて気になっていました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">「達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践」について読み始めて、色々突っ込みどころというか、間違いが満載なので、Qiitaにまとめでも書こうかと下書きで書いているのですが、あまりに多すぎて、自分の時間の優先順位を思い出して書くのを止めようかと…</p>— Yoichiro Takehora (竹洞 陽一郎) (@takehora) <a href="https://twitter.com/takehora/status/1534082403085750272?ref_src=twsrc^tfw">June 7, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
今回は、MWB になれるため+ISUCON 本 の練習にprivate-isuを解いていこうと思います。
環境構築
AMI で作成していきます。
なんとなく手順を書いておきます。
1. AWS コンソール -> EC2 🍇
2. Launch Instances 🍈
private-isu から AMI ID で検索 🍉
3.
c4.large
に 🍊
4. Instance type を 5. Key pair + セキュリティグループ設定 🍋
6. ディスクサイズ設定 🍌
7. 起動 🍎
8. SSH 🍍
MWB 接続 🍏
MWB で、private-isu 内の MySQL に接続します。
成功すると、以下のように接続が確立されます。
SQL も実行できます。
ER 図作成 🍐
MWB では、ER 図を簡単に作成できます。
スロークエリログ 🍑
Perfomance Reports
-> Statement Analysis
から、スロークエリログを確認できます。
"SELECT `id`, `user_id`, `body`, `mime`, `created_at` FROM `posts` WHERE `user_id` = ? ORDER BY `created_at` DESC"
が N+1 クエリになってそうです。
早速、解消していきましょう。
private-isu 改善 🍒
score: 216
-> score: 18028
N+1 クエリと無駄に呼ばれているクエリを解消することで、大幅に改善することができました!
- ここら辺は、達人が教える Web パフォーマンスチューニングに書いてあるので是非、読んでみて下さい!
最後に 🥥
達人が教える Web パフォーマンスチューニングを読んで、とっても勉強になりました。
良き ISUCON ライフを!
Discussion