Valores de tempo do SQL Server podem estar incorretos ao usar utilitários ou tecnologias alterar freqüências de CPU

Traduções deste artigo Traduções deste artigo
ID do artigo: 931279 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Microsoft SQL Server 2005 usa o contador de CPU alta resolução para fornecer recursos de tempo microssegundo. Um microssegundo é um millionth de segundo (ou milésimos de uma de um milissegundo). No entanto, valores de tempo do SQL Server podem estar incorretos se você usar tecnologias alterar freqüências de CPU. Por exemplo, esse problema pode ocorrer quando você usar qualquer uma das seguintes tecnologias:
  • CPU stepping
  • AMD Cool'n ' silencioso tecnologia
  • Vários esquemas de energia
Este artigo contém métodos e informações adicionais para ajudá-lo a contornar esse problema.

Sintomas

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

Causa

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

Resolução

Informações sobre o service pack

Para resolver esse problema, obtenha o service pack mais recente para o 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:
913089Como obter o service pack mais recente para o SQL Server 2005
Observação No SQL Server 2005 Service Pack 3 e em service packs mais recentes, não é usado o carimbo de data / hora do processador. Essas versões do SQL Server 2005 usam um timer mais confiável que tenha uma precisão máxima de 1 milissegundos.

Situação

Esse problema foi corrigido primeiro no SQL Server 2005 Service Pack 3.

Como Contornar

SQL Server 2005 requer pontos de dados conhecidos e estável para executar o ajuste de desempenho preciso. Se ajustes de freqüência de CPU dinâmicos estiverem ativados no computador, você pode desativá-los para que as CPUs mantêm uma taxa de freqüência constante antes de começar a monitorar e ajustar o desempenho do SQL Server. Para fazer isso, use os seguintes métodos.

Configurar o esquema de energia no computador para forçar as CPUs para permanecer na freqüência máxima

Para fazer isso, execute as seguintes etapas:
  1. Clique em Iniciar , clique em Executar , digite powercfg.cpl e, em seguida, 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 flutuação. Uma flutuação é uma divergência entre valores de freqüência de CPU. Para obter mais informações, consulte a seção "Descompasso". Nesse caso, você deve reiniciar o Microsoft Windows para ressincronizar freqüências de todas as CPUs depois de alterar o esquema de energia.

Se você não pode reiniciar o computador, ative afinidade do processador do SQL Server impedir a movendo entre CPUs de threads de trabalho do SQL Server. Quando você fizer isso, não é necessário reiniciar o computador mesmo se ocorre uma divergência entre valores de freqüência de CPU. Para habilitar o SQL Server afinidade do processador para todas as CPUs no servidor, você deve usar uma máscara de diferente, dependendo do número de processadores lógicos estão no servidor.

A tabela a seguir lista exemplos de situações.
Recolher esta tabelaExpandir esta tabela
Número de CPUInstruções para ativar a afinidade do processador
02 De CPUsExec sp_configure 'affinity mask', 0 x 00000003
IR
reconfigurar
IR
04 De CPUsExec sp_configure 'affinity mask', 0x0000000F
IR
reconfigurar
IR
08 De CPUsExec sp_configure 'affinity mask', 0x000000FF
IR
reconfigurar
IR
16 CPUsExec sp_configure 'affinity mask', 0x0000FFFF
IR
reconfigurar
IR
32 CPUsExec sp_configure 'affinity mask', 0xFFFFFFFF
IR
reconfigurar
IR
Observação Talvez seja insuficiente para desabilitar recursos de variação de freqüência de CPU no nível do BIOS. Vários utilitários de terceiros podem alterar as freqüências de CPU. Algumas implementações habilitar freqüência ajustes mesmo quando as CPUs estão sob configurações de esquema de energia máxima. Nesse caso, você deve desativar esses utilitários de terceiros quando você executa no SQL Server 2005 de ajuste de desempenho.

Usar os utilitários de terceiros e drivers para sincronizar as freqüências de CPU e contadores de relógio da CPU

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

Mais Informações

Microsoft SQL Server 2000 e versões anteriores do SQL Server usam os mecanismos de tempo do Windows. Os mecanismos de tempo usam valores de precisão de milissegundos. Normalmente, essa precisão é 10 a 15 ms. Contudo, a precisão pode ser tão grande como ms 55. Consultas do SQL Server com freqüência concluída dentro de dígito milissegundos ou microssegundo tempo abrange. Essa precisão requer um timer de alta resolução. Portanto, essas versões do relatório do SQL Server a duração de algumas consultas como ms. 0 assim, é difícil monitorar o desempenho e ajustar o desempenho do SQL Server em versões anteriores do SQL Server.

SQL Server 2005 melhora a precisão usando o contador de CPU alta resolução para fornecer recursos de tempo microssegundo. Quando você usa as tecnologias que estão listadas na seção "Resumo", os valores de tempo relatados podem ser incorretos.

Esse problema pode afetar os seguintes recursos e objetos:
  • Eventos de rastreamento:
    • O evento de Realce
    • Eventos no nó de procedimentos armazenados
    • Eventos no nó TSQL
    • Eventos no nó de objetos
    • Eventos no nó de transações
  • Exibições 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 de sistema sysprocesses
Depois de instalar o SQL Server 2005 Service Pack 2 (SP2), o SQL Server registra uma mensagem de erro no log de erro quando o SQL Server detecta que os timers de alta resolução estão fora de sincronizado 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 cuidado.

O texto da mensagem de erro semelhante a uma das seguintes mensagens de erro:
Mensagem de erro 1
O contador de carimbo de data / hora da CPU no Agendador id 2 não está sincronizado com outros CPUs.
Mensagem de erro 2
Freqüência de carimbo de tempo de CPU foi alterado de 191469 para 1794177 tiques por milissegundos. A nova freqüência será usada
SQL Server usa a instrução delta entre tempo real carimbo contador (RDTSC) para adquirir a contagem de escala de CPU de 64 bits. Você pode dividir esse valor, a freqüência de CPU para converter o valor em valores de milissegundos. Variações de tempo podem ocorrer quando as alterações de freqüência de CPU ou descompassos ocorre.

CPU stepping

CPU stepping é definido como uma alteração deliberada na freqüência de CPU. CPU stepping também pode ser conhecido como tecnologia Intel SpeedStep ou AMD PowerNow! tecnologia. Quando CPU stepping ocorre, a velocidade da CPU pode aumentar ou diminuir em incrementos de até 50 MHz para economizar energia e reduzir a saída de calor. CPUs que estão dentro do mesmo nó de acesso (NUMA) de memória não-uniforme não ajustam freqüências independentemente.

A tabela a seguir ilustra como CPU stepping alterações podem afetar os cálculos de tempo.
Recolher esta tabelaExpandir esta tabela
AçãoDelta entre RDTSC escalasTiques por milissegundos (freqüência)Tempo de relógio de parede
Iniciar lote12000
Etapa de freqüência para baixo2001001ms
Lote de fim5003ms
TOTAIS5004ms
SQL Server captura ticks os delta entre RDTSC em tiques delta entre RDTSC e o início e término. Em seguida, SQL Server divide os ticks pelo valor de freqüência.

Neste exemplo, os cálculos de tempo a seguir ocorrem quando você usa um valor de freqüência de 100 ou 200:
  • freqüência 200: 500/200 = 2.5 ms
  • freqüência 100: 500/100 = 5 ms
Nenhum dos cálculos tempo coincide com o tempo de relógio parede real de 4 ms.

Se esse cálculo é usado em um RPC: concluído colunas de dados de evento, a duração e a Hora final rastreamento são relatadas incorretamente. O RPC: concluído evento captura o tempo de relógio parede inicial e contagem de escala de CPU. Para obter tempo de resolução mais alto que o Windows fornece nas colunas de dados SQL Server 2005, a duração e a hora de término em um SQL Server rastreamento são calculados usando-se a contagem de tiques CPU decorrida. A coluna de hora de término é calculada adicionando a coluna de duração para a coluna hora de início . Neste exemplo, a coluna de hora de término é calculada adicionando incorretamente ou ms 2.5 ms 5 para a hora inicial.

Flutuação

Flutuação é uma divergência em valores de relógio da CPU. Sistemas que possuem várias CPUs podem produzir valores diferentes de relógio da CPU para o mesmo ponto no tempo. Embora não seja comum, CPUs podem enfrentar separação de relógio longo do tempo.

O exemplo a seguir demonstra como alterações de flutuação podem afetar o resultado da duração da coluna de dados em um rastreamento do SQL Server. O exemplo supõe que a freqüência de CPU permanece constante em 200 tiques por milissegundos. A tabela a seguir ilustra os eventos nessa situação.
Recolher esta tabelaExpandir esta tabela
AçãoCPU agendada do WindowsCPU 1 RDTSCCPU 2 RDTSCTempo de relógio de parede
Iniciar lote110011000
Lote de fim290019004 ms
TOTAIS4 ms
SQL Server captura ticks os delta entre RDTSC e os pontos de início e os pontos de extremidade. Em seguida, SQL Server divide ticks delta entre RDTSC e pelo valor de freqüência. Neste exemplo, o Windows agendado o thread de trabalho do SQL Server em duas CPUs diferentes. O thread de trabalho do SQL Server que serviços o lote primeiro eram executados na primeira CPU (CPU 1).

No entanto, a execução em lotes foi interrompida em algum momento, e SQL Server enviadas a execução de lote para a fila pendente. Quando o SQL Server enviado o thread de trabalho do SQL Server que serviços este lote para a fila executável novamente, o Windows expedidos o segmento para executar em segunda CPU (CPU 2). O thread de trabalho do SQL Server concluída em execução no CPU 2. Devido a flutuação de CPU, o valor de escala end que foi capturado de CPU 2 foi 1900, em vez de 900. Você pode evitar esse comportamento se você habilitar afinidade de processador do SQL Server.

Os cálculos de tempo a seguir são usados neste exemplo:
  • mas incorreta relatado valor: (1900 100 = 1800) / 200 = 9 ms
  • corrigir valor: (900 100 = 800) / 200 = 4 ms
O valor da coluna duração para o RPC: concluído evento poderia ser relatado como ms 9 em vez de 4 ms. esse resultado é mais duas vezes o valor correto da ms 4.

Mensagens de aviso de flutuação são adicionadas para o SQL Server 2005 para indicar que as saídas de desempenho que são mencionadas anteriormente podem não ser confiáveis. Em algumas situações não reveladas, SQL Server 2005 SP2 pode relatar mensagens de aviso sobre o seguinte:
  • Mensagens de aviso descompassos False
  • Flutuação pode se tornar dezenas de milissegundos sem causar um efeito notável do sistema
Você deve ter cuidado quando você avaliar as saídas relacionados ao desempenho e quando você comparar as saídas relacionados ao desempenho a intervalos de relógio de parede. Se não houver nenhum sinais de outros problemas de desempenho, você normalmente pode ignorar as mensagens de aviso de flutuação. Por exemplo, você normalmente pode ignorar as mensagens de aviso descompassos nas seguintes situações:
  • Processos estão funcionando conforme o esperado.
  • Consultas do SQL Server não estão executando em padrões durational estranhos.
  • Você não vir sinais de outros afunilamentos.
No entanto, antes de você ignorar descompassos aviso mensagens, é recomendável que você entre em contato com o fabricante para garantir que nenhum delta entre RDTSC e problemas conhecidos existir.

Você pode usar o sinalizador de rastreamento 8033 (?T8033) para retornar para o comportamento de relatório na versão original do SQL Server 2005 e no SQL Server 2005 SP1. A versão original do SQL Server 2005 e SQL Server 2005 SP1 não relatar mensagens de aviso de flutuação. Se você estiver executando a versão original do SQL Server 2005 ou SQL Server 2005 SP1 sem problemas, você pode ignorar as mensagens normalmente.

Por que a instrução WAITFOR DELAY funciona corretamente? E sobre processos do sistema periódicas?

Mecanismos de tempo limite não são afetados pelo projeto de alta resolução. SQL Server não usa o timer de alta resolução para atividades baseadas no timer. Algumas atividades de tempo limite são baseadas no timer de resolução menor que usa a função ObterContagemMarcaEscala . Essas atividades de tempo limite incluem tempo limite de bloqueio, a instrução WAITFOR DELAY e detecção de deadlock.
Para obter mais informações, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
938448Um servidor baseado no Windows Server 2003 pode enfrentar flutuação de contador de carimbo de data / hora se o servidor usa dual-core AMD Opteron processadores ou processadores AMD Opteron multiprocessador
895980Programas que usam a função de QueryPerformanceCounter podem diminuir seu desempenho no Windows Server 2003 e no Windows XP
Os produtos de terceiros mencionados neste artigo são fabricados por empresas que são independentes da Microsoft. Microsoft não oferece garantia, implícita ou não, sobre o desempenho ou confiabilidade desses produtos.

Propriedades

ID do artigo: 931279 - Última revisão: terça-feira, 16 de dezembro de 2008 - Revisão: 7.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
Palavras-chave: 
kbmt kbtshoot kbexpertiseadvanced kbsql2005engine kbprb KB931279 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 931279

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com