Pianificazione delle capacità per tempdb
Data aggiornamento: 14 aprile 2006
In questo argomento vengono descritte le modifiche apportate al database di sistema tempdb in SQL Server 2005 e vengono indicate le linee guida per la determinazione della quantità di spazio su disco da destinare a tempdb. Vengono inoltre forniti suggerimenti su come configurare tempdb per ottenere prestazioni ottimali in ambiente di produzione, nonché informazioni su come monitorare l'utilizzo dello spazio di tempdb.
In SQL Server 2005 tempdb richiede più spazio su disco rispetto alle versioni precedenti di SQL Server, per le ragioni seguenti:
- Alcune nuove funzionalità di SQL Server 2005 utilizzano tempdb.
- Alcune funzionalità che utilizzano tempdb nelle versioni precedenti di SQL Server possono richiedere più spazio su disco per tempdb in SQL Server 2005.
- Alcune funzionalità che non utilizzano tempdb nelle versioni precedenti di SQL Server utilizzano tempdb in SQL Server 2005.
A causa di tali modifiche, quando si esegue l'aggiornamento a SQL Server 2005 è necessario destinare a tempdb una quantità di spazio su disco sufficiente a sostenere il carico di lavoro di produzione e a soddisfare gli ulteriori requisiti di spazio su disco delle funzionalità di SQL Server che utilizzano tempdb.
Modalità di utilizzo di tempdb
Il database di sistema tempdb è una risorsa globale disponibile a tutti gli utenti connessi a un'istanza di SQL Server. Il database tempdb viene utilizzato per memorizzare gli oggetti utente, gli oggetti interni e gli archivi delle versioni.
Oggetti utente
Gli oggetti utente vengono creati esplicitamente dall'utente. Tali oggetti possono trovarsi nell'ambito di una sessione utente o nell'ambito della routine in cui viene creato l'oggetto. Una routine è una stored procedure, un trigger o una funzione definita dall'utente. Gli oggetti utente rientrano in una delle categorie seguenti:
- Tabelle e indici definiti dall'utente
- Tabelle e indici di sistema
- Tabelle e indici temporanei globali
- Tabelle e indici temporanei locali
- Variabili di tabella
- Tabelle restituite da funzioni valutate a livello di tabella
Oggetti interni
Gli oggetti interni vengono creati in base alle necessità dal Motore di database di SQL Server per l'elaborazione delle istruzioni di SQL Server. Tali oggetti vengono creati ed eliminati all'interno dell'ambito di un'istruzione e rientrano in una delle categorie seguenti:
- Tabelle di lavoro per le operazioni di spooling o di cursore e per le archiviazioni temporanee connesse alle operazioni su oggetti di grandi dimensioni (LOB, Large Object) .
- File di lavoro per operazioni hash join o hash aggregate.
- Risultati intermedi dell'ordinamento per operazioni quali la creazione o la ricostruzione di indici (se SORT_IN_TEMPDB è specificato) o per alcune query GROUP BY, ORDER BY o UNION.
Ogni oggetto interno utilizza un minimo di nove pagine: una pagina IAM e un'estensione di otto pagine. Per ulteriori informazioni sulle pagine e sulle estensioni, vedere Pagine ed extent.
Archivi delle versioni
Un archivio delle versioni è un insieme di pagine di dati che mantiene righe di dati utilizzate dalle funzionalità che supportano il controllo delle versioni delle righe. In SQL Server 2005 vengono utilizzati due archivi delle versioni: uno comune e uno per la creazione di indici in linea. Gli archivi delle versioni contengono:
- Le versioni delle righe generate dalle transazioni di modifica dei dati in un database che utilizza snapshot o Read committed con utilizzo dei livelli di isolamento basati sul controllo delle versioni delle righe.
- Versioni delle righe generate dalle transazioni che modificano i dati per funzionalità quali operazioni sugli indici in linea, MARS (Multiple Active Result Sets) e trigger AFTER.
Nella tabella seguente vengono elencate le funzionalità di SQL Server che creano oggetti utente, oggetti interni o versioni delle righe in tempdb. Quando possibile, vengono anche indicati i metodi per la stima dell'utilizzo di spazio su disco.
Funzionalità | Utilizzo di tempdb | Informazioni aggiuntive |
---|---|---|
Operazioni bulkload con trigger attivati |
In SQL Server 2005, quando i trigger sono attivati, è possibile ottimizzare le importazioni di massa. Per i trigger che aggiornano o eliminano le transazioni viene utilizzato il controllo delle versioni delle righe. Una copia di ogni riga eliminata o aggiornata viene aggiunta all'archivio delle versioni. Vedere "Trigger" di seguito in questa tabella. |
|
Query delle espressioni di tabella comune |
Un'espressione di tabella comune può essere considerata come un set di risultati temporaneo definito all'interno dell'ambito di esecuzione di una singola istruzione SELECT, INSERT, UPDATE, DELETE o CREATE VIEW. Quando il piano di query per una query delle espressioni di tabella comune utilizza un operatore spool per salvare i risultati delle query intermedie, Motore di database crea una tabella di lavoro in tempdb per supportare questa operazione. |
|
Cursori |
I cursori gestiti da keyset e i cursori statici utilizzano tabelle di lavoro che vengono create nel database tempdb. I cursori gestiti da keyset archiviano in queste tabelle il set di chiavi che identifica le righe nel cursore, mentre i cursori statici vi archiviano l'intero set dei risultati del cursore stesso. L'utilizzo di spazio su disco può variare in base al piano di query adottato. Se il piano di query è uguale a quello delle versioni precedenti di SQL Server, l'utilizzo di spazio su disco sarà quasi identico. |
|
Posta elettronica database |
Vedere "Service Broker" di seguito in questa tabella. |
|
DBCC CHECKDB |
DBCC CHECKDB utilizza le tabelle di lavoro di tempdb per mantenere i risultati intermedi e per le operazioni di ordinamento. L'utilizzo di spazio su disco per DBCC CHECKDB è maggiore, a causa delle seguenti modifiche del funzionamento di DBCC CHECK:
Per determinare i requisiti di spazio su disco di tempdb per l'operazione, eseguire DBCC CHECKDB WITH ESTIMATE_ONLY. |
|
Notifiche di eventi |
Vedere "Service Broker" di seguito in questa tabella. |
|
Indici |
Quando si crea o si ricostruisce un indice (in linea o non in linea) e si imposta l'opzione SORT_IN_TEMPDB su ON, si indica al Motore di database di utilizzare tempdb per l'archiviazione dei risultati intermedi dell'ordinamento utilizzati per la creazione dell'indice. Quando la specifica di SORT_IN_TEMPDB produce un ordinamento, è necessario che tempdb disponga di spazio su disco tale da contenere l'indice più grande, più ulteriore spazio pari al valore dell'opzione index create memory. Per ulteriori informazioni, vedere Esempio di spazio su disco per gli indici. Le operazioni sugli indici non in linea che non utilizzano funzionalità di SQL Server 2005 comportano un utilizzo di spazio su disco pari a quello delle precedenti versioni di SQL Server. Modifiche all'utilizzo di tempdb in SQL Server 2005 In SQL Server 2005 le tabelle e gli indici possono essere partizionati. Per gli indici partizionati, se l'opzione SORT_IN_TEMPDB è specificata e l'indice è allineato alla tabella di base, tempdb deve disporre di spazio sufficiente a contenere i risultati dell'ordinamento intermedio della partizione più grande. Se l'indice non è allineato, tempdb deve disporre di spazio sufficiente a contenere i risultati dell'ordinamento intermedio di tutte le partizioni. Per ulteriori informazioni, vedere Linee guida specifiche per gli indici partizionati. Le operazioni sull'indice in linea utilizzano il controllo delle versioni delle righe per isolare l'operazione sull'indice dagli effetti delle modifiche eseguite da altre transazioni. In questo modo si evita di dover richiedere blocchi di condivisione sulle righe che sono state lette. Le operazioni utente simultanee di aggiornamento ed eliminazione durante le operazioni sugli indici in linea richiedono spazio per i record di versione in tempdb. Quando le operazioni sugli indici in linea utilizzano SORT_IN_TEMPDB e producono un ordinamento, è necessario che tempdb disponga di ulteriore spazio su disco, come descritto in precedenza per i risultati di ordinamento intermedi. Per le operazioni sugli indici in linea che consistono nella creazione, nell'eliminazione o nella ricostruzione di un indice cluster è inoltre necessario spazio su disco aggiuntivo per la creazione e il mantenimento di un indice di mapping temporaneo. Per ulteriori informazioni, vedere Requisiti di spazio su disco per operazioni DLL sugli indici. |
tempdb e creazione dell'indice Linee guida specifiche per gli indici partizionati Requisiti di spazio su disco per operazioni DLL sugli indici |
Variabili e parametri di tipo LOB (Large Object) |
I tipi di dati LOB sono varchar(max), nvarchar(max), varbinary(max)text, ntext, image e xml. Tali tipi possono avere dimensioni fino a 2 GB e possono essere utilizzati come variabili o parametri nelle stored procedure, nelle funzioni definite dall'utente, nei batch o nelle query. Quando contengono valori piccoli, le variabili e i parametri definiti come tipo di dati LOB vengono archiviati nella memoria principale. I valori più grandi vengono invece archiviati in tempdb. Le variabili e i parametri LOB archiviati in tempdb vengono gestiti come oggetti interni. È possibile eseguire una query sulla vista a gestione dinamica sys.dm_db_session_space_usage per ottenere un report delle pagine allocate agli oggetti interni per una data sessione. Alcune funzioni per i valori stringa, come SUBSTRING o REPLICATE, archiviano dati temporanei intermedi in tempdb quando operano con valori LOB. Allo stesso modo, quando nel database è attivato un livello di isolamento delle transazioni basato sul controllo delle versioni e vengono apportate modifiche a oggetti di grandi dimensioni, il frammento modificato dell'oggetto LOB viene copiato nell'archivio delle versioni in tempdb. |
|
MARS (Multiple Active Result Set) |
In SQL Server 2005 è possibile ottenere più set dei risultati attivi in una sola connessione, solitamente noti come MARS (Multiple Active Result Set). Se una sessione MARS genera un'istruzione di modifica di dati (ad esempio INSERT, UPDATE o DELETE) in un momento in cui è presente un set di risultati attivo, le righe interessate dalla modifica vengono inserite nell'archivio delle versioni in tempdb. Vedere "Controllo delle versioni delle righe" di seguito in questa tabella. |
|
Notifiche delle query |
Vedere "Service Broker" di seguito in questa tabella. |
|
Query |
Le query che contengono istruzioni SELECT, INSERT, UPDATE e DELETE possono utilizzare oggetti interni per archiviare risultati intermedi di operazioni di ordinamento, hash join o hash aggregate. In SQL Server 2005, quando un piano di esecuzione della query è memorizzato nella cache, vengono memorizzate nella cache anche le tabelle di lavoro utilizzate dal piano. Quando una tabella di lavoro viene memorizzata nella cache, la tabella viene troncata e nove pagine restano nella cache per un riutilizzo successivo. Vengono così incrementate le prestazioni della successiva esecuzione della query. Se la memoria del sistema tende a esaurirsi, il Motore di database può rimuovere il piano di esecuzione ed eliminare le relative tabelle di lavoro. |
|
Controllo delle versioni delle righe |
Il controllo delle versioni delle righe è un framework generale di SQL Server 2005 a supporto delle funzionalità seguenti.
Le versioni delle righe vengono mantenute nell'archivio delle versioni di tempdb per tutto il tempo in cui una transazione attiva deve accedervi. Il contenuto dell'archivio delle versioni corrente viene restituito in sys.dm_tran_version_store. Le pagine dell'archivio delle versioni vengono tracciate a livello di file in quanto risorse globali. Per visualizzare la dimensione corrente dell'archivio delle versioni, è possibile utilizzare la colonna version_store_reserved_page_count in sys.dm_db_file_space_usage. È necessario considerare l'operazione di pulitura dell'archivio delle versioni come la transazione con esecuzione più lunga che deve accedere alla versione precedente. Per individuare la transazione con esecuzione più lunga relativa alla pulitura dell'archivio delle versioni, visualizzare la colonna elapsed_time_seconds in sys.dm_tran_active_snapshot_database_transactions. I contatori Spazio disponibile in tempdb (KB) e Dimensioni archivio versioni (KB) nell'oggetto Transactions possono essere utilizzati per monitorare la dimensione e la velocità di crescita dell'archivio delle versioni delle righe contenuto in tempdb. Per ulteriori informazioni, vedere Oggetto Transactions di SQL Server. Per operare una stima dello spazio da destinare al controllo delle versioni delle righe in tempdb, è innanzitutto necessario considerare che nell'archivio delle versioni verranno memorizzate tutte le modifiche eseguite durante una transazione attiva. Una transazione snapshot avviata in seguito potrà pertanto accedere alle versioni precedenti. Se inoltre c'è una transazione snapshot attiva, dovranno essere mantenuti anche tutti i dati generati per l'archivio delle versioni dalle transazioni attive nel momento in cui ha inizio lo snapshot. Di seguito è riportata una formula di base: [Dimensione dell'archivio delle versioni] = 2 * [Dati generati per l'archivio delle versioni ogni minuto] * [Durata di esecuzione massima (in minuti) della transazione] |
Informazioni sui livelli di isolamento basati sul controllo delle versioni delle righe Utilizzo delle risorse di controllo delle versioni delle righe |
Service Broker |
Service Broker consente agli sviluppatori la creazione di applicazioni asincrone a regime di controllo libero in cui componenti indipendenti concorrono all'esecuzione di un'attività. Tali componenti delle applicazioni si scambiano messaggi contenenti informazioni necessarie per il completamento dell'attività. Service Broker utilizza in modo esplicito tempdb per mantenere il contesto del dialogo esistente che non può rimanere in memoria. La dimensione è di circa 1 KB per dialogo. Service Broker utilizza inoltre in modo implicito tempdb memorizzando nella cache gli oggetti nel contesto di esecuzione delle query, come le tabelle di lavoro che vengono utilizzate per gli eventi timer e le conversazioni recapitate in background. La posta elettronica database, le notifiche degli eventi e le notifiche delle query utilizzano Service Broker in modo implicito. |
|
Stored procedure |
Le stored procedure possono creare oggetti utente quali le tabelle globali o locali e gli indici, le variabili o i parametri relativi. In SQL Server 2005 gli oggetti temporanei delle stored procedure possono essere memorizzati nella cache per ottimizzare le operazioni che li eliminano e li creano. Questo può accrescere i requisiti di spazio su disco di tempdb. Per ogni oggetto temporaneo vengono archiviate fino a nove pagine per un utilizzo successivo. Vedere "Tabelle temporanee e variabili table" di seguito in questa tabella. |
|
Tabelle temporanee e variabili table
|
Le tabelle temporanee e le variabili table vengono archiviate in tempdb. I requisiti di spazio su disco per gli oggetti tabelle temporanee sono uguali a quelli delle versioni precedenti di SQL Server. Il metodo per la stima della dimensione di una tabella temporanea è uguale a quello utilizzato per la stima della dimensione di una tabella standard. Per ulteriori informazioni, vedere Stima delle dimensioni di una tabella. Le variabili table funzionano in modo analogo alle variabili locali. Una variabile table è di tipo table e viene principalmente utilizzata per l'archiviazione temporanea di un set di righe restituite come set di risultati di una funzione valutata a livello di tabella. Lo spazio su disco necessario per mantenere una variabile table dipende dalla dimensione della variabile dichiarata e dal valore archiviato nella variabile. In SQL Server 2005 le variabili e le tabelle temporanee locali vengono memorizzate nella cache quando sono soddisfatte le condizioni seguenti:
Quando una tabella temporanea o una variabile table viene memorizzata nella cache, l'oggetto temporaneo non viene eliminato al termine dell'utilizzo, bensì viene troncato. Fino a nove pagine vengono archiviate e riutilizzate in seguito, quando l'oggetto chiamante viene eseguito di nuovo. La memorizzazione nella cache consente un'esecuzione molto più veloce delle operazioni di eliminazione e creazione degli oggetti e riduce la contesa per l'allocazione delle pagine. Per prestazioni ottimali, è consigliabile calcolare lo spazio su disco richiesto per le variabili table o per le tabelle temporanee locali memorizzate nella cache in tempdb utilizzando la formula seguente: 9 pagine per ogni tabella temporanea * numero medio di tabelle temporanee per procedura * numero massimo di esecuzioni contemporanee della procedura |
|
Trigger |
Nelle versioni precedenti di SQL Server, la logica dei trigger era basata sui record di log e tempdb non veniva utilizzata. In SQL Server 2005 le tabelle inserted e deleted che vengono utilizzate nei trigger AFTER vengono create in tempdb. Viene pertanto eseguito il controllo delle versioni delle righe aggiornate o eliminate dal trigger. Sono tali tutte le righe che vengono modificate dall'istruzione che ha attivato il trigger. Non viene eseguito il controllo delle versioni delle righe inserite dal trigger. I trigger INSTEAD OF utilizzano tempdb in modo analogo alle query. L'utilizzo di spazio su disco per i trigger INSTEAD OF è uguale a quello delle versioni precedenti di SQL Server. Vedere "Query" più indietro in questa tabella. Quando si esegue il caricamento di massa con i trigger attivati, all'archivio delle versioni viene aggiunta una copia di ogni riga eliminata o aggiornata. |
Ottimizzazione delle prestazioni dell'importazione di massa Utilizzo delle risorse di controllo delle versioni delle righe |
Funzioni definite dall'utente |
Le funzioni definite dall'utente possono creare oggetti utente temporanei quali le tabelle globali o locali e gli indici, le variabili o i parametri relativi. La tabella restituita di una funzione valutata a livello di tabella viene ad esempio archiviata in tempdb. In SQL Server 2005 è possibile utilizzare la maggior parte dei tipi di dati LOB per i parametri e i valori restituiti delle funzioni scalari e delle funzioni valutate a livello di tabella. Un valore restituito può ad esempio essere di tipo xml o varchar(max). Vedere "Variabili e parametri di tipo LOB (Large object)" più indietro in questa tabella. In SQL Server 2005 gli oggetti temporanei delle funzioni definite dall'utente valutate a livello di tabella possono essere memorizzati nella cache per ottimizzare le operazioni che li eliminano e li creano. Vedere "Tabelle temporanee e variabili table" più indietro in questa tabella. |
|
XML |
Le variabili e i parametri di tipo xml possono contenere fino a 2 GB. Quando contengono valori piccoli, vengono archiviati nella memoria principale. I valori più grandi vengono invece archiviati in tempdb. Vedere "Variabili e parametri di tipo LOB (Large object)" più indietro in questa tabella. La stored procedure di sistema sp_xml_preparedocument crea una tabella di lavoro in tempdb. Il parser MSXML utilizza la tabella di lavoro per archiviare il documento XML analizzato. I requisiti di spazio su disco di tempdb sono orientativamente proporzionali alla dimensione del documento XML specificato quando la stored procedure viene eseguita. |
Pianificazione della capacità per gli aggiornamenti a SQL Server 2005
La determinazione delle dimensioni appropriate per tempdb in un ambiente di produzione dipende da molti fattori. Come descritto più indietro in questo argomento, tali fattori includono il carico di lavoro esistente e le funzionalità di SQL Server utilizzate. È consigliabile analizzare il carico di lavoro esistente eseguendo le attività seguenti in un ambiente di test di SQL Server 2005:
- Attivare l'aumento automatico delle dimensioni di tempdb.
- Eseguire singole query o file di traccia del carico di lavoro e monitorare l'utilizzo dello spazio di tempdb.
- Eseguire operazioni di manutenzione degli indici, come la ricostruzione degli indici, e monitorare lo spazio occupato da tempdb.
- Impiegare i valori di utilizzo dello spazio ottenuti ai passaggi precedenti per prevedere i requisiti del carico di lavoro totale. Correggere poi tali valori in funzione delle attività simultanee previste e quindi impostare conseguentemente la dimensione di tempdb.
Per ulteriori informazioni sul monitoraggio dello spazio di tempdb, vedere Risoluzione dei problemi relativi allo spazio su disco insufficiente in tempdb. Per ulteriori informazioni sulla stima dell'utilizzo di tempdb durante le operazioni sugli indici, vedere Esempio di spazio su disco per gli indici.
Configurazione di tempdb per gli ambienti di produzione
Per ottenere prestazioni di tempdb ottimali, attenersi alle linee guida e alle indicazioni offerte in Ottimizzazione delle prestazioni di tempdb.
Come monitorare l'utilizzo di tempdb
L'esaurimento dello spazio disponibile in tempdb può provocare interruzioni significative nell'ambiente di produzione di SQL Server e può impedire alle applicazioni di completare le operazioni in esecuzione. In SQL Server 2005 è possibile utilizzare la vista a gestione dinamica sys.dm_db_file_space_usage per monitorare lo spazio su disco utilizzato da queste funzionalità nei file di tempdb. Per monitorare l'allocazione delle pagine o l'attività di deallocazione in tempdb a livello di sessione o di attività, è inoltre possibile utilizzare le viste a gestione dinamica sys.dm_db_session_space_usage e sys.dm_db_task_space_usage. Queste viste consentono di identificare le query, le tabelle temporanee o le variabili di tabella che utilizzano una grande quantità di spazio su disco in tempdb. Sono anche disponibili diversi contatori che consentono di monitorare lo spazio libero disponibile in tempdb e le risorse che stanno utilizzando tempdb. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi allo spazio su disco insufficiente in tempdb.
Vedere anche
Attività
Risoluzione dei problemi relativi allo spazio su disco insufficiente in tempdb
Concetti
Database tempdb
Ottimizzazione delle prestazioni di tempdb
Altre risorse
Ottimizzazione dei database
Working with tempdb in SQL Server 2005
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|