tempdb 資料庫

tempdb 系統資料庫是全域資源,適用於所有連接到 SQL Server 執行個體的使用者,且可用來保留下列項目:

  • 明確建立的暫存使用者物件 (例如:全域或本機暫存資料表、暫存預存程序、資料表變數或資料指標)。

  • SQL Server Database Engine 所建立的內部物件 (例如,儲存多工緩衝處理或排序之中繼結果集的工作資料表)。

  • 由資料庫中的資料修改交易所產生的資料列版本,該資料庫採用使用資料列版本控制隔離的讀取認可或快照集隔離交易。

  • 由以下這類功能的資料修改交易所產生的資料列版本:線上索引作業、Multiple Active Result Set (MARS) 和 AFTER 觸發程序。

tempdb 中的作業會以最低限度記錄。這可讓您回復交易。每次啟動 SQL Server 時都會重新建立 tempdb,這樣系統永遠會以乾淨的資料庫副本啟動。連接中斷時會自動卸除暫存資料表與預存程序,且系統關閉時所有連接都會停止。因此,tempdb 中的任何資料都不會從 SQL Server 的一個工作階段儲存到其他的工作階段。tempdb 不允許進行備份和還原作業。

tempdb 的實體屬性

下表列示 tempdb 資料和記錄檔的初始組態值。對於不同版本的 SQL Server,這些檔案的大小稍有不同。

檔案

邏輯名稱

實體名稱

檔案成長

主要資料

tempdev

tempdb.mdf

以百分之 10 的比例自動成長,直到磁碟全滿

記錄

templog

templog.ldf

以 10% 的比例自動成長,最大至 2 TB

tempdb 的大小會影響系統效能。例如,若 tempdb 太小,則每次啟動 SQL Server 時,資料庫自動成長的情形都會過多地佔用系統處理的資源,而無法支援工作負載的需求。增加 tempdb 的大小即可避免這種負擔。如需詳細資訊,請參閱<最佳化 tempdb 效能>和<tempdb 的容量計畫>。

tempdb 中的效能改進

在 SQL Server 中,會以下列方式改進 tempdb 效能:

  • 可能會快取暫存資料表和資料表變數。快取允許卸除和建立暫存物件以極快速度執行的作業,並減少頁面配置爭用。

  • 已改進配置頁面閂鎖通訊協定。這會減少所使用的 UP (更新) 閂鎖數目。

  • 會減少 tempdb 的記錄負擔。這會減少 tempdb 記錄檔的磁碟 I/O 頻寬耗用量。

  • 已改進在 tempdb 中配置混合頁面的演算法。

移動 tempdb 資料和記錄檔

若要移動 tempdb 資料和記錄檔,請參閱<移動系統資料庫>。

資料庫選項

下表列出 tempdb 資料庫中每個資料庫選項的預設值,以及這些選項是否可以修改。若要檢視這些選項目前的設定,請參閱 sys.databases 目錄檢視。

資料庫選項

預設值

可以修改

ALLOW_SNAPSHOT_ISOLATION

OFF

ANSI_NULL_DEFAULT

OFF

ANSI_NULLS

OFF

ANSI_PADDING

OFF

ANSI_WARNINGS

OFF

ARITHABORT

OFF

AUTO_CLOSE

OFF

AUTO_CREATE_STATISTICS

ON

AUTO_SHRINK

OFF

AUTO_UPDATE_STATISTICS

ON

AUTO_UPDATE_STATISTICS_ASYNC

OFF

CHANGE_TRACKING

OFF

CONCAT_NULL_YIELDS_NULL

OFF

CURSOR_CLOSE_ON_COMMIT

OFF

CURSOR_DEFAULT

GLOBAL

資料庫可用性選項

ONLINE

MULTI_USER

READ_WRITE

DATE_CORRELATION_OPTIMIZATION

OFF

DB_CHAINING

ON

ENCRYPTION

OFF

NUMERIC_ROUNDABORT

OFF

PAGE_VERIFY

CHECKSUM (新安裝的 SQL Server)。

NONE (升級的 SQL Server)。

PARAMETERIZATION

SIMPLE

QUOTED_IDENTIFIER

OFF

READ_COMMITTED_SNAPSHOT

OFF

RECOVERY

SIMPLE

RECURSIVE_TRIGGERS

OFF

Service Broker 選項

ENABLE_BROKER

TRUSTWORTHY

OFF

如需這些資料庫選項的描述,請參閱<ALTER DATABASE SET 選項 (Transact-SQL)>。

限制

下列作業不能在 tempdb 資料庫上執行:

  • 加入檔案群組。

  • 備份或還原資料庫。

  • 變更定序。預設定序是伺服器定序。

  • 變更資料庫擁有者。 tempdb 的擁有者為 dbo

  • 建立資料庫快照集。

  • 卸除資料庫。

  • 從資料庫卸除 guest 使用者。

  • 啟用異動資料擷取。

  • 參與資料庫鏡像。

  • 移除主要檔案群組、主要資料檔或記錄檔。

  • 重新命名資料庫或主要檔案群組。

  • 執行 DBCC CHECKALLOC。

  • 執行 DBCC CHECKCATALOG。

  • 將資料庫設定為 OFFLINE。

  • 將資料庫或主要檔案群組設定為 READ_ONLY。

權限

任何使用者都可以在 tempdb 中建立暫時物件。除非收到其他權限,否則使用者只能存取自己的物件。您可以撤銷 tempdb 的連接權限來阻止使用者使用 tempdb,不過不建議您這樣做,因為有些常式作業需要使用 tempdb。