Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Melhorias ocultas de desempenho e gerenciamento no SQL Server 2012/2014


Vários anos atrás, a Microsoft publicou um artigo muito útil da Base de Conhecimento sobre como configurar o SQL Server 2012 e o SQL Server 2014 para obter o melhor desempenho com cargas de trabalho pesadas em hardware de servidor moderno e de tamanho maior. Meu colega Aaron Bertrand e eu tivemos um pequeno papel na verificação do artigo original da KB. Este artigo da base de conhecimento foi mantido bastante atualizado desde então e ainda é uma ótima referência para opções úteis de configuração para o SQL Server 2012/2014.

Desde então, a Microsoft também transferiu várias melhorias de desempenho muito úteis do SQL Server 2016 para o SQL Server 2012 e o SQL Server 2014, desde que você esteja em uma versão nova o suficiente de qualquer uma dessas versões mais antigas do SQL Server. A Microsoft recomenda que você implante proativamente os Service Packs e as atualizações cumulativas para minimizar a chance de encontrar problemas que foram corrigidos em compilações posteriores do SQL Server.

Como um bônus adicional, você também receberá novos recursos e outros aprimoramentos, como descrevo neste artigo. Na maioria dos casos, você terá que habilitar um sinalizador de rastreamento para obter o benefício dessas melhorias de desempenho.

Gerenciador de páginas sujas


O primeiro é o uso do Dirty Page Manager (DPM) em conjunto com a habilitação de pontos de verificação indiretos para seus bancos de dados de usuário e sistema no SQL Server 2012 e SQL Server 2014. Os pontos de verificação indiretos são o padrão para novos bancos de dados criados no SQL Server 2016 e é o configuração recomendada para instâncias do SQL Server 2016.

Se você ativar o Trace Flag 3449 global (e você estiver no SQL Server 2012 SP3 CU3 ou posterior ou SQL Server 2014 SP1 CU7 ou posterior), você obterá um desempenho muito melhor evitando uma chamada FlushCache em vários cenários comuns diferentes, como banco de dados de backup, log de transações de backup, crie um banco de dados, adicione um arquivo a um banco de dados, recupere um banco de dados, reduza um arquivo de banco de dados e durante um desligamento “gracioso” do SQL Server. O sinalizador de rastreamento 3449 entra em vigor imediatamente, sem necessidade de reinicialização. Você também deve definir o TF 3449 como um sinalizador de rastreamento de inicialização.

Evitar essas chamadas de FlushCache é particularmente importante quando você tem uma grande quantidade de RAM (mais de 256 GB) em seu servidor de banco de dados, com o benefício aumentando com o tamanho do pool de buffers em uso. Você pode ler sobre esse aprimoramento com mais detalhes nesta postagem do blog:

Em seguida, se você estiver no SQL Server 2012 SP4 ou SQL Server 2014 SP2 (ou posterior), obterá vários outros novos aprimoramentos de desempenho, como particionamento automático Soft NUMA e dimensionamento de objeto de memória dinâmica que foram originalmente introduzidos no SQL Server 2016 .

Particionamento Automático Soft NUMA


No SQL Server 2012 SP4 e no SQL Server 2014 SP2, quando você define Trace Flag 8079 como um sinalizador de rastreamento de inicialização, o SQL Server verificará o layout de hardware durante a inicialização do mecanismo e configurará automaticamente o Soft NUMA em sistemas que relatam 8 ou mais núcleos físicos por nó NUMA. O comportamento automático do soft NUMA reconhece Hyperthreading (HT/processador lógico), o que significa que funciona com Intel Hyper-Threading e AMD SMT. Ao determinar o layout de nó de soft NUMA ideal, as informações da CPU lógica são consultadas e usadas para evitar agrupamentos de nós somente lógicos e somente físicos que podem levar a variações de desempenho nos nós soft NUMA.

Os processadores de servidor atuais podem ter até 32 núcleos físicos em um único nó NUMA, o que pode expor problemas de escalabilidade semelhantes a SMP em um único nó NUMA de hardware. A Microsoft afirma que eles veem uma melhoria de desempenho notável desse recurso usando seu equipamento de teste interno do SQL Server 2016:

"Com o soft-NUMA automático com reconhecimento de HT, obtemos um ganho de até 30% no desempenho da consulta quando o DOP é definido para o número de núcleos físicos em um soquete (12 neste caso) usando o Soft NUMA automático."

Como sempre, é uma boa ideia testar o desempenho de sua carga de trabalho com o Automatic Soft NUMA antes de usá-lo na produção.

Escalonamento de objetos de memória dinâmica


No SQL Server 2012 SP4 e no SQL Server 2014 SP2, o SQL Server particionará dinamicamente objetos de memória com base no número de nós NUMA e núcleos de processador lógico para dimensionar melhor em hardware de servidor moderno. O objetivo da promoção dinâmica é particionar automaticamente um objeto de memória seguro de encadeamento (CMEMTHREAD) se ele se tornar um gargalo.

Objetos de memória não particionados serão promovidos dinamicamente para serem particionados pelo nó NUMA (o número de partições é igual ao número de nós NUMA) com base na carga de trabalho e gargalo, e os objetos de memória particionados pelo nó NUMA podem ser promovidos para serem particionados por núcleos de CPU lógicos (o número de partições é igual ao número de núcleos lógicos da CPU). Esse aprimoramento elimina a necessidade do Trace Flag 8048 depois de instalar o SQL 2014 SP2 ou o SQL Server 2012 SP4.

Melhoria SOS_RWLock Spinlock


No SQL Server 2014 SP2, há melhorias (novamente portadas do SQL Server 2016) que eliminam a necessidade de spinlocks para operações SOS_RWLock. A Microsoft descreve essa melhoria com mais detalhes assim:

"O SOS_RWLock é um primitivo de sincronização usado em vários lugares em toda a base de código do SQL Server. Como o nome indica, o código pode ter várias propriedades compartilhadas (leitores) ou única (gravador). Essa melhoria elimina a necessidade de spinlock para SOS_RWLock e, em vez disso, usa Técnicas sem bloqueio semelhantes ao OLTP na memória. Com essa alteração, muitos threads podem ler uma estrutura de dados protegida por SOS_RWLock em paralelo sem bloquear uns aos outros e, assim, aumentar a escalabilidade. Antes dessa alteração, a implementação de spinlock mais antiga permitia que apenas um thread adquira o SOS_RWLock de cada vez até mesmo para ler uma estrutura de dados."

Você também obterá várias melhorias úteis de gerenciamento no SQL Server 2012 SP4 e no SQL Server 2014 SP2. Você pode ler sobre essas melhorias com mais detalhes nestas postagens do blog:
  • SQL Server 2012 Service Pack 4 (SP4) lançado!
  • O SQL Server 2014 Service Pack 2 já está disponível !!!

A principal conclusão de tudo isso é que, se você estiver executando o SQL Server 2012 (que saiu do suporte principal em 11 de julho de 2017), desejará estar no SQL Server 2012 SP4, enquanto se estiver executando o SQL Server 2014, você deseja estar no SQL Server 2014 SP2 ou mais recente. Você também precisará habilitar os sinalizadores de rastreamento aplicáveis ​​e definir as propriedades relevantes do banco de dados para aproveitar essas melhorias.