我一直在咨询谷歌已有一段时间了,但它一直无法给我一个满意的答案......
在SQL Server 2005跟踪中,我有很多“exec sp_execute”语句。我知道它们连接到相应的“exec sp_prepare”语句,该语句指定了实际的SQL。
但是...
一个:是否有可能在没有找到sp_prepare的情况下找到sp_execute背后的SQL?
二:什么类型的构造通常会隐藏在sp_execute后面?也就是说,它是一个存储过程吗?它只是代码中的字符串吗?或者是什么?
三:我是否应该担心在追踪中看到这些不良表现?
赞赏任何输入
答案 0 :(得分:3)
这些是API服务器游标,很可能是旧的(或者不是那么老但很糟糕的)应用程序使用的。
99%的时间,游标会影响服务器的性能。磁盘和网络I / O是潜在的受害者。
阅读this,它帮助我了解服务器端游标的工作原理。
答案 1 :(得分:3)
使用
select * from sys.dm_exec_query_plan(PlanHandle)
生成一个xml文档,指示sql sp_execute正在使用的内容。
答案 2 :(得分:3)
迟到的答案,但我最近有一个执行sp_prepare和sp_execute的性能不佳的应用程序。
一个:之前已回答
两个:它可以是任何东西,存储过程,基本上任何有效的SQL查询。
三:当应用程序使用sp_prepare时,我遇到SQL Server无法生成良好执行计划的问题。基本上,SQL Server分析传入参数以生成良好的执行计划,但是使用sp_prepare时,不会提供参数值,因为它们仅在执行sp_execute时添加。因此,与此同时,SQL Server为不同的运营商应用通用成本,并且可能很好地生成次优计划。
如果您查看跟踪的读取/ cpu使用情况,您应该能够确定您的查询是否表现不佳或符合预期。