Query Insights紹介
はじめに
先日、社内のあるAPIで504(TimeoutError)が発生しており、その原因がスロークエリでした。その調査の過程で使用したCloud SQLのQuery Insightsという機能が便利だったので、備忘録を兼ねて紹介記事を書き残すことにししました🙏
該当のスロークエリの調査でやったことはこちらの2つです。
- 1.対象APIでTimeoutErrorの事象発生、ログやコード等の調査
- 2.クエリの調査
- Explainによるクエリ実行計画の確認(Indexが効いているかなどを確認)
- Query Insightsの確認(実際のクエリのパフォーマンスを確認)
Query Insightsは「2.クエリの調査」で実際のクエリのパフォーマンスを確認するのに使用しました。
Query Insightsとは
そもそもQuery Insightsが何なのか、公式サイトに以下のように書いています。
Query Insights では、Cloud SQL データベースに対するクエリ パフォーマンスの問題を検出、診断、防止できます。直感的なモニタリングをサポートし、検出するだけでなくパフォーマンスの問題の根本原因の特定に役立つ診断情報を提供します。
引用元:Query Insights を使用してクエリのパフォーマンスを向上させる はじめに
だそうです。
モニタリング用のダッシュボードでは、上側がDBの負荷を表すグラフ、下側がクエリ毎の統計情報の表になっています。個人的に直感的で分かりやすく気に入っています👏
ダッシュボードの表では、クエリ毎の統計情報が確認でき、それぞれ以下に対応しています。
- 負荷(合計時間別)/ 負荷(CPU 別)/ 負荷(IO 待機別)/ 負荷(ロック待機別): 特定のクエリをフィルタして最大の負荷を見つけるオプションです。
- 平均実行時間(ミリ秒): クエリの平均実行時間。
- 呼び出された回数: アプリケーションがクエリを呼び出した回数。
- 返された平均行数: クエリに対して返された行数の平均。
- 平均スキャン行数: クエリでスキャンされた行数の平均。
引用元:Query Insights を使用してクエリのパフォーマンスを向上させる データベース負荷のフィルタリング
この統計情報をもとに、スロークエリや効率の悪いクエリが一目で分かるので、便利です。
また、特定のクエリの統計情報を細かく見ることも可能です。
正直この機能は使いこなし切れてませんが、今後の自分に期待です。
Query Insightsをどのように活用したか
Eplainにクエリの実行計画を見て、クエリが非効率であることが分かりましたが、そもそもクエリがどのくらい時間がかかっているのか分からず、ボトルネックが分からない状況でした。そこで、Query Insightsを確認しました。
(実際のクエリ自体は、非公開にさせていただいてます🙏)
画像の赤枠を見ると、12秒かかっており、とんでもないスロークエリであることが分かり、スロークエリであることの裏付けが取れました👏
まとめ
今回触れたQuery Insightsの活用方法はGoogle Cloud公式HPに詳しく紹介されています。
まだまだ、活用しきれていない機能があるので、今後もっと活用していきたいと思います🙏
引用
Discussion