Opzioni di configurazione e aggiornamenti consigliati per SQL Server con carichi di lavoro a prestazioni elevate

Questo articolo include un elenco di miglioramenti delle prestazioni e opzioni di configurazione disponibili per SQL Server 2012 e versioni successive.

Versione originale del prodotto: SQL Server 2014, SQL Server 2012
Numero KB originale: 2964518

Questo articolo descrive i miglioramenti delle prestazioni e le modifiche disponibili per le versioni SQL Server 2014 e SQL Server 2012 tramite vari aggiornamenti del prodotto e opzioni di configurazione. È possibile applicare questi aggiornamenti per migliorare le prestazioni dell'istanza di SQL Server. Il grado di miglioramento visualizzato dipenderà da vari fattori che includono il modello di carico di lavoro, i punti di contesa, il layout del processore (numero di gruppi di processori, socket, nodi NUMA, core in un nodo NUMA) e la quantità di memoria presente nel sistema. SQL Server team di supporto ha usato questi aggiornamenti e modifiche alla configurazione per ottenere miglioramenti ragionevoli delle prestazioni per i carichi di lavoro dei clienti che usavano sistemi hardware con diversi nodi NUMA e molti processori. Il team di supporto continuerà ad aggiornare questo articolo con altri aggiornamenti in futuro.

Sistemi di fascia alta Un sistema di fascia alta ha in genere più socket, otto core o più per socket e mezzo terabyte o più di memoria.

Nota

In SQL Server 2016 e versioni successive, molti dei flag di traccia indicati in questo articolo sono il comportamento predefinito e non è necessario abilitarli in tali versioni.

Le raccomandazioni sono raggruppate in tre tabelle come indicato di seguito:

  • La tabella 1 contiene gli aggiornamenti e i flag di traccia consigliati più di frequente per la scalabilità nei sistemi di fascia alta.
  • La tabella 2 contiene indicazioni e indicazioni per l'ottimizzazione aggiuntiva delle prestazioni.
  • La tabella 3 contiene correzioni di scalabilità aggiuntive incluse insieme a un aggiornamento cumulativo.

Tabella 1. Aggiornamenti importanti e flag di traccia per sistemi di fascia alta

Esaminare la tabella seguente e abilitare i flag di traccia nella colonna Flag di traccia dopo aver verificato che l'istanza di SQL Server soddisfi i requisiti nella colonna Versione applicabile e intervalli di compilazione.

Nota

  • Versione e compilazione applicabili indica l'aggiornamento specifico in cui è stato introdotto il flag di modifica o traccia. Se non viene specificato alcun cu, vengono inclusi tutti i cu nell'SP.

  • Versione e compilazione non applicabili indica l'aggiornamento specifico in cui il flag di modifica o traccia è diventato il comportamento predefinito. Pertanto, solo l'applicazione di tale aggiornamento sarà sufficiente per ottenere i vantaggi.

Importante

Quando si abilitano le correzioni con flag di traccia negli ambienti Always On, tenere presente che è necessario abilitare i flag di correzione e traccia in tutte le repliche che fanno parte del gruppo di disponibilità.

Scenario e sintomo da considerare Flag di traccia Intervalli di versione e compilazione applicabili Versione e intervalli di compilazione non applicabili Articolo della Knowledge Base/Collegamento al blog che fornisce altri dettagli
  • Si verificano attese CMEMTHREAD elevate.
  • SQL Server viene installato in sistemi con 8 o più core per socket.
T8048
  • SQL Server 2012 RTM al Service Pack (SP)/CU corrente
  • da SQL Server 2014 RTM a SP1
  • SQL Server 2014 SP2 a SP/CU corrente
  • SQL Server 2016 RTM a SP/CU corrente
  • SQL Server 2017 RTM a SP/CU corrente
  • Si verificano attese CMEMTHREAD elevate.
  • SQL Server viene installato in sistemi con 8 o più core per socket.
T8079 SQL Server 2014 SP2 a SP/CU corrente
  • SQL Server 2016 RTM a SP/CU corrente
  • SQL Server 2017 RTM a SP/CU corrente
  • Si usano funzionalità che si basano sulla cache del pool di log. (ad esempio, Always On)
  • SQL Server viene installato in sistemi con più socket.
T9024 Pacchetto di aggiornamento cumulativo 3 per SQL Server 2012 Service Pack da 1 a SP2 SQL Server 2014 RTM
  • SQL Server 2012 SP3 a SP/CUSQL corrente
  • Da Server 2014 SP1 a SP/CU corrente
  • SQL Server 2016 RTM a SP/CU corrente
  • SQL Server 2017 RTM a SP/CU corrente
FIX: valore elevato del contatore "attese di scrittura log" in un'istanza di SQL Server 2012 o SQL Server 2014
L'istanza di SQL Server gestisce migliaia di reimpostazioni della connessione a causa del pool di connessioni. T1236 Pacchetto di aggiornamento cumulativo 9 per SQL Server 2012 Service Pack da 1 a SP2 Aggiornamento cumulativo 1 per SQL Server 2014
  • SQL Server 2012 SP3 a SP/CUSQL corrente
  • Da Server 2014 SP1 a SP/CUSQL corrente
  • Da Server 2016 RTM a SP/CU corrente
  • SQL Server 2017 RTM a SP/CU corrente
  • Il carico di lavoro dell'applicazione prevede l'utilizzo frequente di tempdb (creazione e eliminazione di tabelle temporanee o variabili di tabella).
  • Si notano richieste utente in attesa di risorse della pagina tempdb a causa di contese di allocazione.
T1118
  • SQL Server 2012 RTM a SP/CU corrente
  • SQL Server 2014 RTM a SP/CU corrente
  • SQL Server 2016 RTM a SP/CU corrente
  • SQL Server 2017 RTM a SP/CU corrente
Miglioramenti della concorrenza per il database tempdb

NOTA Abilitare il flag di traccia e aggiungere più file di dati per il database tempdb.
  • Sono presenti più file di dati tempdb.
  • I file di dati in un primo momento vengono impostati sulle stesse dimensioni.
  • A causa di un'attività intensa, i file tempdb riscontrano una crescita e non tutti i file aumentano contemporaneamente e causano contese di allocazione.
T1117
  • SQL Server 2012 RTM a SP/CU corrente
  • SQL Server 2014 RTM a SP/CU corrente
  • SQL Server 2016 RTM a SP/CU corrente
  • SQL Server 2017 RTM a SP/CU corrente
Consigli per ridurre la contesa di allocazione nel database tempdb SQL Server
Conflitti di spinlock pesanti SOS_CACHESTORE o i piani vengono rimossi frequentemente nei carichi di lavoro di query ad hoc. T174 Nessuno
  • Le voci nella cache dei piani vengono rimosse a causa della crescita in altre cache o archivi di memoria
  • Utilizzo elevato della CPU a causa di frequenti ricompilazione di query
T8032
  • SQL Server 2012 RTM a SP/CU corrente
  • SQL Server 2014 RTM a SP/CU corrente
Nessuno
Le statistiche esistenti non vengono aggiornate di frequente a causa dell'elevato numero di righe nella tabella. T2371
  • SQL Server 2012 RTM a SP/CU corrente
  • SQL Server 2014 RTM a SP/CU corrente
Nessuno
  • Il completamento dei processi di statistiche richiede molto tempo.
  • Impossibile eseguire più processi di aggiornamento delle statistiche in parallelo.
T7471 SQL Server 2014 SP1 CU6 all'SP/CU corrente Nessuno Miglioramento delle prestazioni delle statistiche di aggiornamento con SQL 2014 & SQL 2016
Il comando CHECKDB richiede molto tempo per i database di grandi dimensioni.
  • T2562
  • T2549
    • SQL Server 2012 RTM a SP/CU corrente
    • SQL Server 2014 RTM a SP/CU corrente
    Nessuno
    Il comando CHECKDB richiede molto tempo per i database di grandi dimensioni. T2566
    • SQL Server 2012 RTM a SP/CU corrente
    • SQL Server 2014 RTM a SP/CU corrente
    Nessuno
    L'esecuzione di query simultanee del data warehouse che richiedono tempi di compilazione lunghi comporta RESOURCE_SEMAPHORE_QUERY_COMPILE attese. T6498 Pacchetto di aggiornamento cumulativo 6 per SQL Server 2014 a SP1
    • SQL Server 2014 SP2 a SP/CUSQL corrente
    • Da Server 2016 RTM a SP/CU corrente
    • SQL Server 2017 RTM a SP/CU corrente
    Si stanno risolvendo problemi specifici relativi alle prestazioni delle query. Le correzioni di Optimizer sono disabilitate per impostazione predefinita. T4199
    • da SQL Server 2012 RTM a SP4
    • SQL Server 2014 RTM alla versione più recente
    Nessuno
    Si verificano prestazioni lente usando operazioni di query con tipi di dati spaziali.
    • T6532
    • T6533
    • T6534
    • SQL Server 2012 SP3 a SP/CU corrente
    • SQL Server 2014 SP2 a SP/CU corrente
      • SQL Server 2016 RTM a SP/CU corrente
      • SQL Server 2017 RTM a SP/CU corrente
        • Le query rilevano SOS_MEMORY_TOPLEVELBLOCKALLOCATOR e cmemthread attese.
        • Lo spazio degli indirizzi virtuali disponibile per il processo di SQL Server è basso.
        T8075
        • SQL Server 2012 SP2 CU8 a SP/CU corrente
        • SQL Server 2014 RTM CU10 a SP/CU corrente
        • SQL Server 2016 RTM a SP/CU corrente
        • SQL Server 2017 RTM a SP/CU corrente
        FIX: errore di memoria insufficiente quando lo spazio degli indirizzi virtuali del processo di SQL Server è insufficiente in SQL Server
        • SQL Server viene installato in un computer con grandi quantità di memoria.
        • La creazione di nuovi database richiede molto tempo.
        T3449
        • SQL Server 2012 SP3 CU3 a SP/CU corrente
        • SQL Server 2014 RTM CU14 all'attuale RTM CU
        • SQL Server 2014 SP1 CU7 all'SP/CU corrente
        • SQL Server 2016 RTM a SP/CU corrente
        • SQL Server 2017 RTM a SP/CU corrente
        FIX: SQL Server la creazione di database in un sistema con un volume elevato di memoria richiede più tempo del previsto

        Tabella 2. Considerazioni generali e procedure consigliate per migliorare le prestazioni dell'istanza di SQL Server

        Esaminare il contenuto nella colonna Risorsa della Knowledge Base/Documentazione online e valutare l'implementazione delle linee guida nella colonna Azioni consigliate.

        Articolo della Knowledge Base/Risorsa documentazione online Azioni consigliate
        Configurare l'opzione di configurazione del server max degree of parallelism Utilizzare la stored procedure sp_configure per apportare modifiche alla configurazione per Configurare l'opzione di configurazione del server max degree of parallelism per l'istanza di SQL Server in base all'articolo della Knowledge Base.
        Limiti di capacità di calcolo per edizione di SQL Server edizione Enterprise con licenze CAL (Server + Client Access License) è limitato a 20 core per istanza di SQL Server. Il modello di licenza server basato su core non prevede limiti. Valutare la possibilità di aggiornare l'edizione di SQL Server allo SKU appropriato per sfruttare tutte le risorse hardware.
        Prestazioni lente in Windows Server quando si usa la combinazione per il risparmio di energia "bilanciata" Esaminare l'articolo e collaborare con l'amministratore di Windows per implementare una delle soluzioni annotate nella sezione "Risoluzione" dell'articolo.
        Assegnare manualmente i nodi NUMA ai gruppi K.
        Ottimizzare per carichi di lavoro ad hocFORCED PARAMETERIZATION Le voci nella cache dei piani vengono rimosse a causa della crescita in altre cache o archivi di memoria. È anche possibile che si verifichi lo sfratto della cache dei piani quando la cache raggiunge il numero massimo di voci. Oltre al flag di traccia 8032 descritto in precedenza, considerare l'opzione del server optimize for ad hoc workloads (Ottimizza per carichi di lavoro ad hoc ) e l'opzione FORCED PARAMETERIZATION database (DATABASE FORCED PARAMETERIZATION ).
        Come ridurre il paging della memoria del pool di buffer nella configurazione SQL ServerMemory e le considerazioni sul ridimensionamento in SQL Server 2012 e versioni successive Assegnare il diritto utente Enable the Lock Pages in Memory Option (Windows) all'account di avvio del servizio SQL. Vedere Come abilitare la funzionalità "pagine bloccate" in SQL Server 2012. Impostare la memoria massima del server su circa il 90% della memoria fisica totale. Assicurarsi che l'impostazione delle opzioni di configurazione della memoria del server conti per la memoria solo dai nodi configurati per l'uso delle impostazioni di affinity mask.
        SQL Server e pagine grandi spiegate...Opzioni di ottimizzazione per SQL Server durante l'esecuzione in carichi di lavoro a prestazioni elevate È consigliabile abilitare TF 834 se si dispone di un server con una grande quantità di memoria, in particolare con un carico di lavoro analitico o di data warehousing. Tenere presente che TF 834 non è consigliato se si usano indici columnstore.
        Descrizione delle opzioni "access check cache bucket count" e "access check cache quota" disponibili nella stored procedure sp_configure Usare le opzioni di configurazione del server della cache di controllo di accesso per configurare questi valori in base alle raccomandazioni contenute nell'articolo della Knowledge Base. I valori consigliati per i sistemi di fascia alta sono i seguenti:
        "access check cache bucket count": 256
        "access check cache quota": 1024

        Hint per la query di concessione della memoriaALTER WORKLOAD GROUP Se sono presenti molte query che esauriscono le concessioni di memoria di grandi dimensioni, ridurre request_max_memory_grant_percent per il gruppo di carico di lavoro predefinito nella configurazione di Resource Governor dal valore predefinito del 25% a un valore inferiore. Sono disponibili nuove opzioni di concessione della memoria di query (min_grant_percent e max_grant_percent) in SQL Server
        Inizializzazione immediata dei file Collaborare con l'amministratore di Windows per concedere all'account del servizio SQL Server il diritto utente "Esegui attività di manutenzione del volume" in base alle informazioni nell'argomento Documentazione online.
        Considerazioni sulle impostazioni "autogrow" e "autoshrink" in SQL Server Controllare le impostazioni correnti del database e assicurarsi che siano configurate in base alle raccomandazioni contenute nell'articolo della Knowledge Base.
        Checkpoint di database (SQL Server) Valutare la possibilità di abilitare checkpoint indiretti nei database utente per ottimizzare il comportamento di I/O in SQL Server 2012 e 2014.
        CORREZIONE: Sincronizzazione lenta quando i dischi hanno dimensioni di settore diverse per i file di log della replica primaria e secondaria in ambienti SQL Server gruppo di disponibilità e logshipping Se si dispone di un gruppo di disponibilità in cui il log delle transazioni nella replica primaria si trova in un disco con dimensioni del settore di 512 byte e il log delle transazioni della replica secondaria si trova in un'unità con dimensioni del settore 4K, potrebbe verificarsi un problema in cui la sincronizzazione è lenta. In questi casi, l'abilitazione di TF 1800 dovrebbe correggere il problema. Per altre informazioni, vedere Flag di traccia 1800.
        Se il SQL Server non è già associato alla CPU e un sovraccarico compreso tra l'1,5% e il 2% è trascurabile per i carichi di lavoro, è consigliabile abilitare TF 7412 come flag di traccia di avvio. Questo flag abilita la profilatura leggera in SQL Server 2014 SP2 o versioni successive, che consente di eseguire la risoluzione dei problemi delle query dinamiche negli ambienti di produzione.

        Tabella 3. Correzioni delle prestazioni incluse in un aggiornamento cumulativo

        Esaminare la descrizione nella colonna Sintomi e applicare gli aggiornamenti necessari nella colonna Aggiornamento obbligatorio negli ambienti applicabili. Per altre informazioni sui rispettivi problemi, vedere l'articolo della Knowledge Base. Queste raccomandazioni non richiedono l'abilitazione di flag di traccia aggiuntivi come parametri di avvio. L'applicazione dell'aggiornamento cumulativo o del Service Pack più recente che include queste correzioni è sufficiente per ottenere il vantaggio.

        Nota

        Il nome cu nella colonna Aggiornamento obbligatorio fornisce il primo aggiornamento cumulativo di SQL Server che risolve il problema. Un aggiornamento cumulativo contiene tutti gli hotfix e tutti gli aggiornamenti inclusi nella versione di aggiornamento SQL Server precedente. Pertanto, è consigliabile installare l'aggiornamento cumulativo più recente per risolvere i problemi.

        Sintomi Aggiornamento obbligatorio Articolo della Knowledge Base
        Le scritture eager durante l'operazione Select-into per le tabelle temporanee causano problemi di prestazioni. SQL Server 2012 SP2 CU1
        SQL Server 2012 SP1 CU10
        CORREZIONE: prestazioni scarse durante l'I/O quando si esegue l'operazione select into temporary table in SQL Server 2012
        Si verifica PWAIT_MD_RELATION_CACHE o MD_LAZYCACHE_RWLOCK si attende l'interruzione di un'operazione ALTER INDEX ... ONLINE di query. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        FIX: le prestazioni diminuiscono dopo un alter index... L'operazione ONLINE viene interrotta in SQL Server 2012 o SQL Server 2014
        Le query improvvisamente funzionano male sull'edizione standard del prodotto. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        FIX: i thread non sono pianificati in modo uniforme in SQL Server 2012 o SQL Server 2014 Standard Edition
        Prestazioni lente a causa di un calo improvviso dell'aspettativa di vita della pagina. SQL Server 2012 SP1 CU4 CORREZIONE: potrebbero verificarsi problemi di prestazioni in SQL Server 2012
        Utilizzo elevato della CPU da parte del monitoraggio delle risorse nei sistemi con configurazione NUMA, memoria di grandi dimensioni e "memoria massima del server" impostata su un valore basso. SQL Server 2012 SP1 CU3 CORREZIONE: picco della CPU quando non è presente alcun carico in un server dopo l'installazione di SQL Server 2012 nel server
        L'utilità di pianificazione senza rendimento durante l'allocazione della memoria per l'ordinamento esegue concessioni di memoria di grandi dimensioni associate nei sistemi in cui è installata una grande quantità di memoria. SQL Server 2012 SP1 CU2 FIX: errore 17883 quando si esegue una query in un server con molte CPU e una grande quantità di memoria in SQL Server 2012 o in SQL Server 2008 R2
        Utilità di pianificazione senza rendimento quando l'operatore di ordinamento attraversa molti bucket nel pool di buffer nei sistemi con memoria di grandi dimensioni. SQL Server 2012 SP1 CU1 FIX: messaggio di errore "Process appears to non yielding on Scheduler" quando si esegue una query in SQL Server 2012
        Utilizzo elevato della CPU quando si eseguono query simultanee che richiedono molto tempo per la compilazione in sistemi con più nodi NUMA e molti core. SQL Server 2012 SP2 CU1
        SQL Server 2014 RTM CU2
        CORREZIONE: il carico di lavoro di compilazione di query intenso non viene ridimensionato con un numero crescente di core nell'hardware NUMA e comporta la saturazione della CPU in SQL Server
        Il completamento delle allocazioni di memoria per gli operatori di ordinamento richiede molto tempo nei sistemi NUMA con memoria di grandi dimensioni a causa delle allocazioni remote dei nodi. SQL Server 2012 SP1 CU3 CORREZIONE: SQL Server problemi di prestazioni negli ambienti NUMA
        Errori di memoria insufficiente quando SQL Server viene installato in un computer NUMA con una grande quantità di RAM e SQL Server ha molte pagine esterne. SQL Server 2012 RTM CU1 FIX: Errore di memoria insufficiente quando si esegue un'istanza di SQL Server 2012 in un computer che usa NUMA
        Contesa spinlock su SOS_CACHESTORE e SOS_SELIST_SIZED_SLOCK quando si compila un indice sul tipo di dati spaziali in una tabella di grandi dimensioni. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        FIX: prestazioni lente in SQL Server 2012 o SQL Server 2014 quando si compila un indice su un tipo di dati spaziali di una tabella di grandi dimensioni
        Tipo di attesa CMEMTHREAD elevato quando si compila un indice su un tipo di dati spaziali in tabelle di grandi dimensioni. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        FIX: prestazioni lente in SQL Server quando si compila un indice su un tipo di dati spaziali di una tabella di grandi dimensioni in un'istanza di SQL Server 2012 o SQL Server 2014
        Problemi di prestazioni dovuti alle attese di SOS_PHYS_PAGE_CACHE CMEMTHREAD e durante l'allocazione della memoria nei computer con memoria di grandi dimensioni. SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        CORREZIONE: Si verificano problemi di prestazioni negli ambienti NUMA durante l'elaborazione di pagine esterne in SQL Server 2012 o SQL Server 2014
        Il comando CHECKDB richiede molto tempo per i database di grandi dimensioni. Pacchetto di aggiornamento cumulativo 6 per SQL Server 2014 FIX: il comando DBCC CHECKDB/CHECKTABLE potrebbe richiedere più tempo in SQL Server 2012 o SQL Server 2014

        Note importanti

        Riferimenti

        Si applica a

        • SQL Server 2014 Enterprise
        • SQL Server 2014 Enterprise Core
        • SQL Server 2014 Business Intelligence
        • SQL Server 2014 Developer
        • SQL Server 2014 R2
        • SQL Server 2014 Web
        • SQL Server 2014 Express
        • SQL Server 2012 Business Intelligence
        • SQL Server 2012 Developer
        • SQL Server 2012 Enterprise
        • SQL Server 2012 Standard
        • SQL Server 2012 Web
        • SQL Server 2012 Enterprise Core