我们正在使用 SQL Server 和 GORM (Grails / Hibernate)。
最近我们的 DBA 询问我是否可以在数据库中的某个关键路径表上使用存储过程而不是普通的 Hibernate 准备语句。他并不关心性能或类似的事情,而是解释说,他很难分析 Hibernate 准备好的语句,因为粗略地引用,“在会话中的某个地方,你会得到一个包含 SQL 文本的准备好的语句......然后您只需获得准备好的语句的执行者。在生产系统中协调两者几乎是不可能的”。
当然,我更愿意在我们的应用程序中使用具有正常插入/更新/删除行为的域类,而不是手动构建/执行准备好的语句。于是我想到了两个问题:
- SQL Server Profiler 是否可以通过某种方式进行配置,或者是否有一些技术可以更轻松地分析 Hibernate 准备好的语句?如果不...
- 是否可以在我的 Hibernate / Grails 应用程序中进行一些非侵入式自定义,以像往常一样使用域类,但会更改后端代码生成(我不知道,也许使用 Hibernate 拦截......也许我可以指定一个SP 使用而不是准备好的语句进行特定的插入/更新/删除操作......或者我可以指出准备好的语句应该有一个固定的“名称”,这可能有助于在分析会话中让 DBA 识别它...... )。
更新
从 SQL Server Profiler 会话中获取的示例:
--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