Ottimizza l'utilizzo elevato di memoria nelle istanze

Questo documento spiega come esaminare e ottimizzare un'istanza Cloud SQL per SQL Server se questa istanza viene identificata dal motore per suggerimenti istanze con provisioning insufficiente come istanza con un elevato consumo di memoria.

Memoria 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 buffer pool e 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. È diverso 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

OLTP in-memory include tabelle in-memory e filegroup in-memory.

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 ha bisogno di 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 formula di utilizzo max_server_memory (mb) descritta nelle best practice per evitare che SQL Server consumi tutta la memoria.

    Per ulteriori informazioni, vedi Flag speciali.

  • Monitora il flag Page life expectancy.

    Page life expectancy indica il tempo, in secondi, in cui 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 riscontrando un utilizzo elevato della memoria. Esegui la seguente 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 il flag Memory Grants Pending.

    Memory Grants Pending specifica il numero totale di processi in attesa di una concessione di memoria del workspace. Esegui la seguente query per controllare Memory Grants Pending. Se questa query mostra costantemente concessioni in attesa, significa che l'utilizzo della memoria è elevato. Puoi ridurlo eseguendo query sui tempi di attesa 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'
        

Passaggi successivi