Il y a beaucoup de drapeaux de trace là-bas. Certaines sont bien documentées, d'autres pas, et d'autres ont retrouvé leur statut de comportement par défaut dans la version 2016. Outre les canaux de support officiels, les employés de Microsoft, etc., quels sont les moyens de trouver de nouveaux indicateurs de trace?
J'ai lu quelques articles récents d'Aaron Bertrand ici et ici , mais je n'ai rien trouvé à propos des nouveaux drapeaux Trace.
J'ai copié les données et le fichier journal de mssqlsystemresource vers un nouvel emplacement et les ai attachés comme une base de données classique pour parcourir les tables système et les vues, mais je n'ai rien repéré immédiatement. J'ai envisagé de prendre une liste de drapeaux de trace connus et de parcourir des nombres ne figurant pas sur cette liste pour voir ceux que DBCC TRACEON autoriserait, mais je voulais d'abord poser la question ici.
En supposant que la commande DBCC pour les activer doit vérifier avec une ressource pour s'assurer que l'indicateur de trace est valide, où va-t-il atteindre? Existe-t-il un fichier .dll ou un autre fichier système contenant une liste?
Je sais que la question couvre un large éventail de problèmes, mais ce qui l’a incité à lire concernait la lecture d’un indicateur de suivi avec le comportement voulu ainsi qu’un nouvel élément en 2016 qui n’avait pas l’effet décrit. Ma pensée initiale était que peut-être les chiffres ont-ils été transposés, comme 7129, devenant 7219. J'espérais obtenir une liste d'indicateurs de trace valides dans une plage, par exemple 7000-7999, afin de rechercher des permutations. Les tester tous, à la fois en tant qu'indicateurs DBCC TRACEON et en tant que paramètres de démarrage constituerait une gêne importante, combinée à la vérification des résultats par rapport au comportement de la fonction.
la source
Pour l'essentiel, il s'agit de disposer du temps et des ressources émotionnelles nécessaires pour les rechercher.
Certes, il est possible d'écrire un script pour parcourir les numéros d'indicateurs de trace possibles et analyser les effets, mais cela n'est pas toujours fructueux. Il y a de nombreuses raisons à cela, mais les frustrations courantes incluent le fait que certains indicateurs de trace ne sont efficaces qu'en combinaison, d'autres ne fonctionnent qu'avec
-T
démarrage, ou lorsqu’ils sont utilisésDBCC TRACEON
, d’autres uniquementOPTION (QUERYTRACEON)
. Certaines nécessitent des commandes non documentées ou des extensions de commande, ou encore l'activation d'une fonctionnalité particulière. Certains produisent des effets uniquement si vous savez où chercher ces effets. Et ainsi de suite et… beaucoup … etc.Cela dit, peut-être que la technique la plus efficace consiste à exécuter étape par étape l'exécution d'une requête ou d'une commande particulière avec un débogueur ou un autre outil de profilage associé, en comparant les chemins empruntés avec le ou les indicateurs de trace. Si cela semble prendre du temps, c'est parce que c'est le cas.
Pour moi, quelque chose doit être potentiellement très intéressant, ou avoir un rapport avec un problème du monde réel sans une meilleure solution pour moi, même penser à le résoudre. Il est également utile, si vous avez déjà suivi ce processus des centaines ou des milliers de fois auparavant, de vous faire une idée générale du type de chose que vous recherchez, de la gamme d'indicateurs de suivi la plus susceptible d'être efficace et de la partie la plus efficace. de la base de code va être intéressant.
Définir un point d'arrêt sur
CSessionTraceFlags::CheckSessionTraceInternal
et vérifier la valeur duedx
registre (pour voir quel indicateur de trace est vérifié) peut être utile dans des cas simples, mais les cas intéressants ne sont pas souvent simples - et tous les indicateurs de trace ne sont pas vérifiés au point où ils le sont. affecter le chemin de code pris.Il y a une assez petite liste de drapeaux de trace officiels . Ce sont les drapeaux qui ont été entièrement testés et qui sont (et seront) supportés par CSS et, finalement, les développeurs de produits. Ce sont aussi des drapeaux avec un cas d’utilisation assez commun pour mériter d’être documentés.
Tout autre indicateur de trace trouvé est une curiosité qui peut avoir des effets inattendus dans différentes situations (versions différentes, unités de stockage, paramètres de sécurité, différentes fonctionnalités, tout ce que vous pouvez ou ne pouvez pas imaginer). Celles-ci ne seront «prises en charge» que par la personne qui les a écrites, voire pas du tout.
Il existe plusieurs listes non officielles, la meilleure que je connaisse est Une collection thématique de drapeaux SQL Server par Aaron Morelli (actuellement en version 6, avril 2016).
Cela dit, Microsoft CSS a (en fin de compte) accès à tous les indicateurs de trace. Il peut donc vous conseiller sur tous les incidents que vous rencontrez, même s'ils ne figurent pas sur la liste officielle. Ils peuvent choisir de ne rien dire, bien sûr, et des frais peuvent être exigés. Je ne sais vraiment pas, n'ayant jamais emprunté cette voie moi-même.
la source
Nous maintenons une collection d'indicateurs de trace sur github (maintenant 599 indicateurs de trace):
Drapeaux de trace Microsoft SQL Server
En outre, très bonne technique décrite par Brent Ozar dans son excellent article Bad Idea Jeans: Trouver des drapeaux à traces non documentés et Joe Obbish dans cet article génial Une méthode pour trouver des drapeaux à traces
la source