Riepilogo

Microsoft SQL Server 2005 usa il contatore della CPU ad alta risoluzione per consentire funzionalità di temporizzazione microsecondo. Un microsecondo è un milionesimo di secondo (o un millesimo di millisecondo). Tuttavia, i valori di intervallo di SQL Server potrebbero non essere corretti se si usano tecnologie che modificano le frequenze della CPU. Ad esempio, questo problema può verificarsi quando si usa una delle tecnologie seguenti:

  • CPU Stepping

  • Tecnologia AMD Cool'n'Quiet

  • Varie combinazioni di energia

Questo articolo contiene metodi e informazioni aggiuntive utili per risolvere il problema.

Sintomi

Quando si usa l'istruzione SET STATISTICs TIME per visualizzare i tempi di esecuzione, analisi e compilazione del server, è possibile che vengano ottenuti valori non corretti. Ad esempio, potresti notare che il tempo trascorso del tempo di esecuzione di SQL Server è molto più del tempo della CPU. Questo problema può influire sulla precisione dell'ottimizzazione delle prestazioni. Questo problema si verifica quando si usa una delle tecnologie elencate nella sezione "Riepilogo" nel server.

Causa

Questo problema si verifica perché le frequenze della CPU vengono modificate quando si usano queste tecnologie. In SQL Server 2005 viene usato il contatore CPU ad alta risoluzione per consentire funzionalità di temporizzazione microsecondo. Se le frequenze della CPU vengono modificate per risparmiare energia e ridurre l'output termico, le durate calcolate potrebbero non essere corrette.

Risoluzione

Informazioni sui Service Pack

Per risolvere il problema, ottenere il Service Pack più recente per SQL Server 2005. Per altre informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base seguente per visualizzare l'articolo:

913089 Come scaricare il service pack più recente per SQL Server 2005Nota In SQL Server 2005 Service Pack 3 e nei Service Pack successivi l'indicatore di data e ora del processore non viene usato. Queste versioni di SQL Server 2005 usano un timer più affidabile con una precisione massima di 1 millisecondo.

Stato

Questo problema è stato risolto per la prima volta in SQL Server 2005 Service Pack 3.

Soluzione alternativa

In SQL Server 2005 sono necessari punti dati noti e stabili per eseguire un'ottimizzazione accurata delle prestazioni. Se nel computer sono abilitate le rettifiche di frequenza della CPU dinamiche, è possibile disabilitarle in modo che le CPU mantengano un tasso di frequenza costante prima di iniziare a monitorare e ottimizzare le prestazioni di SQL Server. A questo scopo, USA i metodi seguenti.

Configurare la combinazione di risparmio energia nel computer per forzare la permanenza della CPU alla massima frequenza

A tal fine, attenersi alla seguente procedura:

  1. Fare clic sul pulsante Start, scegliere Esegui, digitare powercfg. cple quindi fare clic su OK.

  2. Nella finestra di dialogo Proprietà Opzioni risparmio energia fare clic su sempre attiva nell'elenco combinazioni di energia .

  3. Scegliere OK.

Potrebbe verificarsi una deriva. Una deriva è una divergenza tra i valori di frequenza della CPU. Per altre informazioni, vedi la sezione "Drift". In questo caso, devi riavviare Microsoft Windows per risincronizzare le frequenze di tutte le CPU dopo la modifica della combinazione di risparmio energia. Se non è possibile riavviare il computer, abilitare l'affinità del processore SQL Server per evitare che i thread di lavoro di SQL Server vengano spostati tra le CPU. Quando si esegue questa operazione, non è necessario riavviare il computer anche se si verifica una divergenza tra i valori di frequenza della CPU. Per abilitare l'affinità del processore di SQL Server per tutte le CPU del server, è necessario usare una maschera diversa, a seconda del numero di processori logici presenti nel server. La tabella seguente elenca gli scenari di esempio.

Numero di CPU

Istruzioni per abilitare l'affinità del processore

02 CPU

exec sp_configure ' affinità mask ', 0x00000003GOreconfigureGO

04 CPU

exec sp_configure ' affinità mask ', 0x0000000FGOreconfigureGO

08 CPU

exec sp_configure ' affinità mask ', 0x000000FFGOreconfigureGO

16 CPU

exec sp_configure ' affinità mask ', 0x0000FFFFGOreconfigureGO

CPU 32

exec sp_configure ' affinità mask ', 0xFFFFFFFFGOreconfigureGO

Nota Potrebbe essere insufficiente per disabilitare le caratteristiche di variazione della frequenza della CPU a livello di BIOS. Varie utilità di terze parti possono modificare le frequenze della CPU. Alcune implementazioni consentono le rettifiche di frequenza anche quando le CPU sono in impostazioni di Power Scheme massime. In questo caso, è necessario disabilitare queste utilità di terze parti quando si esegue l'ottimizzazione delle prestazioni in SQL Server 2005.

Usare utilità e driver di terze parti per sincronizzare le frequenze della CPU e i contatori di clock della CPU

In rare occasioni, un sistema può richiedere un aggiornamento dal produttore per correggere i problemi di frequenza della CPU. È consigliabile controllare il sistema per gli aggiornamenti più recenti del BIOS, del microcodice e del firmware, se si sospetta che il sistema possa avere un problema.

Ulteriori informazioni

Microsoft SQL Server 2000 e le versioni precedenti di SQL Server usano i meccanismi di temporizzazione di Windows. I meccanismi di temporizzazione usano i valori di precisione in millisecondi. In genere, questa precisione è da 10 a 15 ms. Tuttavia, la precisione può essere grande quanto 55 ms. Le query di SQL Server vengono spesso completate entro un millisecondo a una cifra o un intervallo di tempo di microsecondo. Questa precisione richiede un timer ad alta risoluzione. Di conseguenza, queste versioni di SQL Server segnalano la durata di alcune query come 0 ms. Di conseguenza, è difficile monitorare le prestazioni e ottimizzare le prestazioni di SQL Server nelle versioni precedenti di SQL Server. SQL Server 2005 migliora la precisione usando il contatore della CPU ad alta risoluzione per consentire funzionalità di temporizzazione in microsecondo. Quando si usano le tecnologie elencate nella sezione "Riepilogo", i valori di intervallo segnalati potrebbero non essere corretti. Questo problema può influire sugli oggetti e sulle caratteristiche seguenti:

  • Eventi di traccia:

    • Evento attention

    • Eventi nel nodo stored procedure

    • Eventi nel nodo TSQL

    • Eventi nel nodo oggetti

    • Eventi nel nodo transazioni

  • Visualizzazioni a gestione dinamica:

    • 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

  • Istruzione SET STATISTICs TIME

  • Tabella di sistema sysprocesses

Dopo l'installazione di SQL Server 2005 Service Pack 2 (SP2), SQL Server registra un messaggio di errore nel log degli errori quando SQL Server rileva che i timer ad alta risoluzione non sono sincronizzati tra le CPU. Il messaggio di errore indica che gli intervalli di prestazioni potrebbero non essere corretti e gli utenti devono usare i dati sulle prestazioni con cautela. Il testo del messaggio di errore è simile a uno dei seguenti messaggi di errore:

Messaggio di errore 1

Il contatore timestamp della CPU nell'ID programmatore 2 non è sincronizzato con altre CPU.

Messaggio di errore 2

La frequenza del timestamp della CPU è cambiata da 191469 a 1794177 segni di graduazione per millisecondo. Verrà usata la nuova frequenza

SQL Server usa l'istruzione RDTSC (Real Time Stamp Counter) per acquisire il conteggio della CPU a 64 bit. Puoi dividere questo valore per la frequenza della CPU per convertire il valore in valori di millisecondi. Le variazioni di intervallo possono verificarsi quando si verifica la frequenza della CPU o la deriva.

CPU Stepping

La CPU Stepping è definita come modifica intenzionale della frequenza della CPU. La CPU Stepping può anche essere nota come tecnologia Intel SpeedStep o AMD PowerNow! tecnologia. Quando si verifica un incremento della CPU, la velocità della CPU può aumentare o diminuire in incrementi di dimensioni minime di 50 MHz per risparmiare energia e ridurre l'output termico. Le CPU che si trovano all'interno dello stesso nodo NUMA (non-Uniform Memory Access) non regolano in modo indipendente le frequenze. Nella tabella seguente viene illustrato il modo in cui le modifiche apportate alla CPU possono influire sui calcoli.

Azione

RDTSC Ticks

Segni di graduazione per millisecondo (frequenza)

Tempo di clock di muro

Avviare il batch

1

200

0

Passaggio di frequenza verso il basso

200

100

1ms

Fine batch

500

3ms

TOTALI

500

4ms

SQL Server acquisisce i segni di graduazione di RDTSC sia nei segni di RDTSC iniziali che finali. SQL Server suddivide quindi i segni di graduazione in base al valore di frequenza. In questo esempio vengono eseguiti i calcoli temporali seguenti quando si usa un valore di frequenza di 200 o 100:

  • Frequenza 200: 500/200 = 2,5 ms

  • Frequenza 100: 500/100 = 5 ms

Nessuno dei calcoli di temporizzazione corrisponde al tempo effettivo dell'orologio a muro di 4 ms. Se questo calcolo viene usato in un evento di traccia RPC: Completed , le colonne di dati durata e ora di fine vengono segnalate in modo non corretto. L'evento RPC: Completed acquisisce l'ora di inizio dell'orologio a muro e il conteggio della CPU. Per ottenere un intervallo di risoluzione maggiore rispetto alle forniture di Windows in SQL Server 2005, le colonne di dati durata e ora di fine in una traccia di SQL Server vengono calcolate tramite il conteggio trascorso della CPU. La colonna ora di fine viene calcolata aggiungendo la colonna Duration alla colonna ora di inizio . In questo esempio, la colonna ora di fine viene calcolata in modo non corretto aggiungendo 2,5 ms o 5 ms all'ora di inizio.

Deriva

Drift è una divergenza nei valori di clock della CPU. I sistemi con più CPU possono produrre diversi valori di clock della CPU per lo stesso momento. Anche se non è comune, le CPU possono verificare la separazione dell'orologio nel tempo. Nell'esempio seguente viene illustrato il modo in cui le modifiche alla deriva possono influire sul risultato della colonna di dati Duration in una traccia di SQL Server. L'esempio presuppone che la frequenza della CPU rimanga costante a 200 Tick per millisecondo. La tabella seguente illustra gli eventi in questo scenario.

Azione

CPU pianificata di Windows

CPU 1 RDTSC

CPU 2 RDTSC

Tempo di clock di muro

Avviare il batch

1

100

1100

0

Fine batch

2

900

1900

4 ms

TOTALI

4 ms

SQL Server acquisisce i segni di graduazione di RDTSC sia nei punti iniziali che nei punti finali. SQL Server suddivide quindi i segni di graduazione di RDTSC in base al valore di frequenza. In questo esempio, Windows ha pianificato il thread di lavoro di SQL Server su due CPU diverse. Il thread di lavoro di SQL Server che assiste il batch per la prima volta sulla CPU (CPU 1). Tuttavia, l'esecuzione del batch è stata interrotta a un certo punto e SQL Server ha inviato l'esecuzione del batch alla coda in sospeso. Quando SQL Server ha inviato il thread di lavoro di SQL Server che esegue di nuovo il servizio di questo batch alla coda eseguibile, Windows ha spedito il thread per l'esecuzione nella seconda CPU (CPU 2). Il thread di lavoro di SQL Server è stato completato in esecuzione sulla CPU 2. A causa della deriva della CPU, il valore di fine del segno di graduazione acquisito dalla CPU 2 è 1900 anziché 900. È possibile evitare questo comportamento se si Abilita l'affinità del processore di SQL Server. In questo esempio vengono usati i calcoli temporali seguenti:

  • Valore non corretto ma segnalato: (1900-100 = 1800)/200 = 9 ms

  • Valore corretto: (900-100 = 800)/200 = 4 ms

Il valore della colonna Duration per l'evento RPC: Completed viene segnalato come 9 ms anziché 4 ms. Questo risultato è maggiore del doppio del valore corretto di 4 ms. I messaggi di avviso della deriva vengono aggiunti a SQL Server 2005 per indicare che gli output delle prestazioni menzionati in precedenza potrebbero non essere affidabili. In alcune situazioni non rilevate, SQL Server 2005 SP2 può segnalare i messaggi di avviso relativi alle operazioni seguenti:

  • Messaggi di avviso alla deriva falsa

  • La deriva può diventare decine di millisecondi senza causare un effetto di sistema evidente

È necessario prestare particolare attenzione quando si valutano gli output correlati alle prestazioni e quando si confrontano gli output correlati alle prestazioni con gli intervalli di clock del muro. Se non ci sono segni di altri problemi di prestazioni, in genere è possibile ignorare i messaggi di avviso della deriva. Ad esempio, in genere è possibile ignorare i messaggi di avviso della deriva nelle situazioni seguenti:

  • I processi vengono eseguiti come previsto.

  • Le query di SQL Server non vengono eseguite in strani modelli di durata.

  • Non vengono visualizzati segni di altri colli di bottiglia.

Tuttavia, prima di ignorare i messaggi di avviso della deriva, è consigliabile contattare il produttore per verificare che non esistano problemi di RDTSC noti. È possibile usare il contrassegno di traccia 8033 (– T8033) per tornare al comportamento della segnalazione nella versione finale originale di SQL Server 2005 e in SQL Server 2005 SP1. La versione finale originale di SQL Server 2005 e SQL Server 2005 SP1 non segnala i messaggi di avviso alla deriva. Se si esegue la versione finale originale di SQL Server 2005 o SQL Server 2005 SP1 senza problemi, è in genere possibile ignorare i messaggi.

Perché l'istruzione DELAY attese funziona correttamente? Informazioni sui processi di sistema periodici

I meccanismi di timeout non sono interessati dalla struttura ad alta risoluzione. SQL Server non usa il timer ad alta risoluzione per le attività basate su timer. Alcune attività di timeout si basano sul timer a risoluzione ridotta che usa la funzione GetTickCount . Queste attività di timeout includono il timeout di blocco, l'istruzione ritardo attesa e il rilevamento dei deadlock.

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:

938448 Un server basato su Windows Server 2003 può verificare la deriva del contatore timestamp se il server USA processori AMD Opteron dual-core o processori AMD Opteron multiprocessore

895980 I programmi che usano la funzione QueryPerformanceCounter possono essere eseguiti male in Windows Server 2003 e in Windows XPI prodotti di terze parti illustrati in questo articolo vengono prodotti da società indipendenti da Microsoft. Microsoft non garantisce, implicitamente o in altro modo, informazioni sulle prestazioni o sull'affidabilità di questi prodotti.

Serve aiuto?

Amplia le tue competenze

Esplora i corsi di formazione >

Ottieni in anticipo le nuove caratteristiche

Partecipa a Microsoft Insider >

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?

Grazie per il feedback!

×