Come posso risolvere i problemi relativi all'utilizzo elevato della CPU sulla mia istanza RDS per SQL Server?

7 minuti di lettura
0

Sto riscontrando un utilizzo elevato della CPU sul mio Amazon Relational Database Service (Amazon RDS) per l'istanza database di Microsoft SQL Server. Come posso risolvere il problema dell'utilizzo elevato della CPU?

Breve descrizione

I motivi più comuni per l'aumento dell'utilizzo della CPU sono i seguenti:

  • Carichi di lavoro pesanti avviati dall'utente, più interrogazioni simultanee o transazioni di lunga durata
  • Utilizzo di una classe di istanza con provisioning insufficiente per il carico di lavoro
  • Statistiche obsolete e frammentazione degli indici o indici mancanti
  • Query con possibilità di miglioramento
  • Blocchi e deadlock
  • Parallelismo
  • Compilazione e ricompilazione frequenti
  • Sniffing dei parametri
  • Esaurimento del thread

Per identificare l'origine dell'utilizzo della CPU nella tua istanza Amazon RDS per SQL Server, utilizza i seguenti strumenti:

  • Parametri di Amazon CloudWatch per Amazon RDS
  • Monitoraggio avanzato
  • Performance Insights
  • Strumenti nativi per SQL Server

Dopo aver identificato l'origine, puoi analizzare e ottimizzare il carico di lavoro per ridurre l'utilizzo della CPU.

Risoluzione

Parametri di Amazon CloudWatch per Amazon RDS

Puoi utilizzare i parametri di CloudWatch per identificare i modelli di CPU per periodi prolungati. Confronta i grafici per WriteIOPs, ReadIOPs, ReadThroughput e WriteThroughput, insieme all'utilizzo della CPU per trovare i momenti in cui il carico di lavoro ha causato un utilizzo elevato della CPU. Per ulteriori informazioni, consulta i parametri di Amazon CloudWatch per Amazon RDS.

Se stai utilizzando un'istanza della classe di istanza t2 o t3, controlla se la tua istanza ha un provisioning insufficiente. Se riscontri una riduzione costante nel saldo del credito della CPU e un aumento costante nell'utilizzo del credito della CPU, i core della CPU non sono sufficienti per il carico di lavoro.

Dopo aver identificato l'intervallo di tempo, puoi esaminare i dati di Monitoraggio avanzato associati alla tua istanza DB. Puoi impostare il monitoraggio avanzato per raccogliere dati a intervalli di 1, 5, 10, 15, 30 o 60 secondi. In questo modo, puoi raccogliere dati a un livello più granulare rispetto a CloudWatch.

Monitoraggio avanzato

Se hai configurato il Monitoraggio avanzato, puoi utilizzarlo per monitorare il sistema operativo in esecuzione sulla tua istanza DB. Per verificare l'utilizzo della CPU tramite il monitoraggio avanzato, procedi come segue:

  1. Nella console RDS, seleziona Databases (Database), quindi scegli il tuo database.
  2. Nella scheda Monitoring (Monitoraggio), seleziona OS process list (Elenco dei processi del sistema operativo) dal menu a discesa Monitoring (Monitoraggio). Verifica se l'utilizzo elevato della CPU è determinato dall'OS (Sistema operativo), da un processo RDS, da un processo SQL Server o da un processo SQL Agent. Puoi anche controllare la percentuale di CPU e la percentuale di memoria utilizzate da questi processi.
  3. Seleziona i parametri dall'elenco a discesa Enhanced monitoring (Monitoraggio avanzato) per controllare i dati di monitoraggio delle prestazioni. Questi parametri includono CPU idle (CPU inattiva), Kernel e User (Utente). Questi parametri indicano se la CPU sta trascorrendo la maggior parte del tempo inattiva, eseguendo il kernel o eseguendo processi utente.
  4. Visualizza altri parametri selezionando Manage Graphs (Gestisci grafici). Dopodiché, puoi selezionare i parametri relativi all'I/O e alla velocità di trasmissione effettiva del disco. Questi parametri includono Read/s (Lettura/s), Write/s (Scrittura/s), Read Kb/s (Lettura Kb/s) e Write Kb/s (Scrittura Kb/s). Inoltre, puoi visualizzare i parametri relativi alla memoria, tra cui Available Memory (Memoria disponibile), SQL Server Memory (Memoria SQL disponibile) e Total Memory (Memoria totale). Questi parametri sono indicativi perché se la tua CPU impiega molto tempo ad aspettare le risorse, potresti riscontrare un utilizzo elevato della CPU.

Per ulteriori informazioni, consulta la sezione Visualizzazione dei parametri del sistema operativo nella console RDS.

Performance Insights

Puoi utilizzare gli Approfondimenti sulle prestazioni di Amazon RDS per identificare le query responsabili del carico del database. Per fare questo,

  1. controlla la scheda SQL corrispondente all'intervallo di tempo che desideri analizzare.
  2. Identifica la query che impiega più tempo.
  3. Controlla la query che richiedono un uso intensivo delle risorse e gli eventi di attesa osservati durante questo periodo. Di seguito sono riportati gli eventi di attesa che spesso sono associati a un utilizzo elevato della CPU:
    SOS_SCHEDULER_YIELD: questa attesa indica che un worker ha ceduto la precedenza a un altro worker per l'esecuzione. Un numero elevato di attese con tempi di attesa bassi di solito indica query legate alla CPU. I tempi di attesa elevati potrebbero essere causati da problemi di precedenza. Se qui noti un tempo di attesa lungo, devi esaminare ulteriormente il carico di lavoro.
    Se SOS_SCHEDULER_YIELD è il tipo di attesa prevalente, potrebbe indicare che il problema è la pressione sulla CPU. Esamina il tipo di carico di lavoro ed esegui ulteriori ottimizzazioni.
    CXPACKET e CXCONSUMER: gli eventi di attesa relativi al parallelismo di solito non sono un problema. Tuttavia, se gli eventi di attesa sono frequenti e influiscono sulle prestazioni, esamina le query e imposta valori adeguati per la soglia di costo del parallelismo. Assicurati che SQL Server stia scegliendo il parametro di parallelismo a basso costo nel gruppo di parametri.
    Puoi anche aumentare il MAXDOP (grado massimo di parallelismo) a 1 a livello di query o di istanza in base al tuo caso d'uso.
    ThreadPool: questo evento di attesa indica l'esaurimento del thread. Se la tua classe di istanza è in grado di gestirla, aumenta il parametro max worker threads (numero massimo di thread worker). Potrebbero verificarsi attese di ThreadPool a causa dell'eccessivo utilizzo di thread. I thread eccessivi sono solitamente dovuti a blocchi, carichi di lavoro elevati o un numero elevato di query parallele. In alternativa, questa attesa potrebbe essere causata da una configurazione errata del parametro max worker threads (numero massimo di thread worker).
  4. Controlla i Database Metrics (Parametri del database) per le richieste in batch, le compilazioni SQL e le ricompilazioni SQL. Controlla se le query vengono compilate più volte, il che indica query improvvisate. Controlla anche se le query vengono ricompilate frequentemente per un determinato batch, il che indica l'utilizzo di with recompile (con ricompilazione) nel codice della query. Entrambe le circostanze causano un utilizzo elevato della CPU.

Strumenti nativi per SQL Server

Query specifiche per la risoluzione dei problemi della CPU: per ulteriori informazioni, consulta la pagina Risolvere i problemi di utilizzo elevato della CPU in SQL Server sul sito Web della documentazione Microsoft. Concentrati sulle query che richiedono un uso intensivo della CPU, sulle statistiche di aggiornamento, sugli indici mancanti e sullo sniffing dei parametri.

Verifica che il piano di esecuzione non presenti query con prestazioni scadenti ed esegui ulteriori ottimizzazioni. Per ulteriori informazioni, consulta la pagina Visualizzare un piano di esecuzione effettivo sul sito Web della documentazione Microsoft.

Risolvi i problemi di blocchi e deadlock eccessivi utilizzando query ed eventi estesi. Per ulteriori informazioni, consulta la pagina Comprendere e risolvere i problemi di blocco di SQL Server sul sito Web della documentazione Microsoft.

Nota: non è possibile utilizzare il metodo normale per salvare i file XEL durante la configurazione degli eventi estesi in RDS per SQL Server. Per istruzioni su come configurare gli eventi estesi, consulta la sezione Configurazione di eventi estesi in Amazon RDS per SQL Server.

Utilizza i report di SQL Server per ottenere i report sulle prestazioni disponibili in modo nativo in SQL Server. Utilizza questi report per ottimizzare il tuo carico di lavoro. Per ulteriori informazioni, consulta la pagina Pannello di controllo delle prestazioni sul sito Web della documentazione Microsoft.