SQL Server と GORM (Grails / Hibernate) を使用しています。
最近、DBA から、データベース内の特定のクリティカル パス テーブルで、通常の Hibernate プリペアド ステートメントの代わりにストアド プロシージャを使用できるかどうか尋ねられました。彼はパフォーマンスなどについては気にしていませんが、Hibernate の準備済みステートメントをプロファイリングするのは非常に難しいと説明しました。準備されたステートメントの exec を取得するだけです。本番システムでこの 2 つを調整することはほぼ不可能です。」
もちろん、準備されたステートメントを手動で構築/実行するよりも、アプリケーションで通常の挿入/更新/削除の動作でドメインクラスを使用することをお勧めします。そこで、次の 2 つの質問が頭に浮かびます。
- Hibernate の準備済みステートメントのプロファイリングを容易にするために、SQL Server プロファイラーを何らかの方法で構成できますか、または何らかの手法がありますか? そうでなければ...
- Hibernate / Grails アプリで通常どおりにドメイン クラスを使用できるが、バックエンドのコード生成を変更できる非侵入型のカスタマイズはありますか (わからない、おそらく Hibernate Intercepts を使用して...おそらく特定の挿入/更新/削除操作の準備済みステートメントの代わりに使用するSP...または、プロファイリングセッションでDBAが識別できるようにするために、準備済みステートメントに固定の「名前」を付ける必要があることを示すことができます... )。
アップデート
SQL Server プロファイラー セッションから取得した例:
--sp_prepare on first execute
declare @p1 int
set @p1=8
exec sp_prepare @p1 output,N'@P0 int',N'select <columns> from <table> where <primary key> = @P0 ',1
select @p1
go
--sp_execute thereafter
exec sp_execute 8,1
go