[Sentry] データベースの負荷を確認する方法
この記事では、Sentry で N+1 Query と Slow Query を確認する方法を説明します。
前提
Trace が Sentry に送信済みであること。まだ送信していない場合は、ドキュメントを参考に設定してみてください。具体的な設定方法は[sentry trace <利用環境>]などでググれば出てきます。Rails ならこのページ。
余談ですが、Sentry では traces, transactions, spans という用語を以下のように分けて使っています。(参考)
OpenTelemetry の用語と一部異なるので注意が必要です。(参考)
また、今回は検証用に Rails アプリケーションに Sentry を導入しているので、一部記述は Rails に特化したものになっています。が、基本どのアプリケーションにでも通じる話かと思います。
N+1 Query
Trace を送信していれば N+1 Queryは自動で検出され、サイドバーの Issues
から確認できます。
N+1 が記録された issue を見ると以下サンプルのような類似したクエリが複数回(N回)発行されている transaction を確認することができます。
Rails の場合でしたら、issue のタイトルが N+1 Query <コントローラ名>#<アクション名>
のようになっているはずなので、このアクションが発行していてN+1と検出されている当該クエリを修正しましょう。
なお、検出基準はサイドバーの Settings
> Projects
> <プロジェクト名>
-> Performance
> N+1 Query
から変更できます(深い)。
詳細はドキュメントをご覧ください。
Slow Query
こちらはサイドバーの Performance
から確認できます。サンプルを以下に示します。(参考)
この個別の transaction name を押すと以下のような Transaction Summary
が開きます。
ここからさらに個別の EVENT ID
を開けば上記 N+1 のところで確認したような trace の詳細が確認できます。
N+1 同様 Slow Query でも検出基準は設定できます。サイドバーの Settings
> Projects
> <プロジェクト名>
-> Performance
-> Slow DB Query
を確認ください(深い2)。
おまけ
Sentry は「セントリー」ではなく、「センチュリー」です(参考)。意味は a soldier who guards a place, usually by standing at its entrance(Reference).
Discussion