2016-07-11 159 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毫秒時所執行的操作。