2016-07-11 128 views
1

我们有一个使用SQL Server 2014作为数据存储的C#web服务。我们使用LINQ的大部分地方,但也有一些原始的SQL。SET SHOWPLAN_ALL它来自哪里?

最近我们开始在数据库端记录我们的SQL语句,我们注意到许多与实际查询属于同一批次的“SET SHOWPLAN_ALL”。这会产生很多SQL错误,因为我们的数据库用户没有权限执行“SET SHOWPLAN_ALL”。

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

感谢。

+0

能否请您出示您的数据库语句日志? – TheGameiswar

回答

0
SET SHOWPLAN_ALL 

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

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

1

答案是,这是New Relic APM代理在查询时间超过500毫秒时所执行的操作。