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

Questo articolo descrive come l'analisi del pool di buffer di SQL Server potrebbe richiedere molto tempo per terminare 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. In questo modo si rallenta l'operazione che ha attivato l'analisi.

Operazioni che causano una scansione del buffer pool

Ecco 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 (drop)
  • Rimozione di file da un database
  • Backup completo o differenziale del database
  • Ripristino del database
  • Ripristino del log delle transazioni
  • Ripristino online
  • operazione DBCC CHECKDB o DBCC CHECKTABLE

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 di 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 una scansione lunga

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

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 (Esegui il backup del database) FlushCache 243 19932814

Nota

La soglia nell'evento XEvent è più piccola per consentire di acquisire informazioni con una granularità più fine.

Workaround

Prima di SQL Server 2022, non c’era modo di eliminare questo problema. Non è consigliabile eseguire alcuna azione per cancellare il pool di buffer perché l'eliminazione di buffer puliti (DBCC DROPCLEANBUFFERS) dal pool di buffer può comportare una riduzione significativa delle prestazioni. La rimozione delle pagine del database dalla memoria causerà la rilettura dei dati dai file del database su disco nelle esecuzioni successive delle query. Questo processo di accesso ai dati tramite I/O su disco causa la lentezza delle query.

In SQL Server 2022 questo problema è attenuato perché le analisi del pool di buffer vengono parallelizzate usando più core. Ci sarà un task ogni 8 milioni di buffer (64 GB) in cui verrà comunque usata un'analisi seriale se sono presenti meno di 8 milioni di buffer. Per altre informazioni, vedere Buffer Pool Parallel Scan.

Maggiori informazioni

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