Es gibt viele Trace Flags da draußen. Einige sind gut dokumentiert, andere nicht, und andere haben ihren Weg zum Standardverhaltensstatus in der Version 2016 gefunden. Welche Möglichkeiten gibt es, um neue Ablaufverfolgungsflags zu finden, abgesehen von offiziellen Supportkanälen, Microsoft-Mitarbeitern usw.?
Ich habe hier und hier ein paar kürzlich veröffentlichte Beiträge von Aaron Bertrand gelesen , aber nichts über neue Trace Flags entdeckt.
Ich habe die Daten- und Protokolldatei von mssqlsystemresource an einen neuen Speicherort kopiert und wie eine reguläre Datenbank angehängt, um Systemtabellen und -ansichten zu durchsuchen, aber nichts sofort erkannt. Ich überlegte, eine Liste bekannter Ablaufverfolgungsflags zu erstellen und die Nummern zu durchlaufen, die nicht in dieser Liste enthalten sind, um zu sehen, welche DBCC TRACEON zulässt, wollte aber zuerst die Frage stellen.
Angenommen, der DBCC-Befehl zum Aktivieren muss bei einer Ressource einchecken, um sicherzustellen, dass das Ablaufverfolgungsflag gültig ist. An wen wendet er sich? Gibt es eine DLL oder eine andere Systemdatei, die eine Liste enthält?
Ich weiß, dass die Frage ein breites Netz wirft, aber was dies anspornte, war das Lesen einer Ablaufverfolgungsflagge mit einem bestimmten beabsichtigten Verhalten neben einer neuen Funktion im Jahr 2016, die nicht den beschriebenen Effekt hatte. Mein erster Gedanke war, dass die Zahlen vielleicht irgendwie transponiert wurden, wie 7129 zu 7219. Ich hatte gehofft, eine Liste gültiger Ablaufverfolgungsflags innerhalb eines Bereichs zu erhalten, beispielsweise 7000-7999, um nach Permutationen zu suchen. Das Testen von allen, sowohl als DBCC-TRACEON-Flags als auch als Startparameter, wäre ein ziemliches Ärgernis, wenn die Ergebnisse mit dem Feature-Verhalten verglichen würden.
quelle
Zum größten Teil kommt es darauf an, die Zeit und die emotionalen Ressourcen zu haben, um danach zu suchen.
Natürlich ist es möglich, ein Skript zu schreiben, um mögliche Trace-Flag-Nummern zu durchlaufen und die Auswirkungen zu analysieren, aber dies ist nicht immer fruchtbar. Es gibt viele Gründe dafür, aber häufig sind Frustrationen die Folge, dass einige Ablaufverfolgungsflags nur in Kombination mit anderen wirksam sind, manche nur
-T
beim Start oder bei Verwendung mitDBCC TRACEON
, manche nur mitOPTION (QUERYTRACEON)
. Einige erfordern undokumentierte Befehle oder Befehlserweiterungen oder die Aktivierung einer bestimmten Funktion. Einige erzeugen nur dann Effekte, wenn Sie wissen, wo Sie nach diesen Effekten suchen müssen. Und so weiter und ... sehr ... so weiter.Das heißt, die vielleicht effektivste Technik besteht darin, die Ausführung einer bestimmten Abfrage oder eines bestimmten Befehls Schritt für Schritt mit einem angehängten Debugger oder einem anderen Profilerstellungs-Tool durchzuführen und die Pfade zu vergleichen, die mit dem (den) eingeschalteten und ausgeschalteten Trace-Flag (s) genommen wurden. Wenn das zeitaufwändig klingt, dann ist es so.
Für mich muss etwas potenziell sehr interessant sein oder sich auf ein reales Problem beziehen, ohne dass ich eine bessere Lösung finden kann, um überhaupt darüber nachzudenken, wie ich es angehen soll. Es ist auch hilfreich, wenn Sie diesen Prozess bereits hunderte oder tausende Male durchlaufen haben, um ein umfassendes Gefühl dafür zu bekommen, welche Art von Ablaufverfolgungsflags am wahrscheinlichsten wirksam sind und welcher Teil der Codebasis wird interessant sein.
Festlegen eines Haltepunkts
CSessionTraceFlags::CheckSessionTraceInternal
und Überprüfen des Werts vonedx
Registers (um zu sehen, welches Ablaufverfolgungsflag geprüft wird) kann in einfachen Fällen nützlich sein, aber die interessanten Fälle sind oft nicht einfach - und nicht alle Ablaufverfolgungsflags werden an dem Punkt geprüft, an dem sie geprüft werden den eingeschlagenen Codepfad beeinflussen.Es gibt eine relativ kleine Liste offizieller Trace-Flags . Dies sind die Flags, die vollständig getestet wurden und von CSS und letztendlich den Produktentwicklern unterstützt werden. Sie sind auch Flags mit einem Anwendungsfall, der es wert ist, dokumentiert zu werden.
Jedes andere Trace-Flag, das Sie finden, ist eine Kuriosität, die in verschiedenen Situationen unerwartete Auswirkungen haben kann (verschiedene Builds, SKUs, Sicherheitseinstellungen, verschiedene Funktionen ... alles, was Ihnen sonst noch einfällt oder nicht einfällt). Diese werden, wenn überhaupt, nur von der Person "unterstützt", die darüber geschrieben hat.
Es gibt mehrere inoffizielle Listen. Die beste, die ich kenne, ist eine aktuelle Sammlung von SQL Server-Flags von Aaron Morelli (derzeit Version 6, April 2016).
Alles in allem hat Microsoft CSS (letztendlich) Zugriff auf alle Ablaufverfolgungsflags, sodass sie Sie möglicherweise über alle Probleme informieren können, auch wenn sie nicht auf der offiziellen Liste stehen. Natürlich können sie sich dafür entscheiden, nichts zu sagen, und es kann eine Gebühr anfallen. Ich weiß es wirklich nicht, ich bin diesen Weg nie selbst gegangen.
quelle
Wir führen eine Sammlung von Trace-Flags auf Github (jetzt 599 Trace-Flags):
Microsoft SQL Server-Ablaufverfolgungsflags
Auch eine sehr gute Technik, die Brent Ozar in seinem großartigen Artikel Bad Idea Jeans: Auffinden von undokumentierten Spurenflaggen und Joe Obbish in diesem großartigen Artikel A Method to Find Trace Flags (Eine Methode zum Auffinden von Spurenflaggen) beschrieben hat
quelle