Le operazioni che attivano un'analisi del pool di buffer possono essere eseguite lentamente in computer con memoria di grandi dimensioni

Questo articolo descrive come l'analisi del pool di buffer SQL Server potrebbe richiedere molto tempo per il completamento nei computer con memoria di grandi dimensioni.

Si applica a: SQL Server
Numero KB originale: 4566579

Sintomi

Alcune operazioni in Microsoft SQL Server attivano un'analisi del pool di buffer (la cache che archivia le pagine del database in memoria). Nei sistemi con una grande quantità di RAM (1 TB di memoria o superiore), l'analisi del pool di buffer potrebbe richiedere molto tempo. Ciò rallenta l'operazione che ha attivato l'analisi.

Operazioni che causano un'analisi del pool di buffer

Di seguito sono riportate alcune operazioni che possono attivare un'analisi del pool di buffer:

  • Avvio del database
  • Arresto o riavvio del database
  • Failover del gruppo di disponibilità
  • Rimozione del database (eliminazione)
  • Rimozione di file da un database
  • Backup completo o differenziale del database
  • Ripristino del database
  • Ripristino del log delle transazioni
  • Ripristino online
  • DBCC CHECKDB o DBCC CHECKTABLE operazione

Il log degli errori mostra che un'analisi ha richiesto molto tempo

A partire da SQL Server 2016 SP3, SQL Server 2017 CU23 e SQL Server 2019 CU9, è stato aggiunto un messaggio di errore al log degli errori SQL Server per indicare che un'analisi del pool di buffer ha richiesto molto tempo (10 secondi o più):

L'analisi del pool di buffer ha richiesto 14 secondi: ID database 7, comando 'BACKUP DATABASE', operazione 'FlushCache', buffer analizzati 115, buffer iterati totali 204640239, tempo di attesa 0 ms. Per altre informazioni, vedere 'https://go.microsoft.com/fwlink/?linkid=2132602'.

Evento esteso per diagnosticare un'analisi prolungata

Inoltre, a partire dalle stesse build SQL Server 2016 SP3, SQL Server 2017 CU23 e SQL Server 2019 CU9 è stato introdotto l'evento buffer_pool_scan_complete Extended per identificare analisi lunghe del pool di buffer.

Se un'analisi richiede più di 1 secondo, L'evento XEvent verrà registrato come segue quando l'evento è abilitato.

Nome Database_id elapsed_time_ms comando Operazione scanned_buffers total_iterated_buffers
buffer_pool_scan_complete 7 1308 BACKUP DATABASE FlushCache 243 19932814

Nota

La soglia si trova in XEvent è più piccola per consentire di acquisire informazioni con una granularità più fine.

Soluzione alternativa

Prima di SQL Server 2022, non c'era modo di eliminare questo problema. Non è consigliabile eseguire alcuna azione per cancellare il pool di buffer in quanto l'eliminazione di buffer puliti (DBCC DROPCLEANBUFFERS) dal pool di buffer può comportare una riduzione significativa delle prestazioni. La rimozione di pagine di database dalla memoria comporta la rileggizione dei dati dai file di database su disco da parte delle esecuzioni di query successive. Questo processo di accesso ai dati tramite I/O su disco causa un rallentamento delle query.

In SQL Server 2022 questo problema viene attenuato perché le analisi del pool di buffer vengono parallelizzate usando più core. Ci sarà un'attività per 8 milioni di buffer (64 GB) in cui verrà ancora usata un'analisi seriale se sono presenti meno di 8 milioni di buffer. Per altre informazioni, watch analisi parallela del pool di buffer.

Ulteriori informazioni

Per altre informazioni sui problemi che possono verificarsi in pool di buffer di grandi dimensioni, vedere SQL Server : creazione di checkpoint di RAM e database di grandi dimensioni.