Ottimizza l'utilizzo elevato di memoria nelle istanze

Questo documento spiega come rivedere e ottimizzare un'istanza Cloud SQL per SQL Server se il motore per suggerimenti delle istanze con underprovisioning identifica un'istanza con un consumo di memoria elevato.

Memoria SQL Server

La memoria 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 questi oggetti in base all'utilizzo della memoria. Le cache includono pool di buffer e cache dei piani.

Memoria fissa

La memoria fissa può crescere e ridursi. Si riduce solo quando non in uso, ad esempio quando il numero di connessioni cala o il numero di query in esecuzione diminuisce. È diverso dalle cache. Se non è disponibile memoria fissa sufficiente, SQL Server può esaurire la memoria. La memoria fissa include memoria di connessione e concessioni di memoria.

Overhead di SQL Server

L'overhead di SQL Server include thread e stack.

OLTP in memoria

OLTP in memoria include tabelle e gruppi di file 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 scoprire di più su memory.memory.limitmb, consulta la documentazione Microsoft.

Devi impostare il limite di max server memory su un valore idoneo. In SQL Server, se il criterio max server memory non è impostato, le pagine del database possono consumare la maggior parte della memoria nelle vicinanze e fino al 100%. A volte questo può essere fuorviante.

Opzioni di ottimizzazione della memoria

Per determinare se un'istanza richiede una maggiore ottimizzazione della memoria:

  • Imposta il valore di max server memory. In generale, è consigliabile impostare max server memory su circa l'80% per evitare che SQL Server utilizzi tutta la memoria disponibile. Per le istanze con grandi quantità di memoria, l'80% potrebbe essere troppo basso e questo potrebbe portare a uno spreco di memoria.

  • Monitora Page life expectancy

    Page life expectancy indica per quanto tempo, in secondi, la pagina meno recente 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 affrontando un utilizzo elevato della memoria. Esegui questa query per monitorare Page 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 Memory Grants Pending

    Memory Grants Pending specifica il numero totale di processi in attesa di una concessione di memoria dell'area di lavoro. Esegui questa query per verificare Memory Grants Pending. Se questa query mostra costantemente concessioni in attesa, significa che l'utilizzo della memoria è elevato. Puoi ridurle eseguendo query sul database in attesa e ottimizzando le istruzioni 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'
    

Passaggi successivi