AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 141092
Accepted
Erik Darling
Erik Darling
Asked: 2016-06-14 05:22:33 +0800 CST2016-06-14 05:22:33 +0800 CST 2016-06-14 05:22:33 +0800 CST

Métodos para localizar novos sinalizadores de rastreamento no SQL Server

  • 772

Existem muitos sinalizadores de rastreamento por aí. Alguns estão bem documentados, outros não, e outros chegaram ao status de comportamento padrão na versão 2016. Além dos canais de suporte oficiais, 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 os novos sinalizadores de rastreamento.

Copiei os dados e o arquivo de log do mssqlsystemresource para um novo local e anexei-o como um banco de dados regular para vasculhar as tabelas e exibições do sistema, mas não localizei nada imediatamente. Considerei pegar uma lista de sinalizadores de rastreamento conhecidos e percorrer os números que não estão nessa lista para ver quais DBCC TRACEON permitiria, mas queria fazer a pergunta aqui primeiro.

Supondo que o comando DBCC para habilitá-los tenha que fazer check-in com algum recurso para garantir que o sinalizador de rastreamento seja válido, para onde ele chega? Existe um .dll ou algum outro arquivo de sistema que contenha uma lista?

Eu sei que a pergunta lança uma rede ampla, mas o que estimulou isso foi ler sobre um sinalizador de rastreamento com comportamento pretendido específico ao lado de 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.

sql-server trace-flags
  • 3 3 respostas
  • 1784 Views

3 respostas

  • Voted
  1. Best Answer
    Paul S. Randal
    2016-06-14T07:14:24+08:002016-06-14T07:14:24+08:00

    Não há nada que você possa fazer para encontrar a lista, exceto perguntar ou buscá-la em postagens/apresentações de slides/etc. A lista existe apenas no código, em um arquivo de cabeçalho onde os números de sinalizadores de rastreamento válidos são mapeados para nomes em uma grande enumeração no código C++ e, em seguida, os nomes são usados ​​no restante do código.

    Como Aaron disse, você pode ativar qualquer número de sinalizador de rastreamento e, se ele não fizer nada ou se você não exercer a funcionalidade para a qual o sinalizador de rastreamento é relevante, não notará nenhuma diferença no comportamento.

    DBCC TRACEONnão verifica nada - já que não há lista de tempo de execução de quais números são válidos ou não - apenas permite esse número de sinalizador de rastreamento em um bitmap de quais sinalizadores são definidos para essa conexão/globalmente.

    O problema de ter uma verificação de validade é que exporia quais sinalizadores de rastreamento são válidos, permitindo que fossem descobertos. Dessa forma, a 'lista válida' é efetivamente ofuscada, que é o que a equipe SQL deseja.

    Em relação à sugestão de Kin em um comentário que o SQL Server deveria ter select * from sys.available_trace_flags- Sim e não. Existem muitos sinalizadores de rastreamento que são altamente prejudiciais ao desempenho e são necessários apenas para depurar problemas sob orientação do Suporte ao produto, mas o SQL Server pode listar os sinalizadores 'seguros'.

    • 42
  2. Paul White
    2016-06-15T06:24:35+08:002016-06-15T06:24:35+08:00

    Quais são as maneiras de encontrar novos sinalizadores de rastreamento?

    Na maioria das vezes, tudo se resume a ter tempo e recursos emocionais para gastar procurando por eles.

    Certamente, é possível escrever um script para percorrer possíveis números de sinalizadores de rastreamento e analisar os efeitos, mas isso nem sempre é frutífero. Há muitas razões para isso, mas as frustrações comuns incluem o fato de que alguns sinalizadores de rastreamento são eficazes apenas em combinação com outros, alguns funcionam apenas -Tna inicialização ou quando usados ​​com DBCC TRACEON, alguns apenas com OPTION (QUERYTRACEON). Alguns exigem comandos não documentados, ou extensões de comando, ou para que um recurso específico também seja ativado. Alguns só produzem efeitos se você souber onde procurá-los. E assim por diante e ... muito ... assim por diante.

    Dito isso, talvez a técnica mais eficaz seja percorrer a execução de uma determinada consulta ou comando passo a passo com um depurador ou outra ferramenta de criação de perfil anexada, comparando os caminhos percorridos com o(s) sinalizador(es) de rastreamento ativado e desativado. 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 nisso. Também é útil se você já passou por esse processo centenas ou milhares de vezes antes, para ter uma noção geral do tipo de coisa que está procurando, qual faixa de sinalizadores de rastreamento tem maior probabilidade de ser eficaz e qual parte da base de código será interessante.

    Definir um ponto de interrupção CSessionTraceFlags::CheckSessionTraceInternale verificar o valor do edxregistro (para ver qual sinalizador de rastreamento 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 rastreamento são verificados no ponto em que eles afetam o caminho do código tomado.

    No SQL Server 2019, defina um ponto de interrupção em sqllang!GetGlobalTraceFlagStore. Quando essa função muito curta retornar, o chamador colocará o número do sinalizador de rastreamento no registro edxcomo acima, antes de chamar sqllang!get_bitpara verificar se o sinalizador está definido.

    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, em última análise, 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 que você encontrar é uma curiosidade que pode ter efeitos inesperados em várias situações (diferentes compilações, SKUs, configurações de segurança, recursos diferentes... qualquer outra coisa em que você possa ou não pensar). Estes só serão 'apoiados' pela pessoa que escreveu sobre eles, se for o caso.

    Existem várias listas não oficiais, a melhor que conheço é A Topical Collection of SQL Server Flags de Aaron Morelli (atualmente na v6, abril de 2016).

    Dito isso, o Microsoft CSS (finalmente) tem acesso a todos os sinalizadores de rastreamento, portanto, eles podem 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; Eu realmente não sei, nunca tendo ido por esse caminho.

    • 42
  3. Konstantin Taranov
    2017-08-17T11:39:17+08:002017-08-17T11:39:17+08:00

    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: Finding Undocumented Trace Flags e Joe Obbish neste incrível artigo A Method to Find Trace Flags

    • 14

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve