quinta-feira, 10 de fevereiro de 2022

SQL Server Trace Flags – Principais Flag's De Performance

SQL Server Trace Flags – sinalizadores de rastreamento 

Neste post, estamos descrevendo os principais flag's utilizados para ajustes de desempenho no SQL Server. Se voce ainda não conhece sobre os traces de rastreamento, fizemos uma introdução neste post anterior, confere lá .....

SQL Server Trace Flags – sinalizadores de rastreamento




DBCC FLAG - 174

Aumenta o número de buckets do cache de planos do Mecanismo de Banco de Dados do SQL Server de 40.009 para 160.001 em sistemas de 64 bits. Observação: Teste essa opção completamente antes de implantá-la em um ambiente de produção.

Escopo: apenas global


DBCC FLAG - 818

Permite diagnósticos de E/S adicionais para verificar se há condições de perda de gravação ou leitura obsoleta durante operações de E/S de arquivo. O sinalizador de rastreamento 818 habilita um buffer de anéis na memória usado para acompanhar as últimas 2.048 operações de gravação bem-sucedidas realizadas pelo SQL Server, sem incluir E/Ss de classificação e arquivo de trabalho. Quando ocorrerem erros como o Erro 605, 823 ou 3448, o valor do LSN (número de sequência de log) do buffer de entrada será comparado com a lista de gravação recente. Se o LSN recuperado for mais antigo do que aquele especificado durante a operação de gravação, uma nova mensagem de erro será registrada no log de erros do SQL Server. 

Observação: Do SQL Server 2017 (14.x) em diante, esse sinalizador de rastreamento não tem nenhum efeito.

Escopo: apenas global


DBCC FLAG - 834

Usa as alocações de página grande para o pool de buffers, columnstore e tabelas na memória. O tamanho de página grande varia dependendo da plataforma de hardware, mas ele pode ter de 2 MB a 16 MB. As páginas grandes são alocadas na inicialização e são mantidas durante todo o tempo de vida do processo. O sinalizador de rastreamento 834 aprimora o desempenho aumentando a eficiência do TLB (translation look-aside buffer) na CPU. Em outras palavras, o sinalizador de rastreamento 834 aumenta a eficiência do gerenciamento da conversão de endereços de memória física para virtual que é executada pelo hardware de gerenciamento de memória. 

Observação: O sinalizador de rastreamento 834 se aplica somente às versões de 64 bits do SQL Server. Você precisa ter o direito de usuário de Bloquear páginas na memória a fim de ativar o sinalizador de rastreamento 834. Você só pode ativar o sinalizador de rastreamento 834 na inicialização. O sinalizador de rastreamento 834 poderá impedir que o servidor seja iniciado se a memória estiver fragmentada e não for possível alocar páginas grandes. Portanto, o sinalizador de rastreamento 834 é mais adequado para servidores dedicados ao SQL Server.


Observação: Quando habilitado, o modelo de memória de página grande pré-aloca toda a memória SQLOS na inicialização de instância e não retorna essa memória para o sistema operacional.


Observação: Se você estiver usando o recurso de Índice Columnstore de SQL Server 2012 (11.x) a SQL Server 2019 (15.x), não recomendamos ativar o sinalizador de rastreamento 834. 

Escopo: apenas global


DBCC FLAG - 836

Use a opção máxima de memória do servidor para o pool de buffers. O sinalizador de rastreamento 836 faz com que SQL Server dimensione o pool de buffers na inicialização com base no valor da opção máxima de memória do servidor e não na memória física total. Você pode usar o sinalizador de rastreamento 836 para reduzir o número de descritores de buffer que são alocados na inicialização no modo AWE (Address Windowing Extensions) de 32 bits.


Observação: O sinalizador de rastreamento 836 se aplica somente às versões de 32 bits do SQL Server que têm a alocação AWE habilitada. Você só pode ativar o sinalizador de rastreamento 836 na inicialização.


Escopo: apenas global


DBCC FLAG - 2312

Define o modelo de estimativa de cardinalidade do otimizador de consulta para o SQL Server 2014 (12.x) e as versões posteriores, dependendo do nível de compatibilidade do banco de dados.

Observação: Se o nível de compatibilidade do banco de dados for inferior a 120, habilitar o sinalizador de rastreamento 2312 usará o modelo de estimativa de cardinalidade de SQL Server 2014 (12.x) (120). Para obter mais informações, confira este artigo do Suporte da Microsoft.

Começando com o SQL Server 2016 (13.x) SP1, para fazer isso no nível da consulta, adicione a dica de consulta USE HINT 'FORCE_DEFAULT_CARDINALITY_ESTIMATION' em vez de usar o sinalizador de rastreamento.


Escopo: global, sessão ou consulta (QUERYTRACEON)


DBCC FLAG - 9481

Permite definir o modelo de estimativa de cardinalidade do otimizador de consulta para o SQL Server 2012 (11.x) e versões anteriores, independentemente do nível de compatibilidade do banco de dados. Para obter mais informações, confira este artigo do Suporte da Microsoft.


Começando com SQL Server 2016 (13.x), para fazer isso no nível do banco de dados, confira a opção LEGACY_CARDINALITY_ESTIMATION em ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).


Começando com o SQL Server 2016 (13.x) SP1, para fazer isso no nível da consulta, adicione a dica de consulta USE HINT 'FORCE_LEGACY_CARDINALITY_ESTIMATION' em vez de usar o sinalizador de rastreamento.


Escopo: global, sessão ou consulta (QUERYTRACEON)



Em breve retornamos com mais dicas de Trace flag's.

Bons estudos.

SQL Server Trace Flags – sinalizadores de rastreamento


    Sinalizadores de rastreamento são usados para alterar as características do servidor específico ou para alterar um comportamento em particular. São configurações que não existem de formas nativas (default) em uma instancia SQL Server.

A maioria dos trace flags não estão documentados pela Microsoft, então não temos suporte e devemos ter muito cuidado para usa-las. Então, por que alguém iria utiliza-las? 

Sinalizadores de rastreamento são usados com frequência para diagnosticar problemas de desempenho ou depurar procedimentos armazenados ou sistemas de computador complexos, mas também podem ser recomendados pelo Suporte da Microsoft para lidar com comportamento que esteja prejudicando uma carga de trabalho específica.

No SQL Server, há três escopos em que os sinalizadores de rastreamento podem funcionar: consulta, sessão e global. Os sinalizadores de rastreamento de consulta ficam ativos para o contexto de uma consulta específica. Os sinalizadores de rastreamento de sessão ficam ativos para uma conexão e são visíveis apenas para essa conexão. Sinalizadores de rastreamento globais são definidos no nível do servidor e são visíveis em todas as conexões no servidor. Alguns sinalizadores podem ser ativados somente como global e outros podem ser ativados no escopo global ou de sessão.

Os sinalizadores de rastreamento podem ter considerações adicionais sobre seu uso específico, portanto, é aconselhável examinar cuidadosamente todas as recomendações de apresentadas aqui e/ou por seu engenheiro de suporte. Além disso, assim como acontece com qualquer alteração de configuração no SQL Server, sempre é melhor testar minuciosamente o sinalizador em um ambiente de não produção antes de implantar.

As seguintes regras se aplicam:

Um sinalizador de rastreamento global deve ser habilitado globalmente. Caso contrário, ele não terá nenhum efeito. Recomendamos que você habilite os sinalizadores de rastreamento globais na inicialização usando a opção -T da linha de comando. Isso garante que o sinalizador de rastreamento permaneça ativo após o reinício do servidor. Reinicie o SQL Server para que o sinalizador de rastreamento entre em vigor.

Se um sinalizador de rastreamento tiver um escopo global, de sessão ou de consulta, ele poderá ser habilitado com o escopo apropriado. Um sinalizador de rastreamento habilitado no nível de sessão nunca afeta outra sessão, e seu efeito se perde quando a SPID que abriu a sessão faz logoff.

Como ligar uma trace flag global:

1
DBCC TRACEON (1222, -1)

Como desligar uma trace flag global:

1
DBCC TRACEOFF (1222, -1)


Precisa conferir quais trace flags estão ativas no seu SQL Server?

Execute a consulta abaixo na sua instância de SQL Server:


DBCC TRACESTATUS()


Confira os principais flag's de performance:

SQL Server Trace Flags – Principais Flag's De Performance