面對日增五位數資料量的龐大系統,資料庫效能是專案成敗關鍵。SQL Server 2005 提供 Database Engine Tuning Advisor (DTA),配合 SQL Server Profiler 工作負載擷取,可自動推薦索引與分區策略,大幅降低手工調優門檻。
| 工具 | 角色 | 輸出 |
|---|---|---|
| SQL Server Profiler | 擷取即時/歷史工作負載 | .trc 追蹤檔 / 追蹤資料表 |
| Database Engine Tuning Advisor | 分析工作負載,推薦物理設計 | 建議索引、分區、統計資料腳本 |
SQL:BatchCompleted, RPC:Completed, SP:StmtCompletedErrorLog, ExceptionShowplan XML(含執行計畫)、Showplan Allworkload.trcworkload.trc 或追蹤資料表Partition Recommendations, Index RecommendationsCREATE INDEX/CREATE PARTITION 腳本、預估改善 %、空間成本INCLUDE 欄位以涵蓋查詢?-- DTA 建議重建索引(等同 ALTER INDEX ... REBUILD)
ALTER INDEX index_id ON tbTest REBUILD
-- 或線上重建(Enterprise 版,不鎖定資料表)
ALTER INDEX index_id ON tbTest REBUILD WITH (ONLINE = ON)
SELECT
OBJECT_NAME(ips.OBJECT_ID) AS TableName,
i.name AS IndexName,
ips.index_type_desc,
ips.avg_fragmentation_in_percent,
ips.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i ON ips.OBJECT_ID = i.OBJECT_ID AND ips.index_id = i.index_id
WHERE ips.avg_fragmentation_in_percent > 30
AND ips.page_count > 1000
ORDER BY ips.avg_fragmentation_in_percent DESC
SSMS → Management → Maintenance Plans → 建立計畫:
| 限制 | 說明 | 補充方案 |
|---|---|---|
| 僅分析物理設計 | 不會指出 SQL 寫法問題(如隱含轉換、SARGable) | 配合 Query Store (2016+)、執行計畫人工分析 |
| 工作負載需具代表性 | 若追蹤期間缺少關鍵查詢,建議會不完整 | 涵蓋尖峰時段、批次作業、報表查詢 |
| 分區建議需人工評估 | 分區涉及檔案群組規劃、維護窗口 | 結合業務增長趨勢、備份策略綜合決策 |
DTA 是 SQL Server 2005 將「專家經驗」工具化的產物。善用 Profiler 擷取真實負載 → DTA 分析推薦 → 人工審查套用 → 維護計畫自動化 閉環,能將調優工作從「經驗駭客」轉為「標準化工程」。記住:工具建議需人工把關,盲目套用可能適得其反。