Database tempdb
Il database di sistema tempdb è una risorsa globale disponibile per tutti gli utenti connessi all'istanza di SQL Server e viene usata per contenere quanto segue:
Oggetti utente temporanei creati in modo esplicito, ad esempio tabelle temporanee globali o locali, stored procedure temporanee, variabili di tabella o cursori.
Oggetti interni creati dal motore di database SQL Server, ad esempio, tabelle di lavoro per archiviare i risultati intermedi per gli spool o l'ordinamento.
Versioni di riga generate dalle transazioni di modifica dei dati in un database in cui viene usato il Read committed tramite isolamento del controllo delle versioni delle righe o transazioni di isolamento dello snapshot.
Versioni di riga generate dalle transazioni di modifica dei dati per le caratteristiche, ad esempio le operazioni sugli indici online, la caratteristica MARS (Multiple Active Result Set) e i trigger AFTER.
In tempdb viene registrato un numero minimo di operazioni Consente il rollback delle transazioni. Tempdb viene ricreato ogni volta che viene avviata SQL Server in modo che il sistema inizi sempre con una copia pulita del database. Poiché le tabelle e le stored procedure temporanee vengono eliminate automaticamente al momento della disconnessione e poiché al momento della chiusura del sistema non vi sono connessioni attive, Pertanto, non c'è mai nulla in tempdb da una sessione di SQL Server a un'altra. Le operazioni di backup e ripristino non sono consentite in tempdb.
Proprietà fisiche di tempdb
Nella tabella seguente sono elencati i valori iniziali di configurazione dei dati e dei file di log di tempdb . Le dimensioni di questi file possono variare leggermente per le diverse edizioni di SQL Server.
File | Nome logico | Nome fisico | Aumento di dimensioni del file |
---|---|---|---|
Dati primari | tempdev | tempdb.mdf | Crescita automatica del 10% fino a quando il disco risulta pieno |
File di log | templog | templog.ldf | Aumento automatico delle dimensioni del 10% fino a un massimo di 2 TB |
Le dimensioni di tempdb possono influire sulle prestazioni di un sistema. Ad esempio, se le dimensioni di tempdb sono troppo piccole, l'elaborazione del sistema potrebbe essere troppo occupata con la creazione automatica del database per supportare i requisiti del carico di lavoro ogni volta che si avvia SQL Server. È possibile evitare questo sovraccarico aumentando le dimensioni di tempdb.
Miglioramenti delle prestazioni in tempdb
In SQL Server, le prestazioni di tempdb sono migliorate nei modi seguenti:
È possibile memorizzare nella cache tabelle temporanee e variabili di tabella. La memorizzazione nella cache consente di eseguire molto rapidamente le operazioni di eliminazione e creazione degli oggetti temporanei e di ridurre i problemi di contesa nell'allocazione delle pagine.
Il protocollo di latch delle pagine di allocazione è stato migliorato. In questo modo è possibile ridurre il numero di latch di aggiornamento (UP) usati.
L'overhead di registrazione per il database tempdb è stato ridotto. In questo modo si riduce l'utilizzo di banda per operazioni di I/O su disco nel file di log di tempdb .
L'algoritmo per l'allocazione di pagine miste in tempdb è migliorato.
Spostamento dei dati e dei file di log di tempdb
Per spostare i file di dati e di log tempdb , vedere Spostare i database di sistema.
Opzioni di database
La tabella seguente elenca il valore predefinito per ogni opzione di database nel database tempdb e indica se l'opzione può essere modificata. Per visualizzare le impostazioni correnti di queste opzioni, usare la vista del catalogo sys.databases .
Opzione di database | Valore predefinito | Modificabile |
---|---|---|
ALLOW_SNAPSHOT_ISOLATION | OFF | Sì |
ANSI_NULL_DEFAULT | OFF | Sì |
ANSI_NULLS | OFF | Sì |
ANSI_PADDING | OFF | Sì |
ANSI_WARNINGS | OFF | Sì |
ARITHABORT | OFF | Sì |
AUTO_CLOSE | OFF | No |
AUTO_CREATE_STATISTICS | ON | Sì |
AUTO_SHRINK | OFF | No |
AUTO_UPDATE_STATISTICS | ON | Sì |
AUTO_UPDATE_STATISTICS_ASYNC | OFF | Sì |
CHANGE_TRACKING | OFF | No |
CONCAT_NULL_YIELDS_NULL | OFF | Sì |
CURSOR_CLOSE_ON_COMMIT | OFF | Sì |
CURSOR_DEFAULT | GLOBAL | Sì |
Opzioni relative alla disponibilità del database | ONLINE MULTI_USER READ_WRITE |
No No No |
DATE_CORRELATION_OPTIMIZATION | OFF | Sì |
DB_CHAINING | ON | No |
ENCRYPTION | OFF | No |
NUMERIC_ROUNDABORT | OFF | Sì |
PAGE_VERIFY | CHECKSUM per nuove installazioni di SQL Server. NONE per gli aggiornamenti di SQL Server. |
Sì |
PARAMETERIZATION | SEMPLICE | Sì |
QUOTED_IDENTIFIER | OFF | Sì |
READ_COMMITTED_SNAPSHOT | OFF | No |
RECOVERY | SEMPLICE | No |
RECURSIVE_TRIGGERS | OFF | Sì |
Opzioni relative a Service Broker | ENABLE_BROKER | Sì |
TRUSTWORTHY | OFF | No |
Per una descrizione di queste opzioni di database, vedere Opzioni ALTER DATABASE SET (Transact-SQL).
Restrizioni
Le operazioni seguenti non possono essere eseguite nel database tempdb :
Aggiunta di filegroup.
Backup o ripristino del database.
Modifica delle regole di confronto. Le regole di confronto predefinite corrispondono a quelle del server.
Modifica del proprietario del database. tempdb è di proprietà di sa.
Creazione di uno snapshot del database.
Eliminazione del database.
Eliminazione dell'utente guest dal database.
Abilitazione dell'acquisizione dei dati delle modifiche.
Partecipazione al mirroring del database.
Rimozione del filegroup primario, del file di dati primario o del file di log.
Ridenominazione del filegroup primario o del database.
Esecuzione di DBCC CHECKALLOC.
Esecuzione di DBCC CHECKCATALOG.
Impostazione del database su OFFLINE.
Impostazione del database o del filegroup primario su READ_ONLY.
Autorizzazioni
Qualsiasi utente può creare oggetti temporanei in tempdb. Gli utenti possono accedere solo ai propri oggetti, a meno che non ottengano ulteriori autorizzazioni. È possibile revocare l'autorizzazione per la connessione a tempdb per impedire a un utente di utilizzarlo, tuttavia questa operazione non è consigliabile poiché in alcune operazioni di routine è richiesto l'utilizzo di tempdb.
Contenuto correlato
Opzione SORT_IN_TEMPDB per gli indici
sys.master_files (Transact-SQL)