gpt4 book ai didi

sql-server - 此后,在SQL Server分析 session 中,将已编译的准备好的语句与exec进行协调

转载 作者:行者123 更新时间:2023-12-02 14:34:37 25 4
gpt4 key购买 nike

我们正在使用SQL Server和GORM(Grails /休眠)。

最近,我们的DBA询问我是否可以在数据库中的某个关键路径表上使用存储过程代替普通的Hibernate预备语句。他不关心性能或诸如此类的事情,而是解释说,他很难描述Hibernate准备好的语句,因为,松散地引用:“在 session 中的某处,您会得到一个带有SQL文本的准备好的语句...此后您只需要得到准备好的语句的执行者即可。在生产系统中协调两者几乎是不可能的。”

当然,我希望在我们的应用程序中使用具有正常插入/更新/删除行为的域类,而不是手动构建/执行准备好的语句。所以我想到了两个问题:

  • 是否可以以某种方式或没有某种技术配置SQL Server Profiler,以使其更易于分析Hibernate准备好的语句?如果没有...
  • 是否可以像往常一样在Hibernate / Grails应用程序中进行一些非侵入式自定义,以使用域类,但是会更改后端代码生成(我不知道,也许使用Hibernate Intercepts ...也许我可以指定一个SP而不是准备的语句用于特定的插入/更新/删除操作...或者也许我可以指出,准备的语句应具有固定的“名称”,这可能有助于使其在性能分析 session 中可被DBA识别。 )。

  • 更新

    从SQL Server Profiler session 中获取的示例:
    --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

    最佳答案

    如果是 sp_prepare ,则有一个article on SQL Server Central表示您可以在Hibernate配置中将其关闭,例如:

    <property name='prepare_sql'>false</property>

    似乎Hibernate将在关闭此设置的情况下发送参数化查询。这将允许SQL Server完全像准备好的查询一样缓存计划。

    但是,有些文章建议在没有 prepare_sql的情况下,Hibernate将改变 parameter size for strings。这将使SQL Server的计划缓存无用。您可能需要进一步调查。

    关于sql-server - 此后,在SQL Server分析 session 中,将已编译的准备好的语句与exec进行协调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16967521/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com