Condividi tramite


Database tempdb

Il database di sistema tempdb è una risorsa globale disponibile a tutti gli utenti connessi all'istanza di SQL Server e viene utilizzata per contenere gli elementi seguenti:

  • 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 di SQL Server, ad esempio tabelle di lavoro in cui archiviare i risultati intermedi delle operazioni di spooling o di ordinamento.

  • Versioni di riga generate dalle transazioni di modifica dei dati in un database in cui viene utilizzato il Read committed tramite isolamento 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 ai fini del rollback delle transazioni. tempdb viene creato nuovamente a ogni avvio di SQL Server in modo che il sistema venga sempre avviato 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, nessuna parte del database tempdb viene salvata per le sessioni successive di SQL Server. Le operazioni di backup e di ripristino non sono consentite nel database 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 a seconda dell'edizione 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

Log

templog

templog.ldf

Aumento automatico delle dimensioni del 10% fino a un massimo di 2 TB

Le dimensioni del database tempdb possono influire sulle prestazioni di un sistema. Se ad esempio le dimensioni di tempdb sono eccessivamente ridotte, è possibile che l'elaborazione del sistema sia troppo occupata con l'aumento automatico delle dimensioni del database per supportare i requisiti del carico di lavoro a ogni avvio di SQL Server. Per ovviare a questo overhead, aumentare le dimensioni di tempdb. Per ulteriori informazioni, vedere Ottimizzazione delle prestazioni di tempdb e Pianificazione delle capacità per tempdb.

Miglioramenti delle prestazioni in tempdb

In SQL Server le prestazioni di tempdb sono state migliorate come segue:

  • È 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) utilizzati.

  • 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 delle pagine miste in tempdb è stato migliorato.

Spostamento dei dati e dei file di log di tempdb

Per spostare i dati e i file di log di tempdb, vedere Spostamento dei database di sistema.

Opzioni di database

Nella tabella seguente sono elencati i valori predefiniti delle singole opzioni di database di tempdb e viene indicato se l'opzione è modificabile. Per visualizzare le impostazioni correnti di queste opzioni, utilizzare la vista del catalogo sys.databases.

Opzione di database

Valore predefinito

Modificabile

ALLOW_SNAPSHOT_ISOLATION

OFF

ANSI_NULL_DEFAULT

OFF

ANSI_NULLS

OFF

ANSI_PADDING

OFF

ANSI_WARNINGS

OFF

ARITHABORT

OFF

AUTO_CLOSE

OFF

No

AUTO_CREATE_STATISTICS

ON

AUTO_SHRINK

OFF

No

AUTO_UPDATE_STATISTICS

ON

AUTO_UPDATE_STATISTICS_ASYNC

OFF

CHANGE_TRACKING

OFF

No

CONCAT_NULL_YIELDS_NULL

OFF

CURSOR_CLOSE_ON_COMMIT

OFF

CURSOR_DEFAULT

GLOBAL

Opzioni relative alla disponibilità del database

ONLINE

MULTI_USER

READ_WRITE

No

No

No

DATE_CORRELATION_OPTIMIZATION

OFF

DB_CHAINING

ON

No

ENCRYPTION

OFF

No

NUMERIC_ROUNDABORT

OFF

PAGE_VERIFY

CHECKSUM per nuove installazioni di SQL Server.

NONE per aggiornamenti di SQL Server.

PARAMETERIZATION

SIMPLE

QUOTED_IDENTIFIER

OFF

READ_COMMITTED_SNAPSHOT

OFF

No

RECOVERY

SIMPLE

No

RECURSIVE_TRIGGERS

OFF

Opzioni relative a Service Broker

ENABLE_BROKER

TRUSTWORTHY

OFF

No

Per una descrizione di queste opzioni di database, vedere Opzioni ALTER DATABASE SET (Transact-SQL).

Restrizioni

Di seguito sono riportate le operazioni che non è possibile eseguire sul 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. Il proprietario del database tempdb è dbo.

  • Creazione di uno snapshot del database.

  • Eliminazione del database.

  • Eliminazione dell'utente guest dal database.

  • Attivazione 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.