はじめに
プリザンターには、開発時にデータベースに発行されるSQLクエリをログ出力するSQLデバッガー機能が搭載されています。
この機能を使えば、どんなSQLが実行されているのか簡単に確認できるので、パフォーマンスのチューニングやトラブルシューティングに役立てることができます。今回は、SQLデバッガーの使い方を紹介します。
SQLデバッガーは開発環境での使用が想定されているため、バイナリがDebugビルドされていることを条件に動作します。リリースされているバイナリはReleaseビルドのため使用することは出来ません。
本番環境などで監視目的で仕込む場合は、Debugビルドのバイナリを自分で用意する必要があります。
どんな機能なの?
プリザンターをDebugビルドで実行すると、すべてのSQLクエリが以下のファイルに自動で出力されます:
ログファイルは最大で1から3の3つ生成されます。ファイルはそれぞれ1MBが上限で、ローテーションしながら書き込まれる仕組みになっています。
使い方
1. Debugビルドで実行する
SQLデバッガー機能はコンパイル時にDEBUGシンボルが定義されている場合のみ有効です。Visual Studioなら、構成をDebugにして実行するだけです。
2. 出力されるログを確認する
アプリケーションを操作すると、自動的にApp_Data/Logs/フォルダにSQLログが出力されます。
出力されるログの例を見てみましょう。
-- [2026-01-27 10:30:45.123 +09:00] -----------------------------------------------------------------------------
use [Implem.Pleasanter];
declare @T int; set @T = 1;
declare @D int; set @D = 1;
declare @U int; set @U = 1;
select
"Items"."ReferenceId",
"Items"."SiteId",
...
from "Items"
where "Items"."ReferenceId" = @ip1
;
3. SQLの内容を分析する
出力されたSQLはそのままSQL Server Management Studio (SSMS)などで実行できます。これで以下のような分析ができるようになります。
- 意図したSQLが発行されているかの確認
- クエリのパフォーマンス分析(実行プランの確認)
- 不具合の原因調査
データベース別の出力形式
SQLの出力形式はデータベースエンジンによって異なります。
| データベース | USE文 | パラメータ |
|---|---|---|
| SQL Server | 出力される | 変数宣言+SET |
| PostgreSQL | 出力されない | インライン置換 |
| MySQL | 出力されない | インライン置換 |
PostgreSQLとMySQLではパラメータがそのまま値に置き換えられるので、コピペですぐに実行することが出来る半面、どこがパラメータか特定しにくいため、開発環境などのSQL文のデバックには少し不便ではあります。
注意点
一部のSQLは出力されない
`SysLogs{テーブルへの書き込みなど、一部の内部処理ではログに出力されません。ログ自体の書き込みが無限ループしないようにするための仕様です。
まとめ
今回はプリザンターに組み込まれているSQLデバッガーを使用する方法を紹介しました。開発時のデバッグやパフォーマンスチューニングにぜひ活用してみてください!!