Estensione pool di bufferBuffer Pool Extension

Introdotta in SQL Server 2014SQL Server 2014, l'estensione del pool di buffer offre l'integrazione diretta di una estensione di RAM non volatile (ossia, un'unità SSD) al pool di buffer del Motore di databaseDatabase Engine per migliorare la velocità effettiva di I/O in maniera significativa.Introduced in SQL Server 2014SQL Server 2014, the buffer pool extension provides the seamless integration of a nonvolatile random access memory (that is, solid-state drive) extension to the Motore di databaseDatabase Engine buffer pool to significantly improve I/O throughput. L'estensione del pool di buffer non è disponibile in tutte le edizioni di SQL ServerSQL Server .The buffer pool extension is not available in every SQL ServerSQL Server edition. Per altre informazioni, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.For more information, see Features Supported by the Editions of SQL Server 2016.

Vantaggi dell'estensione del pool di bufferBenefits of the Buffer Pool Extension

Lo scopo principale di un database di SQL ServerSQL Server è l'archiviazione e il recupero dei dati. L'esecuzione di una quantità elevata di operazioni di I/O su disco è pertanto una caratteristica fondamentale del motore di database.The primary purpose of a SQL ServerSQL Server database is to store and retrieve data, so intensive disk I/O is a core characteristic of the Database Engine. Poiché le operazioni di I/O nel disco possono utilizzare molte risorse e richiedere un tempo relativamente lungo per il completamento, in SQL ServerSQL Server viene data grande importanza all'efficienza dell'I/O.Because disk I/O operations can consume many resources and take a relatively long time to finish, SQL ServerSQL Server focuses on making I/O highly efficient. Il pool di buffer funge da fonte primaria di allocazione della memoria di SQL ServerSQL Server.The buffer pool serves as a primary memory allocation source of SQL ServerSQL Server. La gestione del buffer è un elemento chiave per il raggiungimento di tale efficienza.Buffer management is a key component in achieving this efficiency. Il componente di gestione del buffer è costituito da due meccanismi, ovvero Gestione buffer che consente di accedere alle pagine del database e aggiornarle, e il pool di buffer, che consente di ridurre le operazioni di I/O del file di database.The buffer management component consists of two mechanisms: the buffer manager to access and update database pages, and the buffer pool), to reduce database file I/O.

Le pagine di indice e di dati vengono lette dal disco nel pool di buffer e le pagine modificate, dette anche pagine dirty, vengono riscritte sul disco.Data and index pages are read from disk into the buffer pool and modified pages (also known as dirty pages) are written back to disk. L'utilizzo della memoria nei checkpoint di database e del server determinano la rimozione dalla cache del buffer delle pagine dirty ad accesso frequente (attive) e la scrittura su dischi di tipo meccanico, quindi la rilettura delle stesse nella cache.Memory pressure on the server and database checkpoints cause hot (active) dirty pages in the buffer cache to be evicted from the cache and written to mechanical disks and then read back into the cache. Queste operazioni di I/O sono in genere piccole letture e scritture casuali nell'ordine di 4 - 16 KB di dati.These I/O operations are typically small random reads and writes on the order of 4 to 16 KB of data. Piccoli modelli di I/O casuali generano frequenti ricerche, per contendersi il braccio meccanico del disco, aumentare la latenza dell'attività di I/O e ridurre la velocità effettiva di I/O aggregata del sistema.Small random I/O patterns incur frequent seeks, competing for the mechanical disk arm, increasing I/O latency, and reducing aggregate I/O throughput of the system.

L'approccio tipico per risolvere questi colli bottiglia nelle operazioni di I/O consiste nell'aggiungere una maggiore quantità di DRAM o, in alternativa, più spindle SAS a prestazioni elevate.The typical approach to resolving these I/O bottlenecks is to add more DRAM, or alternatively, added high-performance SAS spindles. Anche se queste opzioni sono utili, presentano svantaggi significativi: la memoria DRAM è più costosa delle unità di archiviazione dati e l'aggiunta di spindle aumenta le spese di investimento per l'acquisto di hardware, nonché i costi operativi dovuti al maggior consumo di energia e alla più elevata probabilità di guasti dei componenti.While these options are helpful, they have significant drawbacks: DRAM is more expensive than data storage drives and adding spindles increases capital expenditure in hardware acquisition and increases operational costs by increased power consumption and increased probability of component failure.

La funzionalità di estensione del pool di buffer estende la cache di pool di buffer con RAM non volatile (di solito unità SSD).The buffer pool extension feature extends the buffer pool cache with nonvolatile storage (usually SSD). Grazie a questa estensione, il pool di buffer può supportare un working set del database più esteso, forzando il paging delle attività di I/O tra la RAM e le unità SSD.Because of this extension, the buffer pool can accommodate a larger database working set, which forces the paging of I/Os between RAM and the SSDs. In questo modo viene effettuato in modo efficiente l'offload delle piccole operazioni di I/O casuali dai dischi meccanici alle unità SSD.This effectively offloads small random I/Os from mechanical disks to SSDs. Grazie alla latenza più bassa e al miglioramento delle prestazioni di I/O casuali delle unità SSD, l'estensione del pool di buffer consente di migliorare notevolmente la velocità effettiva di I/O.Because of the lower latency and better random I/O performance of SSDs, the buffer pool extension significantly improves I/O throughput.

Nell'elenco seguente vengono descritti i vantaggi della funzionalità di estensione del pool di buffer.The following list describes the benefits of the buffer pool extension feature.

  • Maggiore velocità effettiva di I/O casualeIncreased random I/O throughput

  • Riduzione della latenza di I/OReduced I/O latency

  • Maggiore velocità effettiva delle transazioniIncreased transaction throughput

  • Miglioramento delle prestazioni di lettura con un più ampio pool di buffer ibridoImproved read performance with a larger hybrid buffer pool

  • Architettura di memorizzazione nella cache per l'utilizzo delle unità di memoria attuali e futureA caching architecture that can take advantage of present and future low-cost memory drives

ConcettiConcepts

I seguenti termini sono applicabili alla funzionalità di estensione del pool di buffer.The following terms are applicable to the buffer pool extension feature.

Unità SSDSolid-state drive (SSD)
Le unità SSD consentono di archiviare dati in memoria (RAM) in modo persistente.Solid-state drives store data in memory (RAM) in a persistent manner. Per ulteriori informazioni vedere questa definizione.For more information, see this definition.

BufferBuffer
In SQL ServerSQL Serverun buffer è una pagina da 8 KB in memoria, ovvero delle stesse dimensioni di una pagina di dati o di indice.In SQL ServerSQL Server, A buffer is an 8-KB page in memory, the same size as a data or index page. La cache del buffer è quindi suddivisa in pagine da 8 KB.Thus, the buffer cache is divided into 8-KB pages. Una pagina rimane nella cache del buffer fino a quando per Gestione buffer non è necessaria l'area del buffer per leggere un maggior numero di dati.A page remains in the buffer cache until the buffer manager needs the buffer area to read in more data. I dati vengono riscritti sul disco solo se vengono modificati.Data is written back to disk only if it is modified. Queste pagine modificate in memoria sono dette pagine dirty.These in-memory modified pages are known as dirty pages. Una pagina è detta clean quando è equivalente alla propria immagine del database sul disco.A page is clean when it is equivalent to its database image on disk. I dati nella cache del buffer possono essere modificati più volte prima di venire riscritti sul disco.Data in the buffer cache can be modified multiple times before being written back to disk.

Pool di bufferBuffer pool
Definito anche cache del buffer.Also called buffer cache. Il pool di buffer è una risorsa globale condivisa da tutti i database per le pagine di dati memorizzate nella cache.The buffer pool is a global resource shared by all databases for their cached data pages. Le dimensioni massime e minime della cache del pool di buffer sono determinate all'avvio o quando l'istanza di SQL Server viene riconfigurata dinamicamente tramite sp_configure.The maximum and minimum size of the buffer pool cache is determined during startup or when the instance of SQL server is dynamically reconfigured by using sp_configure. Tali dimensioni determinano il numero massimo di pagine che possono essere memorizzate nella cache del pool di buffer dell'istanza in esecuzione in un momento qualsiasi.This size determines the maximum number of pages that can be cached in the buffer pool at any time in the running instance.

La quantità massima di memoria di cui può essere eseguito il commit tramite Estensione pool di buffer può essere limitata da altre applicazioni in esecuzione nel computer se queste creano richieste di memoria significative.The maximum memory that can be comitted by Buffer Pool Extension can be limited by the other applications running on the machine in case those create significant memory pressure.

CheckpointCheckpoint
Un checkpoint crea un punto valido da cui il Motore di databaseDatabase Engine può iniziare ad applicare le modifiche contenute nel log delle transazioni durante il ripristino a seguito di un arresto anomalo del sistema o di un arresto imprevisto.A checkpoint creates a known good point from which the Motore di databaseDatabase Engine can start applying changes contained in the transaction log during recovery after an unexpected shutdown or crash. Un checkpoint scrive le pagine dirty e le informazioni sul log delle transazioni dalla memoria al disco e registra inoltre le informazioni sul log delle transazioni.A checkpoint writes the dirty pages and transaction log information from memory to disk and, also, records information about the transaction log. Per altre informazioni, vedere Checkpoint di database (SQL Server).For more information, see Database Checkpoints (SQL Server).

Dettagli relativi all'estensione del pool di bufferBuffer Pool Extension Details

L'archiviazione sull'unità SSD viene utilizzata come estensione del sottosistema di memoria anziché del sottosistema di archiviazione su disco,SSD storage is used as an extension to the memory subsystem rather than the disk storage subsystem. ovvero il file di estensione del pool di buffer consente alla funzionalità di gestione del pool di buffer di utilizzare sia la memoria DRAM che la memoria flash NAND, per gestire un pool di buffer molto più grande di pagine ad accesso meno frequente nella NvRAM (Non-volatile Random Access Memory) supportata da unità SSD.That is, the buffer pool extension file allows the buffer pool manager to use both DRAM and NAND-Flash memory to maintain a much larger buffer pool of lukewarm pages in nonvolatile random access memory backed by SSDs. In questo modo viene creata una gerarchia multilivello di memorizzazione nella cache con livello 1 (L1) come DRAM e livello 2 (L2) come file di estensione del pool di buffer sull'unità SSD.This creates a multilevel caching hierarchy with level 1 (L1) as the DRAM and level 2 (L2) as the buffer pool extension file on the SSD. Solo le pagine clean vengono scritte nella cache L2 che consente di gestire la sicurezza dei dati.Only clean pages are written to the L2 cache, which helps maintain data safety. In Gestione buffer viene gestito lo spostamento delle pagine clean tra le cache L1 e L2.The buffer manager handles the movement of clean pages between the L1 and L2 caches.

Nella figura seguente viene fornita una panoramica di alto livello dell'architettura del pool di buffer in relazione agli altri componenti di SQL ServerSQL Server .The following illustration provides a high-level architectural overview of the buffer pool relative to other SQL ServerSQL Server components.

Architettura dell'estensione del pool di buffer dell'unità SSDSSD Buffer Pool Extension Architecture

Quando è abilitata, l'estensione del pool di buffer specifica le dimensioni e il percorso del file di memorizzazione nella cache del pool di buffer sull'unità SSD.When enabled, the buffer pool extension specifies the size and file path of the buffer pool caching file on the SSD. Il file è un extent contiguo di archiviazione sull'unità SSD e viene configurato in modo statico durante l'avvio dell'istanza di SQL ServerSQL Server.This file is a contiguous extent of storage on the SSD and is statically configured during startup of the instance of SQL ServerSQL Server. Le modifiche ai parametri di configurazione del file possono essere eseguite solo quando la funzionalità di estensione del pool di buffer è disabilitata.Alterations to the file configuration parameters can only be done when the buffer pool extension feature is disabled. In tal caso, tutte le impostazioni di configurazione correlate vengono rimosse dal Registro di sistema.When the buffer pool extension is disabled, all related configuration settings are removed from the registry. Il file di estensione del pool di buffer viene eliminato durante l'arresto dell'istanza di SQL Server.The buffer pool extension file is deleted upon shutdown of the instance of SQL Server.

Procedure consigliateBest Practices

È consigliabile attenersi a queste procedure consigliate.We recommend that you follow these best practices.

  • Dopo avere abilitato per la prima volta l'estensione del pool di buffer, è consigliabile riavviare l'istanza di SQL Server per massimizzare i vantaggi per le prestazioni.After enabling Buffer Pool Extension for the first time it is recommended to restart the SQL Server instance to get the maximum performance benefits.

  • Le dimensioni dell'estensione del pool di buffer possono arrivare fino a 32 volte il valore di max_server_memory.The buffer pool extension size can be up to 32 times the value of max_server_memory. Si consiglia un rapporto tra le dimensioni della memoria fisica (max_server_memory) e le dimensioni dei file di estensione del pool di buffer non superiore a 1:16.We recommend a ratio between the size of the physical memory (max_server_memory) and the size of the buffer pool extension of 1:16 or less. Un rapporto inferiore nell'intervallo da 1:4 a 1:8 può essere ottimale.A lower ratio in the range of 1:4 to 1:8 may be optimal. Per informazioni sull'impostazione dell'opzione max_server_memory, vedere Opzioni di configurazione del server Server Memory.For information about setting the max_server_memory option, see Server Memory Server Configuration Options.

  • Effettuare test approfonditi dell'estensione del pool di buffer prima dell'implementazione in un ambiente di produzione.Test the buffer pool extension thoroughly before implementing in a production environment. Una volta in produzione, evitare di apportare modifiche di configurazione al file o di disattivare la funzionalità.Once in production, avoid making configuration changes to the file or turning the feature off. Queste attività possono influire negativamente sulle prestazioni del server perché la dimensione del pool di buffer si riduce in modo significativo quando la funzionalità è disabilitata.These activities may have a negative impact on server performance because the buffer pool is significantly reduced in size when the feature is disabled. Se disabilitata, la memoria utilizzata per supportare la funzionalità non viene recuperata finché l'istanza di SQL Server non viene riavviata.When disabled, the memory used to support the feature is not reclaimed until the instance of SQL Server is restarted. Tuttavia, se la funzionalità viene riabilitata, la memoria verrà riutilizzata senza riavviare l'istanza.However, if the feature is re-enabled, the memory will be reused without restarting the instance.

Informazioni restituite sull'estensione del pool di bufferReturn Information about the Buffer Pool Extension

È possibile utilizzare le viste a gestione dinamica (DMV) seguenti per visualizzare la configurazione dell'estensione del pool di buffer e le informazioni sulle pagine di dati restituite nell'estensione.You can use the following dynamic management views to display the configuration of the buffer pool extension and return information about the data pages in the extension.

XEventXEvent DescrizioneDescription ParametriParameters
sqlserver.buffer_pool_extension_pages_writtensqlserver.buffer_pool_extension_pages_written Viene attivato quando una pagina o un gruppo di pagine vengono eliminate dal pool di buffer e vengono scritte nel file di estensione del pool di buffer.Fires when a page or group of pages are evicted from the buffer pool and written to the buffer pool extension file. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_extension_pages_readsqlserver.buffer_pool_extension_pages_read Viene attivato quando una pagina viene letta dal file di estensione del pool di buffer nel pool di buffer.Fires when a page is read from the buffer pool extension file to the buffer pool. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_extension_pages_evictedsqlserver.buffer_pool_extension_pages_evicted Viene attivato quando una pagina viene rimossa dal file di estensione del pool di buffer.Fires when a page is evicted from the buffer pool extension file. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_eviction_thresholds_recalculatedsqlserver.buffer_pool_eviction_thresholds_recalculated Viene attivato quando viene calcolata la soglia di eliminazione.Fires when the eviction threshold is calculated. warm_thresholdwarm_threshold

cold_thresholdcold_threshold

pages_bypassed_evictionpages_bypassed_eviction

eviction_bypass_reasoneviction_bypass_reason

eviction_bypass_reason_descriptioneviction_bypass_reason_description
Descrizione dell'attivitàTask Description ArgomentoTopic
Abilitare e configurare l'estensione del pool di buffer.Enable and configure the buffer pool extension. ALTER SERVER CONFIGURATION (Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)
Modificare la configurazione dell'estensione del pool di buffer.Modify the buffer pool extension configuration ALTER SERVER CONFIGURATION (Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)
Visualizzare la configurazione dell'estensione del pool di buffer.View the buffer pool extension configuration sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)
Eseguire il monitoraggio dell'estensione del pool di buffer.Monitor the buffer pool extension sys.dm_os_buffer_descriptors (Transact-SQL)sys.dm_os_buffer_descriptors (Transact-SQL)

Contatori delle prestazioniPerformance counters