guida sull'architettura di gestione della memoriaMemory Management Architecture Guide

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Architettura della memoriaMemory Architecture

In SQL ServerSQL Server la memoria viene acquisita e liberata in modo dinamico in base alle esigenze. dynamically acquires and frees memory as required. In genere non è necessario che un amministratore specifichi la quantità di memoria da allocare a SQL ServerSQL Server. L'opzione corrispondente, tuttavia, è ancora disponibile e in alcuni ambienti è necessario impostarla.Typically, an administrator does not have to specify how much memory should be allocated to SQL ServerSQL Server, although the option still exists and is required in some environments.

Uno dei principali obiettivi di progettazione di tutti i software di database è la riduzione del disco I/O dal momento che le letture e le scritture del disco sono le operazioni che consumano più risorse.One of the primary design goals of all database software is to minimize disk I/O because disk reads and writes are among the most resource-intensive operations. SQL ServerSQL Server crea un pool di buffer in memoria per contenere le pagine lette dal database. builds a buffer pool in memory to hold pages read from the database. Gran parte del codice in SQL ServerSQL Server è dedicata alla riduzione del numero di letture e scritture fisiche tra il disco e il pool di buffer.Much of the code in SQL ServerSQL Server is dedicated to minimizing the number of physical reads and writes between the disk and the buffer pool. SQL ServerSQL Server tenta di raggiungere un equilibrio tra i due obiettivi: tries to reach a balance between two goals:

  • Evitare che le dimensioni del pool di buffer aumentino fino a limitare la memoria dell'intero sistema.Keep the buffer pool from becoming so big that the entire system is low on memory.
  • Ridurre al minimo l'I/O fisico sui file di database aumentando la dimensione del pool di buffer fino a raggiungere il valore massimo possibile.Minimize physical I/O to the database files by maximizing the size of the buffer pool.

Nota

In un sistema con carichi pesanti, alcune query di grandi dimensioni la cui esecuzione richiede una grande quantità di memoria non possono ottenere la quantità minima di memoria richiesta e ricevono un errore di timeout mentre sono in attesa delle risorse della memoria.In a heavily loaded system, some large queries that require a large amount of memory to run cannot get the minimum amount of requested memory and receive a time-out error while waiting for memory resources. Per risolvere il problema, aumentare il valore dell' opzione query wait.To resolve this, increase the query wait Option. Per una query parallela, provare a ridurre l' opzione Massimo grado di parallelismo.For a parallel query, consider reducing the max degree of parallelism Option.

Nota

In un sistema con carichi elevati e con un numero eccessivo di richieste di memoria, le query con merge join, sort e bitmap nel piano di query possono eliminare il bitmap quando non ottengono la memoria minima necessaria per il bitmap.In a heavily loaded system under memory pressure, queries with merge join, sort and bitmap in the query plan can drop the bitmap when the queries do not get the minimum required memory for the bitmap. Ciò può influire sulle prestazioni delle query e, se il processo di ordinamento non può essere contenuto nella memoria, è possibile aumentare l'uso delle tabelle di lavoro nel database tempdb, causando la crescita di tempdb.This can affect the query performance and if the sorting process can not fit in memory, it can increase the usage of worktables in tempdb database, causing tempdb to grow. Per risolvere questo problema, aggiungere memoria fisica o ottimizzare le query per l'uso di un piano di query diverso e più rapido.To resolve this problem add physical memory or tune the queries to use a different and faster query plan.

Assegnazione della quantità massima di memoria a SQL ServerSQL ServerProviding the Maximum Amount of Memory to SQL ServerSQL Server

Usando AWE e il privilegio Blocco di pagine in memoria, è possibile fornire al motore di database di SQL ServerSQL Server le quantità di memoria seguenti.By using AWE and the Locked Pages in Memory privilege, you can provide the following amounts of memory to the SQL ServerSQL Server Database Engine. La tabella seguente include una colonna per le versioni a 32 bit non più disponibili.(The following table includes a column for 32-bit versions which are no longer available.)

32 bit 132-bit 1 64 bit64-bit
Memoria convenzionaleConventional memory Tutte le edizioni di SQL ServerSQL Server .All SQL ServerSQL Server editions. Fino al limite dello spazio degli indirizzi virtuali di processo:Up to process virtual address space limit:
- 2 GB- 2 GB
- 3 GB con parametro di avvio /3gb 2- 3 GB with /3gb boot parameter 2
- 4 GB su WOW64 3- 4 GB on WOW64 3
Tutte le edizioni di SQL ServerSQL Server .All SQL ServerSQL Server editions. Fino al limite dello spazio degli indirizzi virtuali di processo:Up to process virtual address space limit:
- 7 TB con architettura IA64 (IA64 non è supportato in SQL Server 2012SQL Server 2012 e versioni successive)- 7 TB with IA64 architecture (IA64 not supported in SQL Server 2012SQL Server 2012 and above)
- Valore massimo del sistema operativo con architettura x64 4- Operating system maximum with x64 architecture 4
Meccanismo AWE (consente a SQL ServerSQL Server di superare il limite dello spazio degli indirizzi virtuali di processo nelle piattaforme a 32 bit)AWE mechanism (Allows SQL ServerSQL Server to go beyond the process virtual address space limit on 32-bit platform.) SQL ServerSQL Server edizioni Standard, Enterprise e Developer: il pool di buffer è in grado di accedere a una memoria limite di 64 GB. Standard, Enterprise, and Developer editions: Buffer pool is capable of accessing up to 64 GB of memory. Non applicabile 5Not applicable 5
Privilegio Blocco di pagine in memoria del sistema operativo (consente di bloccare la memoria fisica, impedendo il paging della memoria bloccata da parte del sistema operativo). 6Lock pages in memory operating system (OS) privilege (Allows locking physical memory, preventing OS paging of the locked memory.) 6 SQL ServerSQL Server edizioni Standard, Enterprise e Developer: necessari per il processo di SQL ServerSQL Server che usa il meccanismo AWE. process to use AWE mechanism. La memoria allocata tramite il meccanismo AWE non può essere trasferita.Memory allocated through AWE mechanism cannot be paged out.
La concessione di questo privilegio senza l'attivazione di AWE non ha alcun effetto sul server.Granting this privilege without enabling AWE has no effect on the server.
SQL ServerSQL Server edizioni Enterprise e Developer: consigliato, per evitare il paging del sistema operativo. Enterprise and Developer editions: Recommended, to avoid operating system paging. Potrebbe determinare un miglioramento delle prestazioni a seconda del carico di lavoro.Might provide a performance benefit depending on the workload. La quantità di memoria accessibile è simile a quella della memoria convenzionale.The amount of memory accessible is similar to conventional memory case.

1 Le versioni a 32 bit non sono disponibili a partire da SQL Server 2014SQL Server 2014.1 32-bit versions are not available starting with SQL Server 2014SQL Server 2014.
2 /3gb è un parametro di avvio del sistema operativo.2 /3gb is an operating system boot parameter. Per altre informazioni, consultare MSDN Library.For more information, visit the MSDN Library.
3 WOW64 (Windows on Windows 64) è una modalità che consente di eseguire la versione a 32 bit di SQL ServerSQL Server in un sistema operativo a 64 bit.3 WOW64 (Windows on Windows 64) is a mode in which 32-bit SQL ServerSQL Server runs on a 64-bit operating system.
4 SQL ServerSQL Server Standard Edition supports up to 128 GB.4 SQL ServerSQL Server Standard Edition supports up to 128 GB. SQL ServerSQL Server Enterprise Edition supporta il valore massimo del sistema operativo. Enterprise Edition supports the maximum of the operating system maximum..
5 Si noti che l'opzione sp_configure awe enabled è presente in SQL ServerSQL Servera 64 bit, ma viene ignorata.5 Note that the sp_configure awe enabled option was present on 64-bit SQL ServerSQL Server, but it is ignored.
6 Se viene concesso il privilegio Blocco di pagine in memoria (LPIM), sia su supporto a 32 bit per AWE che a 64 bit indipendente, è consigliabile impostare anche la memoria massima del server.6 If lock pages in memory privilege (LPIM) is granted (either on 32-bit for AWE support or on 64-bit by itself), we recommend also setting max server memory.

Nota

Le versioni precedenti di SQL ServerSQL Server potrebbero essere eseguite in un sistema operativo a 32 bit.Older versions of SQL ServerSQL Server could run on a 32-bit operating system. L'accesso a più di 4 GB di memoria in un sistema operativo a 32 bit richiede estensioni AWE (Address Windowing Extensions) per la gestione della memoria.Accessing more than 4 gigabytes of memory on a 32-bit operating system requires Address Windowing Extensions (AWE) to manage the memory. Queste estensioni non sono necessarie quando SQL ServerSQL Server è in esecuzione su sistemi operativi a 64 bit.This is not necessary when SQL ServerSQL Server is running on 64-bit operation systems. Per altre informazioni su AWE, vedere Spazio degli indirizzi di processo e Gestione della memoria per database di grandi dimensioni nella documentazione di SQL ServerSQL Server 2008.For more information about AWE, see Process Address Space and Managing Memory for Large Databases in the SQL ServerSQL Server 2008 documentation.

Gestione della memoria dinamicaDynamic Memory Management

Il comportamento predefinito per la gestione della memoria del motore di database di Microsoft SQL ServerSQL Server consiste nell'acquisire la quantità di memoria necessaria senza causare insufficienza di memoria nel sistema.The default memory management behavior of the Microsoft SQL ServerSQL Server Database Engine is to acquire as much memory as it needs without creating a memory shortage on the system. Nel motore di database questo comportamento è reso possibile tramite l'uso delle API di notifica della memoria di Microsoft Windows.The Database Engine does this by using the Memory Notification APIs in Microsoft Windows.

Lo spazio degli indirizzi virtuali di SQL ServerSQL Server può essere suddiviso in due aree distinte: lo spazio occupato dal pool di buffer e il resto.Virtual address space of SQL ServerSQL Server can be divided into two distinct regions: space occupied by the buffer pool and the rest. Se il meccanismo AWE è abilitato, il pool di buffer può risiedere nella memoria mappata AWE, offrendo spazio aggiuntivo per le pagine del database.If AWE mechanism is enabled, the buffer pool may reside in AWE mapped memory, providing additional space for database pages.

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. I componenti esterni che risiedono all'interno di un processo di SQL ServerSQL Server , ad esempio oggetti COM, che non sono consapevoli delle funzionalità di gestione della memoria di SQL ServerSQL Server , usano la memoria esterna allo spazio degli indirizzi virtuali occupato dal pool di buffer.External components that reside inside SQL ServerSQL Server process, such as COM objects, and not aware of the SQL ServerSQL Server memory management facilities, use memory outside of the virtual address space occupied by the buffer pool.

All'avvio di SQL ServerSQL Server , viene calcolata la dimensione dello spazio degli indirizzi virtuali per il pool di buffer in base a parametri come la quantità di memoria fisica nel sistema, il numero di thread del server e vari parametri di avvio.When SQL ServerSQL Server starts, it computes the size of virtual address space for the buffer pool based on a number of parameters such as amount of physical memory on the system, number of server threads and various startup parameters. In SQL ServerSQL Server viene riservata la quantità calcolata di spazio degli indirizzi virtuali del processo per il pool di buffer, ma viene acquisita solo la quantità di memoria fisica necessaria (ovvero ne viene eseguito il commit) per il carico corrente. reserves the computed amount of its process virtual address space for the buffer pool, but it acquires (commits) only the required amount of physical memory for the current load.

L'istanza continua quindi ad acquisire la memoria necessaria per supportare il carico di lavoro.The instance then continues to acquire memory as needed to support the workload. Man mano che altri utenti si connettono ed eseguono query, in SQL ServerSQL Server viene acquisita ulteriore memoria fisica su richiesta.As more users connect and run queries, SQL ServerSQL Server acquires the additional physical memory on demand. La memoria fisica continua a essere acquisita da un'istanza di SQL ServerSQL Server fino a quando viene raggiunto il limite di allocazione definito dall'opzione Memoria massima del server o fino a quando in Windows viene indicato che non è più disponibile memoria in eccesso. La memoria viene liberata quando viene superato il valore dell'impostazione Memoria minima del server e in Windows viene indicata un'insufficienza di memoria disponibile.A SQL ServerSQL Server instance continues to acquire physical memory until it either reaches its max server memory allocation target or Windows indicates there is no longer an excess of free memory; it frees memory when it has more than the min server memory setting, and Windows indicates that there is a shortage of free memory.

L'avvio di altre applicazioni in un computer in cui viene eseguita un'istanza di SQL ServerSQL Servercomporta l'utilizzo di ulteriore memoria e la quantità di memoria fisica disponibile scende al di sotto del valore di destinazione di SQL ServerSQL Server .As other applications are started on a computer running an instance of SQL ServerSQL Server, they consume memory and the amount of free physical memory drops below the SQL ServerSQL Server target. Nell'istanza di SQL ServerSQL Server l'utilizzo della memoria viene regolato automaticamente.The instance of SQL ServerSQL Server adjusts its memory consumption. Se un'altra applicazione viene arrestata e viene resa disponibile altra memoria, l'istanza di SQL ServerSQL Server aumenta le dimensioni della propria allocazione di memoria.If another application is stopped and more memory becomes available, the instance of SQL ServerSQL Server increases the size of its memory allocation. SQL ServerSQL Server può liberare e acquisire diversi megabyte di memoria al secondo, in modo che possa adattarsi rapidamente alle modifiche dell'allocazione della memoria. can free and acquire several megabytes of memory each second, allowing it to quickly adjust to memory allocation changes.

Effetti delle opzioni min server memory e max server memoryEffects of min and max server memory

Le opzioni di configurazione Memoria minima del server e Memoria massima del server stabiliscono il limite massimo e minimo della quantità di memoria usata dal pool di buffer del motore di database di Microsoft SQL ServerSQL Server .The min server memory and max server memory configuration options establish upper and lower limits to the amount of memory used by the buffer pool of the Microsoft SQL ServerSQL Server Database Engine. Il pool di buffer non acquisisce immediatamente la quantità di memoria specificata in Memoria minima del server.The buffer pool does not immediately acquire the amount of memory specified in min server memory. ma solo la memoria necessaria per l'inizializzazione.The buffer pool starts with only the memory required to initialize. Con l'aumentare del carico di lavoro da gestire, il motore di database continua ad acquisire la memoria necessaria per supportare il carico di lavoro.As the Database Engine workload increases, it keeps acquiring the memory required to support the workload. Il pool di buffer non libera la memoria acquisita fino a quando non viene raggiunta la quantità specificata in Memoria minima del server.The buffer pool does not free any of the acquired memory until it reaches the amount specified in min server memory. Quando viene raggiunto il limite impostato in Memoria minima del server, il pool di buffer usa quindi l'algoritmo standard per acquisire e liberare memoria nella misura necessaria.Once min server memory is reached, the buffer pool then uses the standard algorithm to acquire and free memory as needed. L'unica differenza è rappresentata dal fatto che nel pool di buffer la quantità di memoria allocata non scende mai al di sotto del livello specificato in Memoria minima del server, né viene mai acquisita una quantità di memoria superiore al livello specificato Memoria massima del server.The only difference is that the buffer pool never drops its memory allocation below the level specified in min server memory, and never acquires more memory than the level specified in max server memory.

Nota

SQL ServerSQL Server come processo acquisisce più memoria rispetto a quella specificata dall'opzione Memoria massima del server. as a process acquires more memory than specified by max server memory option. I componenti interni ed esterni possono allocare memoria al di fuori del pool di buffer, richiedendo ulteriore memoria, ma la memoria allocata al pool di buffer in genere rappresenta la parte di memoria maggiore utilizzata da SQL ServerSQL Server.Both internal and external components can allocate memory outside of the buffer pool, which consumes additional memory, but the memory allocated to the buffer pool usually represents the largest portion of memory consumed by SQL ServerSQL Server.

La quantità di memoria acquisita dal motore di database dipende interamente dal carico di lavoro assegnato all'istanza.The amount of memory acquired by the Database Engine is entirely dependent on the workload placed on the instance. È possibile che per un'istanza di SQL ServerSQL Server che elabora un numero ridotto di richieste, la quantità di memoria allocata rimanga sempre inferiore al valore di min server memory.A SQL ServerSQL Server instance that is not processing many requests may never reach min server memory.

Se si specifica lo stesso valore per Memoria minima del server e Memoria massima del server, quando la memoria allocata al Motore di database raggiunge tale valore, il motore di database smette di liberare e acquisire dinamicamente memoria per il pool di buffer.If the same value is specified for both min server memory and max server memory, then once the memory allocated to the Database Engine reaches that value, the Database Engine stops dynamically freeing and acquiring memory for the buffer pool.

Se un'istanza di SQL ServerSQL Server è in esecuzione in un computer in cui viene spesso avviata o arrestata l'esecuzione di altre applicazioni, è possibile che l'allocazione e la deallocazione della memoria da parte dell'istanza di SQL ServerSQL Server rallenti l'avvio delle altre applicazioni.If an instance of SQL ServerSQL Server is running on a computer where other applications are frequently stopped or started, the allocation and deallocation of memory by the instance of SQL ServerSQL Server may slow the startup times of other applications. Se SQL ServerSQL Server è solo una delle numerose applicazioni server in esecuzione in un singolo computer, può inoltre essere necessario che l'amministratore di sistema controlli la quantità di memoria allocata a SQL ServerSQL Server.Also, if SQL ServerSQL Server is one of several server applications running on a single computer, the system administrators may need to control the amount of memory allocated to SQL ServerSQL Server. In questi casi, è possibile usare le opzioni Memoria minima del server e Memoria massima del server per controllare la quantità di memoria che può essere impiegata da SQL ServerSQL Server .In these cases, you can use the min server memory and max server memory options to control how much memory SQL ServerSQL Server can use. Per altre informazioni, vedere Opzioni di configurazione del server Server Memory.For more information, see Server Memory Configuration Options.

I valori delle opzioni Memoria minima del server e Memoria massima del server vengono specificati in megabyte.The min server memory and max server memory options are specified in megabytes.

Memoria usata dalle specifiche degli oggetti di SQL ServerSQL ServerMemory Used by SQL ServerSQL Server Objects Specifications

Nella seguente tabella sono indicate le quantità di memoria approssimative usate da diversi oggetti in SQL ServerSQL Server.The following list describes the approximate amount of memory used by different objects in SQL ServerSQL Server. I valori riportati sono stimati e possono variare a seconda dell'ambiente e dalle modalità di creazione degli oggetti.The amounts listed are estimates and can vary depending on the environment and how objects are created.

  • Blocco: 64 byte + 32 byte per proprietarioLock: 64 bytes + 32 bytes per owner
  • Connessione utente: circa (3* network_packet_size + 94 kb)User connection: Approximately (3 *network_packet_size + 94 kb)

Le dimensioni del pacchetto di rete indicano la dimensione dei pacchetti TDS (Tabular Data Scheme) usati per le comunicazioni tra le applicazioni e il motore di database di SQL ServerSQL Server .The network packet size is the size of the tabular data scheme (TDS) packets that are used to communicate between applications and the SQL ServerSQL Server Database Engine. La dimensione predefinita del pacchetto è 4 KB e viene controllata dall'opzione di configurazione delle dimensioni del pacchetto di rete.The default packet size is 4 KB, and is controlled by the network packet size configuration option.

Quando è abilitato MARS (Multiple Active Result Set), la connessione utente corrisponde a circa (3 + 3 * num_logical_connections) * network_packet_size + 94 KB.When multiple active result sets (MARS) are enabled, the user connection is approximately (3 + 3 * num_logical_connections) * network_packet_size + 94 KB

Gestione del bufferBuffer Management

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.And 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. 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 la cache del buffer, detta anche 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 cache (also called the buffer pool), to reduce database file I/O.

Funzionamento della gestione del bufferHow Buffer Management Works

Un buffer è una pagina da 8 KB in memoria, ovvero delle stesse dimensioni di una pagina di dati o di indice.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. Gestione buffer consente di gestire le funzioni per la lettura delle pagine di dati o di indice dai file su disco del database nella cache buffer e la riscrittura sul disco delle pagine modificate.The buffer manager manages the functions for reading data or index pages from the database disk files into the buffer cache and writing modified pages back to disk. 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. 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. Per altre informazioni, vedere Lettura di pagine e Scrittura di pagine.For more information, see Reading Pages and Writing Pages.

All'avvio di SQL ServerSQL Server , viene calcolata la dimensione dello spazio degli indirizzi virtuali per la cache del buffer in base a parametri come la quantità di memoria fisica nel sistema, il numero massimo di thread del server configurati e vari parametri di avvio.When SQL ServerSQL Server starts, it computes the size of virtual address space for the buffer cache based on a number of parameters such as the amount of physical memory on the system, the configured number of maximum server threads, and various startup parameters. In SQL ServerSQL Server viene riservata la quantità calcolata di spazio degli indirizzi virtuali del processo per la cache del buffer (chiamata destinazione di memoria), ma viene acquisita solo la quantità di memoria fisica necessaria (ovvero ne viene eseguito il commit) per il carico corrente. reserves this computed amount of its process virtual address space (called the memory target) for the buffer cache, but it acquires (commits) only the required amount of physical memory for the current load. È possibile eseguire query sulle colonne bpool_commit_target e bpool_committed columns nella vista del catalogo sys.dm_os_sys_info per restituire il numero di pagine riservate come destinazione di memoria e il numero di pagine su cui attualmente viene eseguito il commit nella cache del buffer, rispettivamente.You can query the bpool_commit_target and bpool_committed columns in the sys.dm_os_sys_info catalog view to return the number of pages reserved as the memory target and the number of pages currently committed in the buffer cache, respectively.

L'intervallo tra l'avvio di SQL ServerSQL Server e il momento in cui alla cache del buffer viene allocata la memoria massima è detto processo di avvio.The interval between SQL ServerSQL Server startup and when the buffer cache obtains its memory target is called ramp-up. Durante questo intervallo le richieste di lettura riempiono i buffer in base alle esigenze.During this time, read requests fill the buffers as needed. Ad esempio, una richiesta di lettura di pagina singola riempie una singola pagina del buffer.For example, a single-page read request fills a single buffer page. Questo significa che il processo di avvio dipende dal numero e dal tipo di richieste del client.This means the ramp-up depends on the number and type of client requests. Il processo di avvio viene reso più rapido mediante la trasformazione delle richieste di lettura di pagina singola in richieste di otto pagine allineate.Ramp-up is expedited by transforming single-page read requests into aligned eight-page requests. Ciò consente un completamento del processo di avvio molto più rapido, in particolare nei computer con molta memoria.This allows the ramp-up to finish much faster, especially on machines with a lot of memory.

Gestione buffer utilizza la maggior parte della memoria nel processo di SQL ServerSQL Server e coopera pertanto con Gestione memoria per consentire agli altri componenti di utilizzare i relativi buffer.Because the buffer manager uses most of the memory in the SQL ServerSQL Server process, it cooperates with the memory manager to allow other components to use its buffers. Gestione buffer interagisce essenzialmente con i componenti seguenti:The buffer manager interacts primarily with the following components:

  • Strumento di gestione delle risorse, per controllare l'utilizzo globale della memoria e, nelle piattaforme a 32 bit, l'utilizzo dello spazio degli indirizzi.Resource manager to control overall memory usage and, in 32-bit platforms, to control address space usage.
  • Gestione database e il sistema operativo di SQL ServerSQL Server (SQLOS) per operazioni di I/O di file di basso livello.Database manager and the SQL ServerSQL Server Operating System (SQLOS) for low-level file I/O operations.
  • Strumento di gestione dei log per la registrazione write-ahead.Log manager for write-ahead logging.

Funzionalità supportateSupported Features

Gestione buffer supporta le caratteristiche seguenti:The buffer manager supports the following features:

  • Gestione buffer supporta NUMA (Non-Uniform Memory Access).The buffer manager is non-uniform memory access (NUMA) aware. Le pagine della cache buffer vengono distribuite tra i nodi hardware NUMA, consentendo a un thread di accedere a una pagina del buffer allocata nel nodo NUMA locale anziché dalla memoria esterna.Buffer cache pages are distributed across hardware NUMA nodes, which allows a thread to access a buffer page that is allocated on the local NUMA node rather than from foreign memory.
  • Gestione buffer supporta l'aggiunta di memoria a caldo, consentendo agli utenti di aggiungere memoria fisica senza riavviare il server.The buffer manager supports Hot Add Memory, which allows users to add physical memory without restarting the server.
  • Gestione buffer supporta pagine di grandi dimensioni su piattaforme a 64 bit.The buffer manager supports large pages on 64-bit platforms. Le dimensioni delle pagine sono specifiche della versione di Windows utilizzata.The page size is specific to the version of Windows.
  • In Gestione buffer sono disponibili strumenti di diagnostica aggiuntivi esposti tramite DMV.The buffer manager provides additional diagnostics that are exposed through dynamic management views. È possibile utilizzare queste viste per monitorare varie risorse del sistema operativo specifiche di SQL ServerSQL Server.You can use these views to monitor a variety of operating system resources that are specific to SQL ServerSQL Server. Ad esempio, è possibile usare la vista sys.dm_os_buffer_descriptors per monitorare le pagine nella cache buffer.For example, you can use the sys.dm_os_buffer_descriptors view to monitor the pages in the buffer cache.

I/O su discoDisk I/O

Gestione buffer esegue solo letture e scritture sul database.The buffer manager only performs reads and writes to the database. Altre operazioni su file e database, ad esempio apertura, chiusura, estensione e compattazione vengono eseguite dai componenti del gestore database e di File Manager.Other file and database operations such as open, close, extend, and shrink are performed by the database manager and file manager components.

Le operazioni di I/O su disco eseguite da Gestione buffer hanno le caratteristiche seguenti:Disk I/O operations by the buffer manager have the following characteristics:

  • Tutti gli I/O vengono eseguiti in modo asincrono. In questo modo, il thread che esegue la chiamata può continuare l'elaborazione mentre l'operazione di I/O viene eseguita in background.All I/Os are performed asynchronously, which allows the calling thread to continue processing while the I/O operation takes place in the background.
  • Tutti gli I/O vengono eseguiti nei thread che eseguono la chiamata a meno che non sia in uso l'opzione affinity I/O.All I/Os are issued in the calling threads unless the affinity I/O option is in use. L'opzione affinity I/O mask associa l'I/O su disco di SQL ServerSQL Server a un subset di CPU specificato.The affinity I/O mask option binds SQL ServerSQL Server disk I/O to a specified subset of CPUs. Negli ambienti SQL ServerSQL Server di fascia alta con elaborazione delle transazioni online (OLTP), questa estensione può migliorare le prestazioni dei thread di SQL ServerSQL Server che generano operazioni di I/O.In high-end SQL ServerSQL Server online transactional processing (OLTP) environments, this extension can enhance the performance of SQL ServerSQL Server threads issuing I/Os.
  • Gli I/O di più pagine vengono eseguiti con un I/O non sequenziale, che consente il trasferimento di dati da e verso aree di memoria non contigue.Multiple page I/Os are accomplished with scatter-gather I/O, which allows data to be transferred into or out of noncontiguous areas of memory. Questo significa che SQL ServerSQL Server può riempire o scaricare rapidamente la cache buffer evitando più richieste di I/O fisici.This means that SQL ServerSQL Server can quickly fill or flush the buffer cache while avoiding multiple physical I/O requests.

Richieste di I/O lunghiLong I/O Requests

Gestione buffer segnala qualsiasi richiesta di I/O che rimane in attesa per almeno 15 secondi.The buffer manager reports on any I/O request that has been outstanding for at least 15 seconds. In questo modo, l'amministratore di sistema può distinguere tra problemi di SQL ServerSQL Server e problemi del sottosistema I/O.This helps the system administrator distinguish between SQL ServerSQL Server problems and I/O subsystem problems. Il messaggio di errore 833 viene restituito e visualizzato nel log degli errori di SQL ServerSQL Server nel modo seguente:Error message 833 is reported and appears in the SQL ServerSQL Server error log as follows:

SQL Server has encountered %d occurrence(s) of I/O requests taking longer than %d seconds to complete on file [%ls] in database [%ls] (%d). The OS file handle is 0x%p. The offset of the latest long I/O is: %#016I64x.

Un I/O lungo può essere un'operazione di lettura o scrittura. Questa indicazione non viene attualmente inclusa nel messaggio.A long I/O may be either a read or a write; it is not currently indicated in the message. I messaggi relativi a I/O lunghi sono avvisi e non messaggi di errore.Long-I/O messages are warnings, not errors. Non indicano infatti problemi che si verificano in SQL ServerSQL ServerThey do not indicate problems with SQL ServerSQL Server. ma vengono restituiti per consentire all'amministratore di sistema di individuare in modo più rapido la causa dei tempi di risposta lenti di SQL ServerSQL Server , nonché distinguere i problemi esterni al controllo di SQL ServerSQL Server.The messages are reported to help the system administrator find the cause of poor SQL ServerSQL Server response times more quickly, and to distinguish problems that are outside the control of SQL ServerSQL Server. I messaggi relativi a I/O lunghi non richiedono quindi alcuna azione. È comunque consigliabile che l'amministratore di sistema verifichi il motivo per il quale per la richiesta di I/O è stato necessario un tempo così prolungato e se esso è giustificato.As such, they do not require any action, but the system administrator should investigate why the I/O request took so long, and whether the time is justifiable.

Cause delle richieste di I/O lunghiCauses of Long-I/O Requests

Un messaggio di I/O lungo indica che un I/O è bloccato definitivamente e non verrà mai completato (I/O perso) o semplicemente che non è stato ancora completato.A long-I/O message may indicate that an I/O is permanently blocked and will never complete (known as lost I/O), or merely that it just has not completed yet. Non è possibile capire dal messaggio di quale scenario si tratta, sebbene un I/O perso sia spesso causa di un timeout di latch.It is not possible to tell from the message which scenario is the case, although a lost I/O will often lead to a latch time-out.

Gli I/O lunghi indicano spesso un carico di lavoro di SQL ServerSQL Server troppo intenso per il sottosistema disco.Long I/Os often indicate a SQL ServerSQL Server workload that is too intense for the disk subsystem. Le situazioni seguenti possono indicare un sottosistema disco non adeguato:An inadequate disk subsystem may be indicated when:

  • Più messaggi di I/O lunghi vengono visualizzati nel log degli errori durante un carico di lavoro elevato di SQL ServerSQL Server .Multiple long I/O messages appear in the error log during a heavy SQL ServerSQL Server workload.
  • I contatori Perfmon indicano latenze prolungate del disco, lunghe code del disco o nessun tempo di inattività del disco.Perfmon counters show long disk latencies, long disk queues, or no disk idle time.

Gli I/O lunghi possono inoltre essere causati da un componente nel percorso di I/O (ad esempio, un driver, un controller o un firmware) che ritarda continuamente la risposta a una richiesta di I/O precedente privilegiando richieste più recenti, più vicine alla posizione corrente della testina.Long I/Os may also be caused by a component in the I/O path (for example, a driver, controller, or firmware) continually postponing servicing an old I/O request in favor of servicing newer requests that are closer to the current position of the disk head. La tecnica comune di elaborazione delle richieste che dà priorità alle richieste più vicine alla posizione corrente della testina di lettura/scrittura è detta "accodamento dei comandi nativi".The common technique of processing requests in priority based upon which ones are closest to the current position of the read/write head is known as "elevator seeking." Questo può essere difficile da verificare mediante lo strumento Monitor di sistema di Windows (PERFMON.EXE) in quanto la maggioranza degli I/O vengono gestiti immediatamente.This may be difficult to corroborate with the Windows System Monitor (PERFMON.EXE) tool because most I/Os are being serviced promptly. Le richieste di I/O lunghi possono essere ulteriormente complicate da carichi di lavoro che eseguono grandi quantità di I/O sequenziali, ad esempio backup e ripristino, analisi delle tabelle, ordinamento, creazione di indici, caricamenti bulk e azzeramento dei file.Long I/O requests can be aggravated by workloads that perform large amounts of sequential I/O, such as backup and restore, table scans, sorting, creating indexes, bulk loads, and zeroing out files.

Gli I/O lunghi isolati apparentemente non correlati a una delle condizioni precedenti possono essere causati da un problema hardware o di driver.Isolated long I/Os that do not appear related to any of the previous conditions may be caused by a hardware or driver problem. Il log eventi di sistema può contenere un evento correlato che consente di individuare il problema.The system event log may contain a related event that helps to diagnose the problem.

Rilevamento degli erroriError Detection

Per le pagine di database sono disponibili due meccanismi facoltativi, ovvero la protezione delle pagine incomplete e la protezione dei checksum, che consentono di assicurare l'integrità della pagina dal momento in cui viene scritta sul disco fino a quando viene letta di nuovo.Database pages can use one of two optional mechanisms that help insure the integrity of the page from the time it is written to disk until it is read again: torn page protection and checksum protection. Questi meccanismi offrono una modalità indipendente di verifica della correttezza non solo dell'archiviazione dei dati, ma anche di componenti hardware quali controller, driver, cavi e perfino del sistema operativo.These mechanisms allow an independent method of verifying the correctness of not only the data storage, but hardware components such as controllers, drivers, cables, and even the operating system. La protezione viene aggiunta alla pagina immediatamente prima della scrittura sul disco e viene verificata dopo la lettura della pagina dal disco.The protection is added to the page just before writing it to disk, and verified after it is read from disk.

Protezione delle pagine incompleteTorn Page Protection

La protezione delle pagine incomplete, disponibile in SQL ServerSQL Server 2000, rappresenta essenzialmente un modo di rilevare i danneggiamenti della pagina dovuti a interruzioni dell'alimentazione.Torn page protection, introduced in SQL ServerSQL Server 2000, is primarily a way of detecting page corruptions due to power failures. Ad esempio, un'interruzione dell'alimentazione imprevista può fare sì che solo una parte di una pagina venga scritta su disco.For example, an unexpected power failure may leave only part of a page written to disk. Quando si utilizza la protezione delle pagine incomplete, alla fine di ogni settore da 512 byte della pagina viene inserita una firma a 2 bit (dopo aver copiato i due bit originali nell'intestazione di pagina).When torn page protection is used, a 2-bit signature is placed at the end of each 512-byte sector in the page (after having copied the original two bits into the page header). La firma alterna il binario 01 e 10 con ogni scrittura, pertanto è sempre possibile sapere quando solo una parte dei settori è stata scritta sul disco: se un bit si trova nello stato errato quando la pagina viene successivamente letta, la pagina è stata scritta correttamente e viene rilevata una pagina incompleta.The signature alternates between binary 01 and 10 with every write, so it is always possible to tell when only a portion of the sectors made it to disk: if a bit is in the wrong state when the page is later read, the page was written incorrectly and a torn page is detected. Per il rilevamento delle pagine incomplete vengono utilizzate risorse minime, tuttavia non vengono rilevati tutti gli errori causati da problemi hardware del disco.Torn page detection uses minimal resources; however, it does not detect all errors caused by disk hardware failures.

Protezione dei checksumChecksum Protection

La protezione dei checksum, disponibile in SQL ServerSQL Server 2005, offre una più solida funzionalità di verifica dell'integrità dei dati.Checksum protection, introduced in SQL ServerSQL Server 2005, provides stronger data integrity checking. Un checksum viene calcolato per i dati in ogni pagina scritta e archiviato nell'intestazione di pagina.A checksum is calculated for the data in each page that is written, and stored in the page header. Ogni volta che una pagina con un checksum archiviato viene letta dal disco, il motore di database ricalcola il checksum per i dati della pagina e genera un errore 824 se il nuovo checksum è diverso da quello archiviato.Whenever a page with a stored checksum is read from disk, the database engine recalculates the checksum for the data in the page and raises error 824 if the new checksum is different from the stored checksum. La protezione dei checksum è in grado di rilevare più errori rispetto alla protezione delle pagine incomplete in quanto dipende da ogni byte della pagina. Tuttavia, si tratta di un'operazione a moderato consumo di risorse.Checksum protection can catch more errors than torn page protection because it is affected by every byte of the page, however, it is moderately resource intensive. Quando il checksum è abilitato, gli errori causati da interruzioni dell'alimentazione e da hardware o firmware difettosi possono essere rilevati ogni volta che Gestione buffer legge una pagina dal disco.When checksum is enabled, errors caused by power failures and flawed hardware or firmware can be detected any time the buffer manager reads a page from disk.

Il tipo di protezione di pagina utilizzato è un attributo del database che contiene la pagina.The kind of page protection used is an attribute of the database containing the page. La protezione dei checksum è la protezione predefinita per i database creati in SQL ServerSQL Server 2005 e versioni successive.Checksum protection is the default protection for databases created in SQL ServerSQL Server 2005 and later. Il meccanismo di protezione di pagina viene specificato al momento della creazione del database e può essere modificato utilizzando ALTER DATABASE.The page protection mechanism is specified at database creation time, and may be altered by using ALTER DATABASE. È possibile determinare l'impostazione corrente per la protezione di pagina eseguendo una query nella colonna page_verify_option della vista del catalogo sys.databases o nella proprietà IsTornPageDetectionEnabled della funzione DATABASEPROPERTYEX .You can determine the current page protection setting by querying the page_verify_option column in the sys.databases catalog view or the IsTornPageDetectionEnabled property of the DATABASEPROPERTYEX function. Se l'impostazione relativa alla protezione di pagina viene modificata, la nuova impostazione non viene immediatamente estesa all'intero database.If the page protection setting is changed, the new setting does not immediately affect the entire database. Il livello di protezione del database corrente viene infatti esteso alle pagine a ogni successiva scrittura.Instead, pages adopt the current protection level of the database whenever they are written next. Ciò significa che il database potrebbe essere costituito da pagine con tipi di protezione diversi.This means that the database may be composed of pages with different kinds of protection.

Informazioni sull'architettura NUMA (Non-Uniform Memory Access)Understanding Non-uniform Memory Access

Microsoft SQL ServerSQL Server supporta l'architettura NUMA (Non-Uniform Memory Access) e può essere utilizzato in modo efficace con hardware NUMA senza alcuna configurazione specifica.Microsoft SQL ServerSQL Server is non-uniform memory access (NUMA) aware, and performs well on NUMA hardware without special configuration. Con l'aumentare della velocità del clock e del numero di processori, diventa sempre più difficile ridurre la latenza di memoria necessaria per utilizzare questa ulteriore capacità di elaborazione.As clock speed and the number of processors increase, it becomes increasingly difficult to reduce the memory latency required to use this additional processing power. Per ovviare a questo problema, i fornitori di hardware offrono cache L3 di grandi dimensioni. Si tratta, tuttavia, di una soluzione soggetta a limiti.To circumvent this, hardware vendors provide large L3 caches, but this is only a limited solution. L'architettura NUMA offre una soluzione scalabile per questo problema.NUMA architecture provides a scalable solution to this problem. SQL ServerSQL Server è stato progettato per l'uso ottimale in computer basati su NUMA senza che sia necessario apportare alcuna modifica alle applicazioni. has been designed to take advantage of NUMA-based computers without requiring any application changes. Per altre informazioni, vedere Procedura: Configurazione di SQL Server per l'uso di Soft-NUMA.For more information, see How to: Configure SQL Server to Use Soft-NUMA.

Vedere ancheSee Also

Lettura di pagine Reading Pages
Scrittura di pagine Writing Pages