最佳化 tempdb 效能

更新: 2005 年 12 月 5 日

tempdb 資料庫的大小和實體位置會影響系統效能。例如,如果為 tempdb 定義的大小太小,每次您重新啟動 SQL Server 的執行個體時,部份的系統處理負載可能會開始將 tempdb 自動成長到支援工作負載所需的大小。增加 tempdb 資料和記錄檔的大小即可避免這種負載。如需有關決定 tempdb 所需的適當磁碟空間量的資訊,請參閱<tempdb 的容量計劃>。

tempdb 大小和位置的建議

為了達到最佳 tempdb 效能,我們建議實際執行環境中的 tempdb 使用下列組態:

  • tempdb 的復原模型設定為 SIMPLE。此模型會自動收回記錄空間,以保持較小的空間需求。
    如需詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>或<如何:檢視或變更資料庫的復原模式 (SQL Server Management Studio)>。

  • 允許 tempdb 檔案依需要自動成長。這可讓檔案成長到磁碟已滿為止。

    ms175527.note(zh-tw,SQL.90).gif附註:
    如果實際執行環境無法容忍自動成長作業期間發生應用程式逾時的可能性,則預先配置空間來容許預期的工作負載。
  • 將檔案成長增量設成合理的大小,可避免 tempdb 資料庫檔案每次成長量的值太小。如果檔案的成長比寫入 tempdb 的資料量少太多,那麼 tempdb 可能必須經常擴大。這樣會影響效能。為 tempdb 檔設定 FILEGROWTH 增量時,建議您根據下列的一般指導方針進行。

    tempdb 檔案大小 FILEGROWTH 增量

    0 到 100 MB

    10 MB

    100 到 200 MB

    20 MB

    200 MB 以上

    10%*

    * 您可能必須根據 tempdb 檔案所在的 I/O 子系統的速度來調整此百分比。為了避免可能的閂鎖逾時,我們建議將自動成長作業限制為大約兩分鐘。例如,如果 I/O 子系統可以用每秒 50 MB 來初始化檔案,則不管 tempdb 檔案大小如何,FILEGROWTH 增量應該設為最大值 6 GB。可能的話,請使用<立即資料庫檔案初始化>來改進自動成長作業的效能。

  • 您可將檔案大小設定為夠大的值來容納環境中的典型工作負載,藉此為所有 tempdb 檔案預先配置空間。這防止 tempdb 擴充過於頻繁而影響效能。tempdb 資料庫應該設為自動成長,但這應該用來增加非計劃中例外狀況的磁碟空間。

  • 建立最大化磁碟頻寬所需的最多檔案。使用多個檔案可減少 tempdb 儲存體爭用並明顯產生更好的延展性。不過,不要建立太多檔案,因為這樣會降低效能及增加管理負擔。一般來說,請為伺服器上的每一個 CPU 建立一個資料檔 (來負責任何相似性遮罩設定),然後依需要向上或向下調整檔案數。請注意,雙核心 CPU 被視為兩個 CPU。

  • 使每一個資料檔大小相同;這可達到最佳比例填入效能。

  • tempdb 資料庫放在快速的 I/O 子系統上。如果有許多直接連接的磁碟,請使用磁碟條狀配置。

  • tempdb 資料庫放在不同於使用者資料庫所使用的磁碟上。

如需其他建議,請參閱<使用 SQL Server 2005 中的 tempdb>(英文)。

修改 tempdb 大小和成長參數

您可以使用下列其中一個方法來修改 tempdb 資料檔或記錄檔的大小和檔案成長參數:

每當建立 tempdb 時,即使用檔案大小和檔案成長參數的值。例如,如果您將 tempdb 資料檔的大小增加為 20 MB,並將檔案成長增量增加到 15%,則新值會立即生效。如果後續交易活動造成 tempdb 大小成長,則每次您重新啟動 SQL Server 的執行個體時,資料檔就會回到 20 MB 的大小。

檢視 tempdb 大小和成長參數

您可以使用下列其中一個方法來檢視 tempdb 資料檔或記錄檔的大小和檔案成長參數:

  • SQL Server Management Studio

  • 執行下列查詢:

    SELECT 
        name AS FileName, 
        size*1.0/128 AS FileSizeinMB,
        CASE max_size 
            WHEN 0 THEN 'Autogrowth is off.'
            WHEN -1 THEN 'Autogrowth is on.'
            ELSE 'Log file will grow to a maximum size of 2 TB.'
        END,
        growth AS 'GrowthValue',
        'GrowthIncrement' = 
            CASE
                WHEN growth = 0 THEN 'Size is fixed and will not grow.'
                WHEN growth > 0 AND is_percent_growth = 0 
                    THEN 'Growth value is in 8-KB pages.'
                ELSE 'Growth value is a percentage.'
            END
    FROM tempdb.sys.database_files;
    GO
    

請參閱

工作

tempdb 磁碟空間不足的疑難排解

概念

tempdb 資料庫
tempdb 的容量計劃

其他資源

最佳化資料庫
ALTER DATABASE (Transact-SQL)
sys.database_files (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2005 年 12 月 5 日

新增內容:
  • 新增有關不限檔案成長和 SIMPLE 復原模型的建議。
  • 新增「修改 tempdb 大小和成長參數」和「檢視 tempdb 大小和成長參數」兩節。