Resumo

O Microsoft SQL Server 2005 usa o contador CPU de alta resolução para fornecer recursos de tempo de microssegundo. Um microssegundo é um milionésimo de um segundo (ou um milésimo de um milésimo de segundo). No entanto, os valores de tempo do SQL Server podem estar incorretos se você usar tecnologias que alteram as frequências da CPU. Por exemplo, esse problema pode ocorrer quando você usa qualquer uma das seguintes tecnologias:

  • CPU Stepping

  • Tecnologia AMD Cool'n'Quiet

  • Vários esquemas de energia

Este artigo contém métodos e informações adicionais para ajudá-lo a solucionar esse problema.

Sintomas

Quando você usa a instrução SET STATISTICs timestatistics para exibir os tempos de execução, análise e compilação do servidor, você pode obter valores incorretos. Por exemplo, você pode observar que o tempo decorrido do tempo de execução do SQL Server é muito mais do que o tempo da CPU. Esse problema pode afetar a precisão do ajuste de desempenho. Esse problema ocorre quando você usa uma das tecnologias listadas na seção "Resumo" do servidor.

Causa

Esse problema ocorre porque as frequências da CPU são alteradas quando você usa essas tecnologias. O SQL Server 2005 usa o contador CPU de alta resolução para fornecer recursos de tempo de microssegundo. Se as frequências de CPU forem alteradas para conservar energia e reduzir a saída de calor, as durações calculadas podem estar incorretas.

Resolução

Informações do Service Pack

Para solucionar esse problema, obtenha o Service Pack mais recente do SQL Server 2005. Para obter mais informações, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

913089 Como obter o Service Pack mais recente para o SQL Server 2005Observação No SQL Server 2005 Service Pack 3 e em service packs posteriores, o carimbo de data/hora do processador não é usado. Essas versões do SQL Server 2005 usam um temporizador mais confiável com uma precisão máxima de 1 milissegundo.

Status

Esse problema foi corrigido pela primeira vez no SQL Server 2005 Service Pack 3.

Solução alternativa

O SQL Server 2005 requer pontos de dados conhecidos e estáveis para executar ajustes precisos de desempenho. Se os ajustes de frequência de CPU dinâmica estiverem habilitados no computador, você poderá desabilitá-los para que as CPUs mantenham uma taxa de frequência constante antes de começar a monitorar e ajustar o desempenho do SQL Server. Para fazer isso, use os métodos a seguir.

Configurar o esquema de energia no computador para forçar as CPUs a permanecerem com frequência máxima

Para fazer isto, siga as seguintes etapas:

  1. Clique em Iniciar, clique em executar, digite powercfg. cple clique em OK.

  2. Na caixa de diálogo Propriedades de opções de energia , clique em sempre ligado na lista esquemas de energia .

  3. Clique em OK.

Pode ocorrer uma descompasso. Uma descompasso é uma divergência entre os valores de frequência da CPU. Para obter mais informações, consulte a seção "descompasso". Nesse caso, você deve reiniciar o Microsoft Windows para ressincronizar as frequências de todas as CPUs após alterar o esquema de energia. Se não for possível reiniciar o computador, habilite a afinidade do processador do SQL Server para impedir que os threads de trabalho do SQL Server sejam movidos entre CPUs. Ao fazer isso, você não precisa reiniciar o computador mesmo que ocorra uma divergência entre os valores de frequência da CPU. Para habilitar a afinidade do processador do SQL Server para todas as CPUs do servidor, você deve usar uma máscara diferente, dependendo do número de processadores lógicos no servidor. A tabela a seguir lista os cenários de exemplo.

Número da CPU

Instruções para habilitar a afinidade do processador

02 CPUs

exec sp_configure ' máscara de afinidade ', 0x00000003GOreconfigureGO

4 CPUs

exec sp_configure ' máscara de afinidade ', 0x0000000FGOreconfigureGO

08 CPUs

exec sp_configure ' máscara de afinidade ', 0x000000FFGOreconfigureGO

16 CPUs

exec sp_configure ' máscara de afinidade ', 0x0000FFFFGOreconfigureGO

CPUs de 32

exec sp_configure ' máscara de afinidade ', 0xFFFFFFFFGOreconfigureGO

Observação Pode ser insuficiente desativar os recursos de variação de frequência de CPU no nível do BIOS. Vários utilitários de terceiros podem alterar as frequências da CPU. Algumas implementações permitem ajustes de frequência mesmo quando as CPUs estiverem em configurações de esquema máximo de energia. Nesse caso, você deve desabilitar esses utilitários de terceiros ao executar o ajuste de desempenho no SQL Server 2005.

Usar utilitários de terceiros e drivers para sincronizar as frequências de CPU e os contadores do relógio de CPU

Em ocasiões raras, um sistema pode exigir uma atualização do fabricante para corrigir os problemas de frequência da CPU. É uma prática recomendada verificar o sistema para obter as atualizações mais recentes do BIOS, do microcódigo e das atualizações de firmware se você suspeitar que o sistema pode ter um problema.

Informações adicionais

O Microsoft SQL Server 2000 e versões anteriores do SQL Server usam os mecanismos de tempo do Windows. O mecanismo de tempo usa valores de precisão de milissegundos. Geralmente, essa precisão é de 10 a 15 ms. No entanto, a precisão pode ser tão grande quanto 55 MS. As consultas do SQL Server são concluídas com frequência em intervalos de tempo de milissegundos ou microssegundos de um único dígito. Essa precisão exige um temporizador de alta resolução. Portanto, essas versões do SQL Server relatam a duração de algumas consultas como 0 ms. Portanto, é difícil monitorar o desempenho e ajustar o desempenho do SQL Server em versões anteriores do SQL Server. o SQL Server 2005 melhora a precisão usando o contador de CPU de alta resolução para fornecer recursos de tempo de microssegundo. Quando você usa as tecnologias listadas na seção "Resumo", os valores de tempo indicados podem estar incorretos. Esse problema pode afetar os seguintes objetos e recursos:

  • Eventos de rastreamento:

    • O evento attention

    • Eventos no nó procedimentos armazenados

    • Eventos no nó TSQL

    • Eventos no nó objetos

    • Eventos no nó transações

  • Modos de exibição de gerenciamento dinâmico:

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • A instrução SET STATISTICs TIME

  • A tabela do sistema sysprocesses

Após a instalação do SQL Server 2005 Service Pack 2 (SP2), o SQL Server registra uma mensagem de erro no log de erros quando o SQL Server detecta que os temporizadores de alta resolução estão fora de sincronia entre as CPUs. A mensagem de erro indica que os intervalos de desempenho podem não ser precisos, e os usuários devem usar dados de desempenho com cautela. O texto da mensagem de erro se parece com uma das seguintes mensagens de erro:

Mensagem de erro 1

O contador de carimbo de data/hora da CPU na ID do Agendador 2 não está sincronizado com outras CPUs.

Mensagem de erro 2

A frequência do carimbo de data/hora da CPU mudou de 191469 para 1794177 em marcações por milissegundo. A Nova frequência será usada

O SQL Server usa a instrução do RDTSC (contador de carimbo de data/hora real) para adquirir a contagem de tiques da CPU de 64 bits. Você pode dividir esse valor pela frequência da CPU para converter o valor em milissegundos. Variações de intervalo podem ocorrer quando ocorre uma alteração de frequência de CPU ou uma descompasso.

CPU Stepping

A depuração da CPU é definida como uma alteração deliberada na frequência da CPU. A CPU Stepping também pode ser conhecida como tecnologia Intel SpeedStep ou AMD PowerNow! tecnologia. Quando ocorre a CPU Stepping, a velocidade da CPU pode aumentar ou diminuir em incrementos tão pequenos quanto 50 MHz para conservar energia e reduzir a saída de calor. As CPUs que estão dentro do mesmo nó NUMA (acesso não uniforme à memória) não ajustam a frequência de forma independente. A tabela a seguir ilustra como as alterações de revisão de CPU podem afetar os cálculos de intervalo.

Ação

Marcas RDTSC

Marcações por milissegundo (frequência)

Hora do relógio do mural

Iniciar lote

1

200

0

Etapa de etapa abaixo

200

100

1ms

Encerrar lote

500

3ms

TOTAIS

500

4ms

O SQL Server captura os tiques de RDTSC nos tiques de RDTSC de início e término. Em seguida, o SQL Server divide os tiques pelo valor de frequência. Neste exemplo, os seguintes cálculos de temporização ocorrem quando você usa um valor de frequência de 200 ou 100:

  • Frequência 200: 500/200 = 2,5 ms

  • Frequência 100: 500/100 = 5 ms

Nenhum dos cálculos de intervalo corresponde à hora real do relógio de parede de 4 ms. Se esse cálculo for usado em um evento de rastreamento RPC: Completed , as colunas de dados de duração e hora de término serão relatadas incorretamente. O evento RPC: Completed captura o tempo de início da parede e a contagem de tiques da CPU. Para obter um tempo de resolução mais alta do que os suprimentos do Windows no SQL Server 2005, as colunas de data de término e duração em um rastreamento do SQL Server são calculadas usando a contagem de tiques da CPU decorrida. A coluna hora de término é calculada adicionando-se a coluna duração à coluna hora de início . Neste exemplo, a coluna hora de término é calculada incorretamente, adicionando 2,5 ms ou 5 ms à hora de início.

Continente

Descompasso é uma divergência nos valores do relógio da CPU. Sistemas com várias CPUs podem produzir valores diferentes de relógio de CPU para o mesmo ponto no tempo. Embora não seja comum, as CPUs podem enfrentar a separação de relógio ao longo do tempo. O exemplo a seguir demonstra como as alterações de descompasso podem afetar o resultado da coluna de dados Duration em um rastreamento do SQL Server. O exemplo pressupõe que a frequência da CPU permaneça estável em 200 marcações por milissegundos. A tabela a seguir ilustra os eventos nesse cenário.

Ação

CPU agendada do Windows

CPU 1 RDTSC

CPU 2 RDTSC

Hora do relógio do mural

Iniciar lote

1

100

1100

0

Encerrar lote

2

900

1900

4 MS

TOTAIS

4 MS

O SQL Server captura os tiques do RDTSC nos pontos de início e nos pontos finais. Em seguida, o SQL Server divide os tiques RDTSC pelo valor Frequency. Neste exemplo, o Windows agendou o thread de trabalho do SQL Server em duas CPUs diferentes. O thread de trabalho do SQL Server que renomeou o lote executado pela primeira vez na primeira CPU (CPU 1). No entanto, a execução em lotes foi interrompida em algum momento, e o SQL Server enviou a execução em lotes para a fila pendente. Quando o SQL Server enviou o thread de trabalho do SQL Server que Services this batch para a fila executável novamente, o Windows distribuiu o thread para ser executado na segunda CPU (CPU 2). O thread de trabalho do SQL Server concluiu a execução na CPU 2. Devido ao descompasso da CPU, o valor da marca de fim que foi capturado na CPU 2 era 1900 em vez de 900. Você pode evitar esse comportamento se habilitar a afinidade do processador do SQL Server. Os seguintes cálculos de intervalo são usados neste exemplo:

  • O valor incorreto, mas informado: (1900 – 100 = 1800)/200 = 9 MS

  • Valor correto: (900 – 100 = 800)/200 = 4 MS

O valor da coluna Duration para o evento RPC: Completed seria reportado como 9 MS em vez de 4 ms. Esse resultado é mais do que duplo o valor correto de 4 ms. Mensagens de aviso de descompasso são adicionadas ao SQL Server 2005 para indicar que as saídas de desempenho mencionadas anteriormente podem não ser confiáveis. Em algumas situações não abordadas, o SQL Server 2005 SP2 pode relatar mensagens de aviso sobre o seguinte:

  • Mensagens de aviso de descompasso falsa

  • A descompasso pode ficar a dezenas de milissegundos sem causar um efeito perceptível do sistema

Você deve ter cuidado ao avaliar as saídas relacionadas ao desempenho e quando você compara as saídas relacionadas ao desempenho com os intervalos do relógio de parede. Se não houver sinais de outros problemas de desempenho, geralmente você pode ignorar as mensagens de aviso de descompasso. Por exemplo, geralmente você pode ignorar as mensagens de aviso de descompasso nas seguintes situações:

  • Os processos estão sendo executados como esperado.

  • As consultas do SQL Server não estão em execução em padrões de duração estranhas.

  • Você não vê sinais de outros afunilamentos.

No entanto, antes de ignorar as mensagens de aviso de descompasso, recomendamos que você entre em contato com o fabricante para ter certeza de que não há problemas conhecidos com o RDTSC. Você pode usar o sinalizador de rastreamento 8033 (– T8033) para retornar ao comportamento de relatório na versão de lançamento original do SQL Server 2005 e no SQL Server 2005 SP1. A versão de lançamento original do SQL Server 2005 e do SQL Server 2005 SP1 não relata mensagens de aviso de descompasso. Se você estiver executando a versão de lançamento original do SQL Server 2005 ou do SQL Server 2005 SP1 sem problemas, você pode ignorar as mensagens.

Por que a instrução WAITFOR DELAY funciona corretamente? E quanto aos processos periódicos do sistema?

Os mecanismos de tempo limite não são afetados pelo design de alta resolução. O SQL Server não usa o temporizador de alta resolução para atividades baseadas em temporizador. Algumas atividades de tempo limite se baseiam no temporizador de resolução reduzida que usa a função ObterContagemMarcaEscala . Essas atividades de tempo limite incluem o tempo limite de bloqueio, a instrução WAITFOR DELAY e a detecção de bloqueio.

Para obter mais informações, clique nos seguintes números de artigos para ler o conteúdo na Base de Dados de Conhecimento Microsoft:

938448 Um servidor baseado no Windows Server 2003 pode sofrer descompasso de contador de carimbo de data/hora se o servidor usa processadores AMD Opteron Dual-Core ou processadores AMD Opteron com vários processadores

895980 Programas que usam a função QueryPerformanceCounter podem funcionar mal no Windows Server 2003 e no Windows XPOs produtos de terceiros abordados neste artigo são fabricados por empresas que são independentes da Microsoft. A Microsoft não oferece garantias, implícitas ou de outra forma, sobre o desempenho ou a confiabilidade desses produtos.

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×