【发布时间】:2013-06-02 18:46:05
【问题描述】:
我们正在使用 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
【问题讨论】:
-
您能从 SQL Profiler 发布相关的 SQL sn-ps 吗?他们使用
sp_prepare/sp_execute家族吗? -
看起来像
sp_prepare/sp_execute家人。用 sn-ps 更新。
标签: sql-server hibernate grails profiling grails-orm