Existem muitas bandeiras de rastreamento por aí. Alguns estão bem documentados, outros não, e outros encontraram o caminho para o status de comportamento padrão na versão de 2016. Além dos canais oficiais de suporte, funcionários da Microsoft etc., quais são as maneiras de encontrar novos sinalizadores de rastreamento?
Eu li algumas postagens recentes de Aaron Bertrand aqui e aqui , mas não vi nada sobre as novas bandeiras de rastreamento.
Copiei os dados e o arquivo de log do mssqlsystemresource para um novo local e o anexei como um banco de dados comum para vasculhar as tabelas e visualizações do sistema, mas não localizei nada imediatamente. Eu considerei pegar uma lista de sinalizadores de rastreamento conhecidos e percorrer números que não estão nessa lista, para ver quais DBCC TRACEON permitiriam, mas queria fazer a pergunta aqui primeiro.
Supondo que o comando DBCC para habilitá-los precise fazer check-in com algum recurso para garantir que o Sinalizador de Rastreio seja válido, aonde ele chega? Existe um arquivo .dll ou outro sistema que contém uma lista?
Eu sei que a pergunta lança uma ampla rede, mas o que estimulou isso foi a leitura de um sinalizador de rastreamento com comportamento específico pretendido, juntamente com um novo recurso em 2016 que não estava tendo o efeito descrito. Meu pensamento inicial foi que talvez os números tenham sido transpostos de alguma forma, como 7129 se tornando 7219. Eu esperava obter uma lista de sinalizadores de rastreamento válidos dentro de um intervalo, digamos 7000-7999, para procurar permutações. Testar todos eles, como sinalizadores DBCC TRACEON e parâmetros de inicialização, seria um incômodo, combinado com o teste dos resultados em relação ao comportamento do recurso.
fonte
Na maioria das vezes, tudo se resume a dispor de tempo e recursos emocionais para procurá-los.
Certamente, é possível escrever um script para percorrer possíveis números de sinalizadores de rastreamento e analisar os efeitos, mas isso nem sempre é proveitoso. Há muitas razões para isso, mas frustrações comuns incluem o fato de que alguns sinalizadores de rastreamento são eficazes apenas em combinação com outros, alguns funcionam apenas
-T
na inicialização ou, quando usados comDBCC TRACEON
, outros apenas comOPTION (QUERYTRACEON)
. Alguns exigem comandos não documentados, ou extensões de comando, ou para que um recurso específico seja ativado também. Alguns só produzem efeitos se você souber onde procurar esses efeitos. E assim por diante e ... muito ... e assim por diante.Dito isto, talvez a técnica mais eficaz seja a execução de uma consulta ou comando específico passo a passo com um depurador ou outra ferramenta de criação de perfil anexada, comparando os caminhos seguidos com os sinalizadores de rastreamento ativados e desativados. Se isso parece demorado, é porque é.
Para mim, algo tem que ser potencialmente muito interessante ou estar relacionado a um problema do mundo real sem uma solução melhor para eu sequer pensar em entrar nele. Também é útil se você já passou por esse processo centenas ou milhares de vezes antes, para ter uma idéia geral do tipo de coisa que está procurando, qual faixa de sinalizadores de rastreio é mais provável que seja eficaz e qual parte da base de código vai ser interessante.
Definir um ponto de interrupção
CSessionTraceFlags::CheckSessionTraceInternal
e verificar o valor doedx
registro (para ver qual sinalizador de rastreio está sendo verificado) pode ser útil em casos simples, mas os casos interessantes geralmente não são simples - e nem todos os sinalizadores de rastreio são verificados no ponto em que eles afetam o caminho do código usado.Há uma lista bastante pequena de sinalizadores de rastreamento oficiais . Esses são os sinalizadores que foram totalmente testados e são (e serão) suportados pelo CSS e, finalmente, pelos desenvolvedores do produto. Eles também são sinalizadores com um caso de uso comum o suficiente para valer a pena documentar.
Qualquer outro sinalizador de rastreamento encontrado é uma curiosidade que pode ter efeitos inesperados em várias situações (diferentes compilações, SKUs, configurações de segurança, diferentes recursos ... qualquer outra coisa que você possa ou não possa imaginar). Estes serão apenas 'suportados' pela pessoa que escreveu sobre eles, se houver.
Existem várias listas não oficiais, a melhor que eu conheço é Uma coleção tópica de sinalizadores do SQL Server por Aaron Morelli (atualmente na v6, em abril de 2016).
Tudo isso dito, o Microsoft CSS (em última instância) tem acesso a todos os sinalizadores de rastreamento, para que eles possam aconselhá-lo sobre qualquer um que você encontrar, mesmo que não esteja na lista oficial. Eles podem optar por não dizer nada, é claro, e pode haver uma taxa envolvida; Realmente não sei, nunca tendo seguido esse caminho.
fonte
Mantemos uma coleção de sinalizadores de rastreamento no github (agora 599 sinalizadores de rastreamento):
Sinalizadores de rastreamento do Microsoft SQL Server
Além disso, uma técnica muito boa descrita por Brent Ozar em seu ótimo artigo Bad Idea Jeans: Encontrando Bandeiras Indocumentadas e Joe Obbish neste artigo incrível Um método para encontrar bandeiras de rastreamento
fonte