SET SHOWPLAN_ALL它来自哪里?

时间:2016-07-11 08:12:51

标签: c# sql-server linq

我们有一个C#webservice,它使用SQL Server 2014作为数据存储。我们使用LINQ大多数地方,但也使用一些原始SQL。

最近我们开始在数据库端记录我们的SQL语句,我们注意到很多" SET SHOWPLAN_ALL"这是与实际查询相同批次的一部分。这会产生很多SQL错误,因为我们的数据库用户无权执行" SET SHOWPLAN_ALL"。

有谁知道为什么我们会有" SET SHOWPLAN_ALL"作为我们的SQL批次的一部分?它是LINQ生成的东西吗?可能是我们的New Relic APM代理注入监视SQL查询的东西吗?

感谢。

2 个答案:

答案 0 :(得分:1)

答案是,当查询耗时超过500毫秒时,New Relic APM代理就会这样做。

答案 1 :(得分:0)

www/

它使SQL Server不执行T-SQL,而是返回有关语句执行的详细信息。您可以找到更多详细信息here,包括如何调用它的示例。

很可能这已经在批处理中遗留下来,因为它已针对性能进行了优化。如果关闭"切换"据我所知,需要分析批次并从批次中删除该语句。