Tempdb 是 SQL Server 實例層級的全域共享資源,所有連線共用同一個 Tempdb。儲存三類物件:
model 重建,不需復原。SIMPLE,檢查點後記錄標記可重用,不可變更。PRIMARY),不可新增檔案群組。model 建立:預設 MDF 8 MB、LDF 1 MB、自動成長 10%。SIMPLE 模式下記錄持續截斷。識別高頻使用點並評估替代方案:
| 場景 | 優化方向 |
|---|---|
| 使用者臨時表 | 能用 CTE/衍生表/表變數者優先;大量資料加索引 |
| 排程作業 (DBCC CHECKDB 等) | 離峰時段執行;考慮 PHYSICAL_ONLY 減輕 Tempdb |
| 游標 | 改寫為集合操作;必須用時改用 LOCAL FAST_FORWARD |
| CTE / 遞歸查詢 | 注意 Worktable 溢寫 Tempdb,大資料量改用暫存表分批 |
| SORT_IN_TEMPDB 建索引 | 評估是否必要;大索引離峰建立 |
| 索引線上重建 | 需額外 Tempdb 空間,規劃磁碟配置 |
| 觸發器 (AFTER/INSTEAD OF) | 邏輯精簡,避免大量資料進 inserted/deleted |
預設 8 MB 遠低於生產負載需求,自動成長 10% 導致頻繁擴展、碎片化、I/O 停頓。建議:
ALTER DATABASE 修改,或安裝精靈/SSMS 圖形介面設定。DBCC SHRINKFILE 釋放空間後,後續負載仍會觸發自動成長,產生「縮-長」震盪、碎片化、鎖競爭。原則:除非檔案異常膨脹且確認不再需要,否則勿縮減。
Tempdb 優化非單一動作,而是負載特徵分析 → 瓶頸定位 → 針對性配置的迭代過程。關鍵指標監控:PAGEIOLATCH_*、PAGELATCH_UP (SGAM/PFS/GAM)、Tempdb 資料檔案大小/成長頻率、版本存放區大小。結合 Query Store / Extended Events 識別高 Tempdb 耗用查詢,從源頭優化查詢計畫,才是治本之道。