2016-07-11 15 views
1

Wir haben einen C# -Webdienst, der einen SQL Server 2014 als Datenspeicher verwendet. Wir verwenden LINQ die meisten Orte, aber auch ein wenig rohen SQL.SET SHOWPLAN_ALL Woher kommt es?

Kürzlich haben wir begonnen, unsere SQL-Anweisungen auf der DB-Seite zu protokollieren, und wir haben eine Menge von "SET SHOWPLAN_ALL" bemerkt, die Teil desselben Stapels sind wie die eigentlichen Abfragen. Dies erzeugt viele SQL-Fehler, da unser DB-Benutzer nicht die Rechte hat, ein "SET SHOWPLAN_ALL" zu machen.

Weiß jemand, warum wir "SET SHOWPLAN_ALL" als Teil unserer SQL-Chargen hätten? Ist es etwas, das LINQ generiert? Könnte es etwas sein, dass unser New Relic APM Agent injiziert, um SQL-Abfragen zu überwachen?

Danke.

+0

Könnten Sie bitte Ihre DB-Kontoauszüge protokollieren? – TheGameiswar

Antwort

0
SET SHOWPLAN_ALL 

Es bewirkt, dass SQL Server das T-SQL nicht ausführt, stattdessen gibt es Details zur Ausführung der Anweisung zurück. Sie finden weitere Details here einschließlich Beispiele, wie es genannt werden kann.

Möglicherweise wurde dies im Batch gelassen, da es für die Leistung optimiert wurde. Nach meinem Wissen muss der Batch analysiert und die Anweisung aus dem Batch entfernt werden.

1

Die Antwort war, dass dies der New Relic APM-Agent tut, wenn eine Abfrage länger als 500 ms dauert.