從 Profiler 擷取負載 → DTA 自動推薦索引/分區
SQL Server 2000 同類工具幾乎不可用,2005 重寫後終於實用。**DTA 不會幫你改寫爛 SQL**,只會從儲存結構 (索引、分區、統計資料) 角度優化。
兩步驟標準流程
- Profiler 擷取工作負載**:
- 範本:`TSQL_Replay` 或 `TSQL_Duration`。
- 事件:`RPC:Completed`、`SQL:BatchCompleted`、`SP:StmtCompleted`。
- 篩選:`DatabaseID`、`Duration > 100ms`、`Reads > 1000`。
- 儲存為 `.trc` 檔或資料表。
- DTA 分析**:
- 載入追蹤檔/表 → 選取目標資料庫 → 設定調優選項 (索引、分區、統計資料、線上/離線) → **啟動分析**。
- 產出:`推薦索引建立/刪除腳本`、`分區建議`、`預估改善百分比`、`風險評估`。
- **審查每項建議**:DTA 可能推薦過多索引、忽略寫入負擔、不理解業務語意,**人工把關後再套用**。
常見誤區
- ❌ 以為 DTA 能修正 `SELECT *`、`WHERE 1=1`、隱含轉換、參數嗅探等查詢寫法問題 → **不能**。
- ❌ 直接套用所有建議 → 索引過多導致 INSERT/UPDATE 慢、統計資料維護窗口暴增。
- ❌ 生產環境直接跑 Profiler 長時間擷取 → 影響效能、追蹤檔爆大。
→ **正確**:備份還原到測試機,跑自動化測試腳本/重播生產追蹤 (Distributed Replay) 擷取。
進階技巧
- 假設性索引**:DTA 內部用 `sp_create_hypothetical_index` 模擬,不實際建立,極快。
- 工作負載壓縮**:只保留前 80% 累積 Duration 的查詢,大幅縮小追蹤檔、加速分析。
- 定期排程**:每週/每月跑一次,追蹤 Schema/資料分佈變化帶來的新索引機會。
結語
**DTA = 索引/分區/統計資料的「智慧推薦引擎」**,不是萬能藥。善用它發現遺漏索引、過度索引、分區機會,**再結合查詢調優 (改寫 SQL、參數化、提示)**,才是完整優化閉環。