Microsoft schlägt vor , OPTION (QUERYTRACEON 9481)
Abfragen zu verwenden, deren Leistung für SQL Server 2014-Datenbanken, die unter Kompatibilitätsstufe 120 ausgeführt werden, "beeinträchtigt" wurde.
In meiner Situation bedeutet "degradiert", von einigen Sekunden auf einige Minuten oder mehr zu wechseln. In Bezug auf die Leistung funktioniert 9481 sehr gut. Normale Benutzer erhalten jedoch einen netten Fehler anstelle von Abfrageergebnissen (Ausführen von SSRS-Berichten):
User 'xxxxx' does not have permission to run DBCC TRACEON.
Aus der Dokumentation geht hervor, dass Benutzer Mitglieder der Sysadmin-Rolle sein müssen, um ausgeführt zu werden DBCC TRACEON
.
Gibt es Problemumgehungen, mit denen Nicht-Systemadministratoren Abfragen ausführen können, die diesen Hinweis verwenden?
Ich möchte die Kompatibilitätsstufe lieber nicht auf 110 senken, da die meisten unserer Abfragen akzeptabel sind oder besser funktionieren.
SELECT * FROM <yourTableName> option (querytraceon 9481)
Bitte verwenden Sie die Hinweisoption, da keine Erlaubnis erforderlich ist.
OPTION (USE TIPP ('FORCE_LEGACY_CARDINALITY_ESTIMATION'))
quelle
Anstatt OPTION (QUERYTRACEON 9481) zu verwenden, wird hier eine Lösung / Problemumgehung vorgeschlagen.
Es ermöglicht einem Nicht-Sa-Benutzer, den Kardinalitätsschätzer für die bestimmte Anweisung, Abfrage oder Prozeduraufruf (für die aktuelle Sitzung) zu ändern.
Lösung:
Wunderbar erklärt von Kimberly Tripp in ihrem Beitrag auf sqlskills.com:
"Festlegen von CE-TraceFlags auf Abfrage-für-Abfrage- (oder Sitzungs-) Basis"
Erstellen Sie eine gespeicherte Prozedur in der msdb-Datenbank, mit der ein gewünschtes Trace-Flag ohne Sysadmin-Berechtigungen festgelegt werden kann.
(Natürlich kümmert sich sysadmin darum, eine Liste der zulässigen Trace-Flag-Werte einzurichten.)
Schließen Sie alle problematischen Anweisungen (dynamisches SQL, Ad-hoc-Abfrage oder Prozeduraufruf) mit einem Aufruf dieser gespeicherten Prozedur ab und ändern Sie das Sitzungsablaufverfolgungsflag für die Ausführung.
Auf diese Weise können Benutzer mit niedrigeren Berechtigungen den Kardinalitätsschätzer für die Ausführung der problematischen Anweisung ändern.
Anwendungsbeispiel:
Code für gespeicherte Prozeduren:
Hinweis: Diese gespeicherte Prozedur wird in msdb und nicht auf dem Master erstellt, da für msdb die "vertrauenswürdige" Voraussetzung erforderlich ist.
quelle