Come posso risolvere i problemi relativi alla scarsa memoria che è possibile liberare nella mia istanza RDS per SQL Server?

8 minuti di lettura
0

Come posso risolvere i problemi relativi alla scarsa memoria che è possibile liberare nella mia istanza Amazon Relational Database (Amazon RDS) per SQL Server?

Breve descrizione

L’aspetto della scarsa memoria che è possibile liberare causa tempi di inattività imprevisti sull'istanza. Pertanto, è importante monitorare l'utilizzo della memoria sull'istanza e intraprendere azioni correttive.

La memoria che è possibile liberare è la quantità di memoria (RAM) disponibile sull'istanza RDS. La quantità totale di memoria disponibile su un'istanza Amazon RDS dipende dalla classe di istanza. Ad esempio, la classe di istanza db.r5.8xlarge fornisce 32 vCPU e 256 GiB di memoria. Se si esegue il provisioning di un'istanza RDS con la classe di istanza db.r5.8xlarge, la memoria totale sulla classe di istanza (256 GiB) viene condivisa dai seguenti componenti:

  • Il sistema operativo
  • Processi Amazon RDS
  • Il motore di database
  • Thread di lavoro
  • Applicazioni della suite di Business Intelligence (SSIS, SSAS, SSRS) e così via.

Per ulteriori informazioni su come SQL Server utilizza la memoria, vedere la guida all'architettura di gestione della memoria nel sito web della documentazione Microsoft.

Risoluzione

Monitora l'utilizzo della memoria sull'istanza

Metriche di Amazon CloudWatch

Monitora le metriche di Amazon CloudWatch per FreeableMemory per identificare i casi di memoria insufficiente. Insieme a FreeableMemory, è possibile monitorare quanto segue per identificare un aumento del carico di lavoro quando la memoria disponibile è insufficiente:

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

Monitoraggio potenziato

Il monitoraggio potenziato può essereattivato con diverse granularità, ad esempio 1, 5, 10, 15, 30 o 60 secondi per monitorare le metriche del sistema operativo per Microsoft SQL Server. È consigliabile impostare la granularità su 1 o 5 secondi (l'impostazione predefinita è 60 secondi). Puoi creare allarmi CloudWatch per monitorare l‘uso di memoria della tua istanza di database Amazon RDS per SQL Server tramite il monitoraggio potenziato

Risoluzione dei problemi relativi alla scarsa memoria che è possibile liberare

Per risolvere i problemi relativi alla scarsa memoria che è possibile liberare, procedi come segue:

Limita la memoria utilizzata dall'istanza RDS

Limita la memoria utilizzata dall'istanza RDS impostando la memoria massima del server su un valore che non comporti una pressione della memoria a livello di sistema. Puoi determinare il valore massimo della memoria del server per la tua istanza utilizzando la seguente formula:

max_server_memory = total_RAM - (1 GB per il sistema operativo + memory_basis_amount_of_RAM_on_the_server)

Total_RAM è uguale alla memoria della classe di istanza in cui il memory_basis_amount_of_RAM_on_the_server è determinato come segue:

  • Se la RAM sul server è compresa tra 4 GB e 16 GB: lascia 1 GB per 4 GB di RAM. Ad esempio, per un server con 16 GB, lascia 4 GB.
  • Se la RAM sul server è superiore a 16 GB: lascia 1 GB per 4 GB di RAM fino a 16 GB e 1 GB per 8 GB di RAM superiore a 16 GB.

Ad esempio, se un server dispone di 64 GB di RAM, il calcolo è il seguente:

  • 1 GB per il sistema operativo
  • Fino a 16 GB di RAM: 16/4 = 4 GB
  • RAM residua superiore a 16 GB: (64-16)/8 = 6
  • RAM totale da lasciare: 1 + 4 + 6 = 11 GB
  • max_server_memory: 64 - 11 = 53 GB

Note:

  • Se utilizzi SSIS, SSAS o SSRS sull'istanza, allora max_server_memory deve essere regolato per adattarsi a questi componenti.
    Esempio: si desidera utilizzare SSRS con l'istanza RDS. Imposta il valore di massima memoria SSRS al 10% (percentuale della memoria totale dell'istanza DB). Si tratta di circa 6,4 GiB su un'istanza con 64 GiB di memoria. Il valore max_server_memory dovrebbe essere di circa 46 GiB (64-11-6,4).
  • Dopo la configurazione iniziale di max_server_memory, FreeableMemory deve essere costantemente monitorato per decidere se aumentare o diminuire la memoria allocata.

Per modificare max_server_memory, configura il valore utilizzando un gruppo di parametri personalizzato. Il valore per max_server_memory deve essere fornito in MB.

Nota: il parametro max_server_memory è un parametro dinamico. Pertanto, non è necessario un riavvio per rendere effettive le modifiche.

Controlla le connessioni al database

Ogni connessione al database effettuata all'istanza richiede un'allocazione di memoria all'esterno del pool di buffer per i thread di lavoro. Pertanto, un picco di DatabaseConnections può causare un calo della memoria che è possibile liberare.

Verifica se i componenti SSIS, SSAS o SSRS sono utilizzati sull'istanza DB

Utilizzando il gruppo di opzioni Amazon RDS per SQL Server, identifica se i componenti SSIS, SSAS o SSRS vengono utilizzati sull'istanza di database. La memoria utilizzata da questi componenti esiste al di fuori dell'impostazione max_server_memory. Se non utilizzi queste funzionalità, rimuovile modificando il gruppo di opzioni. La rimozione delle suddette funzionalità riduce l'ingombro della memoria sull'istanza.

Monitora l'istanza DB utilizzando Performance Insights

L’utilizzo di Performance Insights ti permette di monitorare l'istanza di database per l'analisi delle prestazioni del database. È possibile utilizzare la dashboard di Performance Insights per monitorare il carico del database, le attese, le query, gli host, gli utenti e così via. Il monitoraggio di questi elementi consente di identificare i potenziali colli di bottiglia che rallentano l'istanza.

Esegui una manutenzione regolare sull'istanza DB

Esegui una manutenzione degli indici regolare e mantieni aggiornate le statistiche. Indici altamente frammentati possono causare un aumento dell'attività di I/O, con conseguente maggiore consumo di memoria. Allo stesso modo, le statistiche obsolete possono causare una stima imprecisa della cardinalità che porta alla selezione di un piano di query non ottimale.

Nota: è consigliabile eseguire la manutenzione degli indici e delle statistiche durante un periodo non di punta o durante una finestra di manutenzione.

Monitora l'aspettativa di vita della pagina e la percentuale di riscontri nella cache del buffer

L'aspettativa di vita della pagina (PLE) indica il numero di secondi in cui una pagina rimane nel pool di buffer senza indicizzazione.

Percentuale di riscontri nella cache del buffer (Buffer Cache Hit Ratio, BCHR) è la percentuale di richieste di pagina soddisfatte dalle pagine di dati del pool di buffer.

Il monitoraggio di PLE e BCHR identifica la pressione della memoria. Per monitorare queste metriche utilizzando Performance Insights, procedi come segue:

  1. Apri la console di Amazon RDS.
  2. Seleziona Performance Insights.
  3. Seleziona l'istanza RDS per SQL Server che desideri monitorare.
  4. Imposta l'intervallo di tempo per il quale desideri esaminare le metriche, quindi seleziona Gestisci metriche.
  5. Seleziona Metriche del database, Aspettativa di vita della pagina, Percentuale di riscontri nella cache del buffer.

Per prestazioni ottimali, i valori di queste metriche devono essere i più alti possibile. Puoi monitorare queste metriche utilizzando Performance Insights. Potresti notare che i valori di queste metriche sono costantemente bassi per un periodo di tempo. In tal caso, regola le query di accesso ai dati o aumenta la classe di istanza per fornire più memoria.

Quando c'è una pressione di memoria sull'istanza, insieme a bassi livelli di PLE e BCHR, l'attesa di PAGEIOLATCH aumenta. Ciò significa che SQL Server è in attesa che una pagina venga recuperata dal disco e caricata in memoria. Inoltre, l'attesa di RESOURCE_SEMAPHORE potrebbe essere notata quando le richieste di memoria di una query non possono essere soddisfatte a causa di una riduzione della memoria. Ciò causa un aumento dell'utilizzo della CPU, perché le pagine di dati non vengono memorizzate nella cache abbastanza a lungo. In questo caso, SQL Server deve accedere ripetutamente al disco per accedere ai dati che causano problemi di prestazioni.

Identifica le query utilizzando la maggior parte delle risorse

Utilizzando Performance Insights, acquisisci le query utilizzando la maggior parte delle risorse e ottimizzale per migliorare le prestazioni.

Seleziona la dimensione dell'istanza corretta per il tuo carico di lavoro

La quantità di memoria su un'istanza dipende dal tipo di istanza. È importante selezionare una classe di istanza con risorse adeguate in modo che l'istanza DB abbia risorse sufficienti per il carico di lavoro. Un'istanza con meno risorse riscontra problemi di prestazioni e un'istanza sovradimensionata spreca risorse.

Valuta l'utilizzo delle risorse

Valuta l'utilizzo delle risorse sull'istanza monitorando metriche come FreeableMemory, Aspettativa di vita della pagina, Percentuale di riscontri nella cache del buffer e così via. Se si verifica un aumento significativo del volume di dati sull'istanza, aumenta il valore max_server_memory. Assicurati di aumentare il valore max_server_memory in proporzione alla modifica del volume dei dati per mantenere lo stesso livello di prestazioni sull'istanza.

Note: è possibile utilizzare strumenti nativi di SQL Server come report e DMV per identificare i componenti utilizzando la memoria all'interno di SQL Server. Utilizzando SQL Server Management Studio (SSMS), è possibile esaminare l'utilizzo della memoria di SQL Server:

  1. Apri SQL Server Management Studio (SSMS) e connettiti alla tua istanza RDS per SQL Server.
  2. In Esplora oggetti, fai clic con il pulsante destro del mouse sul nome dell'endpoint dell'istanza.
  3. Seleziona Report,Report standard, Consumo di memoria.

Inoltre, è possibile interrogare sys.dm_os_memory_clerks DMV per identificare i componenti che utilizzano la massima memoria all'interno di SQL Server.