MSSQLSERVER_17890

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 17890
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico SRV_WS_TRIMMED
Testo del messaggio È stata inserita una parte significativa della memoria del processo di SQL Server. Ciò può comportare una riduzione delle prestazioni. Durata: %d secondi. Working set (KB): %I64d, commit completato (KB): %I64d, utilizzo memoria: %d%%.

Spiegazione

È possibile che venga visualizzato il messaggio di errore seguente nel log degli errori di SQL Server o nel registro eventi dell'applicazione di Windows.

È stata inserita una parte significativa della memoria del processo di SQL Server. Ciò può comportare una riduzione delle prestazioni. Durata: 0 secondi. Working set (KB): 3383250, commit (KB): 9112480, utilizzo della memoria: 37%.

È anche possibile notare un calo improvviso delle prestazioni con l'esecuzione delle query e di tutte le altre operazioni nell’istanza di SQL Server.

Causa

SQL Server monitora le varie informazioni correlate alle memorie relative al processo di SQL Server. In questo caso è stato rilevato che il working set del processo è inferiore al 50% della memoria del processo di cui è stato eseguito il commit. Di conseguenza questo avviso viene stampato. Normalmente a causare l’avviso è una di queste situazioni:

  • Il sistema operativo estrae grandi parti della memoria di cui è stato eseguito il commit in SQL Server nel file di paging.
  • Ciò può essere dovuto a un aumento improvviso della domanda di memoria da parte di altre applicazioni o delle esigenze del sistema operativo.
  • Questo problema può verificarsi anche quando determinati driver di dispositivo richiedono allocazioni di memoria contigue per le proprie esigenze.

Azione utente

È possibile impedire al sistema operativo Windows di eseguire il paging della memoria del pool di buffer del processo di SQL Server bloccando la memoria allocata per il pool di buffer in memoria fisica. Per bloccare la memoria, assegnare il diritto utente Blocco pagine in memoria all'account utente usato come account di avvio del servizio SQL Server. Tuttavia, prima di implementare questa soluzione, rivedere le sezioni relative aimotivi per cui viene eseguito il page out della memoria di SQL Server e agli aspetti importanti da considerare prima di assegnare il diritto utente "Blocco delle pagine in memoria" per un'istanza di SQL Server

Nota

L'uso delle pagine di blocco in memoria garantisce che la memoria gestita da SQL Server non venga inserita nel paging. Tuttavia, gli stack di thread, l'EXE e qualsiasi immagine DLL, memoria heap, memoria CLR possono comunque essere visualizzati dal sistema operativo.

A partire da SQL Server 2008 SP1 Aggiornamento cumulativo 2, entrambe le edizioni SQL Server Standard ed Enterprise possono usare le pagine di blocco nel diritto utente in memoria. Per altre informazioni sul supporto per le pagine bloccate, vedere l’articolo KB970070 relativo al supporto per le pagine bloccate nei sistemi SQL Server Standard Edition (64 bit).

Per assegnare il diritto utente Blocco delle pagine in memoria, attenersi alla procedura seguente:

  1. Fare clic su Start, fare clic su Esegui, digitare gpedit.msc e quindi fare clic su OK.
  2. Nota: viene visualizzata la finestra di dialogo Criteri di gruppo.
  3. Espandere Configurazione computer e quindi Impostazioni di Windows.
  4. Espandere Impostazioni sicurezzae quindi espandere Criteri locali.
  5. Fare clic su Assegnazione diritti utente, quindi fare doppio clic su Blocco delle pagine in memoria.
  6. Nella finestra di dialogo Impostazione criteri di protezione locali fare clic su Aggiungi utente o gruppo.
  7. Nella finestra di dialogo Seleziona utenti o gruppi aggiungere l'account autorizzato a eseguire il file sqlservr.exe, quindi fare clic su OK.
  8. Chiudere la finestra di dialogo Criteri di gruppo.
  9. Riavviare il servizio SQL Server.

Dopo aver assegnato il diritto utente Blocco pagine in memoria e aver riavviato il servizio SQL Server, il sistema operativo Windows non estrae più la memoria del pool di buffer all'interno del processo di SQL Server. Tuttavia, il sistema operativo Windows può comunque visualizzare la memoria del pool non di buffer all'interno del processo di SQL Server.

È possibile verificare che il diritto utente venga usato dall'istanza di SQL Server assicurandosi che il messaggio seguente sia scritto nel log degli errori di SQL Server all'avvio: "Uso di pagine bloccate per il pool di buffer"

Questo messaggio si applica solo a SQL Server. Per altre informazioni su questo messaggio in ERRORLOG, visitare le informazioni seguenti: È necessario assegnare le pagine di blocco per i privilegi di memoria nel sistema locale

Quando il sistema operativo Windows esegue il page out della memoria del pool non di buffer, è comunque possibile che si verifichino problemi di prestazioni. Tuttavia, i messaggi di errore menzionati nella sezione "Spiegazione" non vengono registrati nel log degli errori di SQL Server.

Cause del page out della memoria di SQL Server

Questa situazione può essere causata da tre categorie generali di problemi:

  • Problemi correlati all'applicazione: tutte le applicazioni insieme hanno esaurito la memoria fisica disponibile e il sistema operativo deve liberare memoria per le nuove richieste di applicazioni per le risorse. In genere, l'approccio è individuare le applicazioni che esauriscono la memoria e adottare le misure necessarie per bilanciare la memoria tra le applicazioni senza esaurire la RAM.
  • Problemi del driver di dispositivo: i driver di dispositivo possono causare il paging dei set di lavoro di tutti i processi se il driver chiama una funzione di allocazione della memoria in modo errato.
  • Problemi del sistema operativo

Di seguito sono riportate informazioni su ognuna di queste categorie

  • Problemi correlati all'applicazione: le applicazioni insieme possono usare tutta la RAM nel sistema. Se vengono effettuate nuove richieste di memoria, il sistema operativo tenta di soddisfarle e, se non è disponibile memoria, "taglia" il working set delle applicazioni in esecuzione per soddisfare le richieste di memoria. In questi casi si può osservare che il working set per la maggior parte delle applicazioni, se non tutte, si riduce in modo significativo. Per verificare questa situazione, raccogliere il seguente contatore del Monitor prestazioni per tutte le applicazioni del sistema:

    • Oggetto prestazioni: Process
    • Contatore: Working Set

    Monitorare inoltre il contatore seguente per correlare la quantità di memoria fisica disponibile nel sistema.

    • Oggetto Prestazioni: Memoria
    • Contatore: memoria disponibile (MB)

    Il comportamento tipico che è possibile osservare è la riduzione della memoria disponibile fino a quasi 0 MB e al tempo stesso un calo improvviso dei contatori del working set per la maggior parte (tutti) dei processi nel sistema. Se si osserva tale comportamento, può essere necessario eseguire alcune operazioni per ridurre l'utilizzo della memoria nel sistema, ad esempio ridurre la memoria massima del server per SQL Server.

    Le applicazioni possono anche usare eccessivamente la cache di sistema e causare una crescita elevata della cache. Per rispondere all'aumento della cache di sistema, il sistema estrae il working set del processo di SQL Server o di altre applicazioni. Se si verifica questo problema, è possibile usare alcune funzioni di gestione della memoria nell'applicazione. Queste funzioni controllano lo spazio della cache di sistema che le operazioni di I/O di file possono usare nell'applicazione. Ad esempio, è possibile usare la funzione SetSystemFileCacheSize e la funzione GetSystemFileCacheSize per controllare lo spazio della cache di sistema che le operazioni di I/O di file possono usare.

    È possibile utilizzare l'oggetto prestazioni di memoria per visualizzare i valori dei vari contatori in questo oggetto e determinare se il working set della cache di sistema usa una quantità eccessiva di memoria. Si possono, ad esempio, visualizzare i contatori Byte nella cache e Byte residenti cache di sistema. Per altre informazioni su questo argomento, vedere:

    È possibile scaricare e distribuire il servizio "Microsoft Windows Dynamic Cache Service" per controllare la memoria usata dalla cache di sistema.

  • Problemi del driver di dispositivo: se un driver di dispositivo usa la MmAllocateContiguousMemory funzione e se imposta il valore del parametro HighestAcceptableAddress su meno di 4 gigabyte (GB), il sistema operativo Windows potrebbe visualizzare il working set dei processi nel sistema, incluso il processo di SQL Server. Per risolvere questo problema, contattare il fornitore del driver di dispositivo per gli aggiornamenti del driver.

    Quando un driver di dispositivo tenta di allocare memoria, il sistema operativo Windows può eseguire il page out del working set di altre applicazioni. Questo hotfix di Windows consente di usare la traccia eventi per trovare il driver di dispositivo che causa il problema. Per altre informazioni sul driver specifico che causa il comportamento di taglio dei working set, vedere l'articolo sull'identificazione dei driver che allocano memoria contigua.

  • Problemi del sistema operativo: per risolvere i problemi noti che causano il paging del set di lavoro del processo di SQL Server, applicare gli hotfix descritti negli articoli della Microsoft Knowledge Base seguenti.

    Nota

    Gli hotfix sono cumulativi. Una versione più recente di un hotfix contiene le versioni precedenti dello stesso hotfix.

Considerazioni importanti prima di assegnare il diritto utente "Blocco delle pagine in memoria"

Prima di assegnare il diritto utente "Blocco delle pagine in memoria", è necessario prendere in considerazione alcuni altri aspetti. Se si assegna questo diritto utente a sistemi configurati in modo non corretto, il sistema può diventare instabile o si può verificare un calo delle prestazioni dell'intero sistema. Inoltre, è possibile che l'evento con ID 333 venga registrato nel registro eventi.

Se si contatta il Servizio Supporto Tecnico Clienti Microsoft (CSS) per questi problemi, i tecnici CSS possono chiedere di revocare questo diritto utente per l'account utente usato come account di avvio del servizio SQL Server. Questo passaggio può essere necessario per raccogliere importanti dati sulle prestazioni che i tecnici CSS possono usare per la configurazione necessaria delle varie opzioni per SQL Server e per altre applicazioni in esecuzione nel sistema. Dopo che i tecnici CSS raccolgono i dati sulle prestazioni, è possibile assegnare il diritto utente Blocco pagine in memoria all'account di avvio del servizio SQL Server.

Prima di assegnare il diritto utente Blocco delle pagine in memoria assicurarsi di acquisire un log di Monitor prestazioni per determinare i requisiti di memoria di varie applicazioni e servizi installati nel sistema. Queste applicazioni includono anche SQL Server. Per determinare i requisiti di memoria, raccogliere le seguenti informazioni di base:

  • Assicurarsi di impostare correttamente le opzioni max server memory e min server memory. Queste opzioni riflettono solo il requisito di memoria del pool di buffer del processo di SQL Server. Queste opzioni non includono la memoria allocata per altri componenti all'interno del processo di SQL Server. Questi componenti includono:

    • Thread di lavoro di SQL Server
    • Vari DLL e componenti caricati dal processo di SQL Server all'interno dello spazio indirizzi del processo di SQL Server
    • Le operazioni di backup e ripristino
  • Le DLL e i componenti includono vari provider OLE DB, stored procedure estese, oggetti COM Microsoft usati per la stored procedure sp_OACreate, i server collegati e SQL Server CLR. La memoria allocata per questi componenti rientra nell'area del pool non di buffer dello spazio indirizzi del processo di SQL Server. Per determinare idealmente la quantità massima di memoria che può essere usata dall'intero processo di SQL Server, è necessario sottrarre la memoria allocata per i componenti che non usano il pool di buffer dalla memoria totale che si desidera utilizzare il processo di SQL Server. Quindi, è possibile usare il valore rimanente per impostare l'opzione max server memory. Prima di impostare l'opzione max server memory e l'opzione min server memory, è consigliabile esaminare attentamente l'argomento "Impostazione manuale delle opzioni di memoria" nella documentazione online di SQL Server.

  • Determinare il requisito di memoria di altre applicazioni e dei componenti del sistema operativo Windows. Le applicazioni possono includere altri componenti di SQL Server, ad esempio SQL Server Agent, agenti di replica di SQL Server, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services e ricerca full-text di SQL Server. Le applicazioni che eseguono operazioni di backup e di copia dei file possono usare una grande quantità di memoria, ad esempio l'operazione di copia bulk e l'agente di snapshot che generano I/O di file. Quando si determina il valore dell'opzione max server memory e dell'opzione min server memory, è necessario considerare il requisito di memoria di tutte queste applicazioni. È possibile usare il contatore Byte privati e il contatore Working set nell'oggetto Processo per ogni processo per determinare il requisito di memoria per un processo specifico.

  • Per impostazione predefinita, il diritto utente Blocco delle pagine in memoria è già stato assegnato all'account Sistema locale predefinito. Per altre informazioni, visitare il seguente sito Web Microsoft: È necessario assegnare le pagine di blocco in memoria per il sistema locale?

  • Se si usa un account utente di Windows a livello globale per tutti i processi di SQL Server in un dominio, determinare i diritti utente assegnati tramite una configurazione di Criteri di gruppo. Un processo di SQL Server a 32 bit può usare questo account come account di avvio. Tuttavia, questo account richiede il diritto utente Blocco delle pagine in memoria per abilitare la funzionalità Address Windowing Extensions (AWE). Per altre informazioni, vedere l'argomento "Fornire la quantità massima di memoria a SQL Server" nella documentazione online di SQL Server.

  • Prima di configurare l'opzione max server memory e l'opzione min server memory per più istanze di SQL Server, considerare i requisiti di memoria del pool nonbuffer per ogni istanza di SQL Server. Quindi configurare queste opzioni per ogni istanza di SQL Server.

Idealmente queste informazioni di base vengono raccolte durante i picchi di carico. Pertanto, è possibile determinare i requisiti di memoria per varie applicazioni e componenti per supportare il picco di carico. I requisiti di memoria variano da un sistema all'altro, a seconda delle attività e delle applicazioni in esecuzione nel sistema. È possibile eseguire una query sulle informazioni visualizzate nella DMV sys.dm_os_process_memory per capire se il sistema sta riscontrando condizioni di memoria insufficiente. Per altre informazioni, vedere sys.dm_os_memory_memory (Transact-SQL).

Miglioramenti aggiunti in Windows Server 2008 e nella versione R2

In Windows Server 2008 e Windows Server 2008 R2 il meccanismo di allocazione della memoria contigua è ottimizzato. Questo miglioramento consente a Windows Server 2008 e Windows Server 2008 R2 di ridurre in una certa misura gli effetti del page out del working set delle applicazioni quando arrivano nuove richieste di memoria.

Di seguito è riportata una spiegazione dei miglioramenti estratta dal white paper Microsoft relativo ai miglioramenti della gestione della memoria in Windows:

In Windows Server 2008 l'allocazione di memoria fisicamente contigua è estremamente avanzata. Le richieste di allocazione di memoria contigua hanno maggiori probabilità di riuscire perché la gestione della memoria ora sostituisce dinamicamente le pagine, in genere senza tagliare il working set o eseguire operazioni di I/O. Inoltre, molti più tipi di pagine, ad esempio gli stack del kernel e le pagine di metadati del file system, sono ora candidati per la sostituzione. Di conseguenza, in un dato momento è disponibile a livello generale una maggiore quantità di memoria contigua. In più, il costo per ottenere tali allocazioni è notevolmente ridotto.

Per altre informazioni, vedere l'articolo sui problemi relativi al taglio dei working set in SQL Server.

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti