MSSQLSERVER_17890

Si applica a: sìSQL Server (tutte le versioni supportate)

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 17890
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico SRV_WS_TRIMMED
Testo del messaggio È stato eseguito il page out di una parte significativa della memoria del processo di SQL Server. Potrebbe verificarsi un calo di 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 log eventi dell’applicazione di Windows.

È stato eseguito il page out di una parte significativa della memoria del processo di SQL Server. Potrebbe verificarsi un calo di prestazioni. Duration (Durata): 0 secondi. Working set (KB): 3383250, committ completato (KB): 9112480, utilizzo 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 alla memoria riguardo 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 esegue il page out al file di paging di ampie sezioni della memoria di SQL Server di cui è stato eseguito il committ.
  • 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 page out della memoria del pool di buffer del processo di SQL Server bloccando la memoria allocata per il pool di buffer nella memoria fisica. Per bloccare la memoria, assegnare il diritto utente Blocco delle 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 di Blocco delle pagine in memoria garantisce che non venga eseguito il page out della memoria gestita da SQL Server. Il sistema operativo può tuttavia effettuare il page out degli stack di thread, del file EXE, di tutte le immagini DLL, della memoria heap e della memoria CLR.

A partire dall'aggiornamento cumulativo 2 per SQL Server 2008 SP1, entrambe le edizioni Standard ed Enterprise di SQL Server possono usare il diritto utente Blocco delle pagine 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 sicurezza e 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 delle pagine in memoria e aver riavviato il servizio SQL Server, il sistema operativo Windows non esegue più il page out della memoria del pool di buffer nel processo SQL Server. Tuttavia, il sistema operativo Windows può comunque eseguire il page out della memoria del pool non di buffer nel processo SQL Server.

È possibile convalidare l'uso del diritto utente da parte dell'istanza di SQL Server verificando che il messaggio seguente venga scritto nel log degli errori di SQL Server all'avvio: "Per il pool di buffer vengono utilizzate pagine bloccate"

Questo messaggio si applica solo a SQL Server. Per altre informazioni su questo messaggio nel log degli errori, vedere la sezione relativa all'assegnazione del privilegio Blocco delle pagine in 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 alle applicazioni: Tutte le applicazioni insieme hanno esaurito la memoria fisica disponibile e il sistema operativo deve liberare memoria per le nuove richieste di risorse da parte delle applicazioni. 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 dei driver di dispositivo: I driver di dispositivo possono causare il paging del working set per 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 alle applicazioni: Le applicazioni insieme possono consumare tutta la RAM del 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 prestazione: Process
    • Contatore: Working Set

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

    • Oggetto prestazione: 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 alla crescita della cache di sistema, il sistema esegue il page out del 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 dei driver di dispositivo: Se un driver di dispositivo usa la funzione MmAllocateContiguousMemory e imposta il valore del parametro HighestAcceptableAddress su un valore inferiore a 4 gigabyte (GB), il sistema operativo Windows può eseguire il page out del working set dei processi nel sistema, incluso il processo 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 relativi al sistema operativo: Per risolvere i problemi noti per cui il sistema operativo Windows esegue il page out del working set del processo di SQL Server, applicare gli hotfix descritti negli articoli seguenti della Microsoft Knowledge Base.

    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 di assistenza clienti di Microsoft per questi problemi, è possibile che i tecnici chiedano 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 saranno utili ai tecnici dell'assistenza per eseguire la necessaria configurazione delle diverse opzioni per SQL Server e per altre applicazioni in esecuzione nel sistema. Dopo che i tecnici hanno raccolto i dati sulle prestazioni, è possibile assegnare il diritto utente Blocco delle 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. Non includono la memoria allocata per altri componenti all'interno del processo di SQL Server. Questi componenti includono:

    • I thread di lavoro di SQL Server
    • Varie DLL e componenti caricati dal processo di SQL Server nello spazio degli indirizzi del processo di SQL Server
    • Le operazioni di backup e ripristino
  • I componenti e le DLL includono diversi provider OLE DB, le stored procedure estese, gli oggetti COM Microsoft usati per la stored procedure sp_OACreate, i server collegati e la funzione CLR di SQL Server. La memoria allocata per questi componenti rientra nell'area del pool non di buffer dello spazio degli indirizzi del processo di SQL Server. Per determinare idealmente la quantità massima di memoria che l'intero processo di SQL Server può usare, è necessario sottrarre la memoria allocata per i componenti che non usano il pool di buffer dalla memoria totale che verrà usata dal 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, è necessario rivedere con attenzione l'argomento "Impostazione manuale delle opzioni per la 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, gli agenti di replica di SQL Server, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services e la 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, nel sito Web Microsoft vedere la sezione relativa all'assegnazione del privilegio Blocco delle pagine in memoria nel 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 usando una configurazione 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 relativo all'uso della quantità massima di memoria per SQL Server nella documentazione online di SQL Server.

  • Prima di configurare le opzioni max server memory e min server memory per più istanze di SQL Server, considerare i requisiti di memoria del pool non di buffer 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.

Gli strumenti di terze parti citati in questo articolo sono prodotti da società indipendenti di Microsoft. Microsoft non fornisce alcuna garanzia, implicita o esplicita, sulle prestazioni o sull'affidabilità di questi prodotti.