🙆‍♀️

[Sentry] データベースの負荷を確認する方法

2024/07/30に公開

この記事では、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