Questo documento spiega come esaminare e ottimizzare un'istanza Cloud SQL per SQL Server se l'istanza è stata identificata dal motore per suggerimenti per le istanze con provisioning insufficiente come istanza con un consumo elevato di memoria.
Memoria di SQL Server
La memoria di SQL Server può essere suddivisa in:
Cache
Si tratta di oggetti su un disco che possono essere ricaricati, come pagine di database e stored procedure. Di conseguenza, SQL Server può aumentare e ridurre le dimensioni di questi oggetti in base all'utilizzo della memoria. Le cache includono i pool di buffer e le cache dei piani.
Memoria fissa
La memoria fissa può aumentare e diminuire. Si riduce solo quando non è in uso, ad esempio quando il numero di connessioni diminuisce o il numero di query in esecuzione diminuisce. È diversa dalle cache. Se la memoria fissa non è sufficiente, SQL Server può esaurire la memoria. La memoria fissa include la memoria di connessione e le concessioni di memoria.
Overhead di SQL Server
L'overhead di SQL Server include thread e stack.
OLTP in memoria
L'OLTP in memoria include tabelle in memoria e filegroup in memoria.
Il consumo di memoria da parte di SQL Server è controllato impostando maximum server memory e memory.memory.limitmb. Il parametro memory.memory.limitmb viene impostato automaticamente da Cloud SQL.
Per saperne di più su memory.memory.limitmb, consulta la documentazione di Microsoft.
Opzioni di ottimizzazione della memoria
Per determinare se un'istanza richiede un'ulteriore ottimizzazione della memoria:
- Controlla il valore del flag
max server memory (mb).Ti consigliamo di lasciare che Cloud SQL gestisca il valore di questo flag. Se devi gestire manualmente questo valore, utilizza la
max_server_memory (mb)formula di utilizzo descritta in Best practice per impedire a SQL Server di consumare tutta la memoria.Per ulteriori informazioni, vedi Flag speciali.
- Monitora il flag
Page life expectancy.Page life expectancyindica la quantità di tempo, in secondi, durante la quale la pagina più vecchia rimane nel pool di buffer. Questo valore deve essere superiore a 300, come consigliato da Microsoft. Se scende costantemente sotto 300, potrebbe indicare che l'istanza sta riscontrando un utilizzo elevato della memoria. Esegui la seguente query per monitorarePage life expectancy.SELECT [object_name], [counter_name], [cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy'
- Controlla il flag
Memory Grants Pending.Memory Grants Pendingspecifica il numero totale di processi in attesa di una concessione di memoria del workspace. Esegui la seguente query per controllareMemory Grants Pending. Se questa query mostra costantemente le concessioni in attesa, indica un utilizzo elevato della memoria. Puoi ridurlo eseguendo una query sulle attese del database e ottimizzando qualsiasi istruzione in attesa di memoria.SELECT @@SERVERNAME AS [Server Name], RTRIM([object_name]) AS [Object Name], cntr_value AS [Memory Grants Pending] FROM sys.dm_os_performance_counters WITH(NOLOCK) WHERE [object_name] LIKE N'%Memory Manager%' -- Handles named instances AND counter_name = N'Memory Grants Pending'
Utilizzare Esplora metriche per identificare la memoria utilizzata
Puoi esaminare la memoria utilizzata dell'istanza con la
database/memory/components.usage metrica in
Esplora metriche.