Applies ToSQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard

Dopo aver applicato questo aggiornamento, è necessario aggiungere il flag Trace-T8075 come parametro di avvio per abilitare la modifica.

Sintomi

Quando si esegue una query in una versione a 64 bit di Microsoft SQL Server 2012, viene visualizzato un messaggio di errore di memoria insufficiente che è simile al seguente nel log degli errori di SQL Server:

Pagine di assegnazione non riuscite: FAIL_PAGE_ALLOCATION 513

Le query impiegano molto tempo per terminare l'esecuzione ed eseguire l'incontro SOS_MEMORY_TOPLEVELBLOCKALLOCATOR attese. Quando si esaminano i punti di informazioni seguenti, si verifica che lo spazio degli indirizzi virtuali disponibile è molto basso:

  • Guida alla sezione DBCC MEMORYSTATUS-Process/System counts-memoria virtuale disponibile

  • DMV: sys.dm_os_process_memory-colonna virtual_address_space_available_kb

Questi valori iniziano per circa 8 terabyte (TB) in un processo x64 e continuano a scendere fino a raggiungere alcuni gigabyte (GB).  Quando ci si trova nella fase in cui lo spazio degli indirizzi virtuali disponibile è molto basso, le query che provano a eseguire l'allocazione della memoria possono anche incontrare un tipo di attesa di CMEMTHREAD. I punti dati seguenti continueranno a essere aumentati nel tempo:

  • DMV: sys.dm_os_process_memory e sys.dm_os_memory_nodes-Column virtual_address_space_reserved_kb

  • DBCC MEMORYSTATUS-sezione Gestione memoria-VM riservata

Questi valori vengono in genere aumentati in multipli del valore "max server memory" fino a quasi 8 TB.

Causa

Quando il processo di SQL Server ha raggiunto lo stato in cui la memoria totale del server = memoria del server di destinazione = memoria del server max, sono disponibili criteri in gestione memoria di SQL Server per consentire alle nuove assegnazioni di richiedere più pagine di 8 KB per avere successo temporaneamente. Il modello di allocazione ripetuto in tale condizione può causare la frammentazione dei blocchi di memoria e il consumo dello spazio degli indirizzi virtuali. Se questo processo viene ripetuto più volte, lo spazio degli indirizzi virtuali di SQL Server verrà esaurito e si noteranno i sintomi menzionati in precedenza.

Risoluzione

Informazioni sull'aggiornamento cumulativo

Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo di SQL Server.

 

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. È consigliabile scaricare e installare gli aggiornamenti cumulativi più recenti per SQL Server:

Questo hotfix impedisce sia la memoria insufficiente che la riduzione continua dello spazio di indirizzi virtuali disponibile che potresti riscontrare.

Stato

Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Ulteriori informazioni

  • Windows 2012 R2 consente agli spazi degli indirizzi virtuali di crescere fino a 128 TB. Di conseguenza, potresti non notare questo problema negli ambienti Windows 2012 R2. Per altre informazioni, Vedi l'argomento seguente in Windows Dev Center:limiti di memoria per le versioni di Windows e Windows Server

  • Se viene visualizzata una crescita continua nello spazio degli indirizzi virtuali anche dopo aver applicato la correzione, è possibile determinare le query o le operazioni che richiedono blocchi di memoria di grandi dimensioni utilizzando l' Page_allocated evento Extended. Uno script di esempio ha un aspetto simile al seguente:

    CREATE EVENT SESSION [memory_tracking] ON SERVERADD EVENT sqlos.page_allocated(    ACTION(package0.callstack,sqlos.cpu_id,sqlos.task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.query_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text)    WHERE ([number_pages]>(1)))ADD TARGET package0.event_file(SET filename=N'E:\Data\MSSQL11.MSSQLSERVER\MSSQL\Log\memory_tracking.xel')WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)GO

    In genere si tratta di backup del log e operazioni di manutenzione degli indici, che si verificano frequentemente.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.