Rea*_*ces 5 performance sql-server heap
我正在查看由第三方应用程序执行的查询。该应用程序被我们的一些最终用户标记为缓慢。
它似乎INSERT记录到一个 HEAP 中,然后DELETE在会话结束后再次记录它们(没有任何选择发生?)但是在每个INSERT语句的末尾都有一个SELECT 0.
我是否从查询计划缓存中看到了某种工件?是否可能缺少某些参数?所有其他参数都清楚地标明,例如@P1。
INSERT每分钟有 350 个动作,每小时有一个DELETE表中的所有内容。使用 HEAP 似乎是一个不错的例子,但是如果这个 SELECT 0 实际上是从这个堆中选择一些东西,我想知道我是否应该添加一个聚集索引。
更新:添加了一个屏幕截图来显示选择:

小智 1
据我所知,执行计划只会包含最后编译和使用的代码。在我自己对应用程序进行故障排除时,我发现我通过执行计划查看的语句实际上是sp_executesql用动态 T-SQL 编写的,它包含的逻辑比最终结果多一点。
您没有指定您正在使用的版本,但我建议使用服务器端跟踪或扩展事件会话来映射正在传递的命令序列,以便您完全了解在您的情况下正在执行的操作。
我的第一个想法是应用程序(或开发人员)编写了插入语句,并以某种形式或方式对某些内容(即可能是错误)进行检查。在检查是否良好的过程中,他们只是简单地传递最终的结果SELECT 0,如果发生问题,它可能会返回SELECT 3910,这对该应用程序来说意味着一些事情。您只能通过对命令进行跟踪来看到所有背后的完整逻辑(如果有)。