監測工具箱:四大神器
1. SQL Server Profiler (追蹤)
- 捕獲 SSAS 執行個體事件 (MDX 查詢、命令、錯誤、安全稽核)。
- 預定義範本:`TSQL_Duration`、`MDX_Query`、`Deadlock_Graph` 等。
- 輸出至檔案/資料表,支援重播 (Replay) 比較效能基準。
- 關鍵事件類別:`Query Begin/End`、`Command Begin/End`、`Progress Report Begin/End`、`Lock Deadlock`。
2. 系統監視器 / 效能監視器
- 即時監控本地/遠端 SSAS 執行個體、OS、硬體計數器。
- 核心計數器:
- `MSAS:Memory\Memory Usage KB` / `Memory Limit KB` / `Memory Shrinkable KB`
- `MSAS:Proc\Current Connections` / `Commands/sec` / `Query Pool Busy Threads`
- `Processor\% Processor Time` / `Disk\Avg. Disk sec/Read` / `Network\Bytes Total/sec`
- 可建立「資料收集器集合」自動記錄、設定警示。
- **定位瓶頸利器,但不告知根因** (需結合 Profiler/DMV)。
3. Extended Events (XEvents) — 輕量級、可擴展
- SSAS 事件直接整合進 SQL Server XEvents 架構,T-SQL 管理 (`CREATE EVENT SESSION`)。
- 事件範例:`query_begin`、`query_end`、`command_begin`、`deadlock`、`memory_pressure`。
- 目標:`event_file` (檔案)、`ring_buffer` (記憶體)、`event_counter` (統計)。
- 優點:極低負擔、可篩選 predicate、支援歷史回溯。
4. 動態管理視圖 (DMV) — 內建健康檢查
- 所有 DMV 位於 `$System` 結構描述:`$System.DISCOVER_SESSIONS`、`$System.DISCOVER_COMMANDS`、`$System.DISCOVER_MEMORY_USAGE`、`$System.DISCOVER_STORAGE_TABLES` 等。
- 查詢方式:`SELECT * FROM $System.DISCOVER_SESSIONS;` (需 XMLA 連線)。
- 關鍵 DMV:
- `DISCOVER_SESSIONS`:目前連線、執行命令、記憶體用量。
- `DISCOVER_COMMANDS`:執行中/歷史命令、耗時、狀態。
- `DISCOVER_MEMORY_USAGE`:記憶體物件細目 (快取、彙總、索引)。
- `DISCOVER_STORAGE_TABLES`:分區儲存統計 (列數、大小、壓縮率)。
優化三板斧
1. 索引策略:覆蓋查詢、填充因子 100%
- 關聯資料庫 (RDBMS) 端:為彙總查詢常用維度/事實鍵建立**覆蓋索引** (`INCLUDE` 度量值)。
- 唯讀/以讀為主環境:**填充因子 100%**,最大化頁面密度、減少 I/O。
- 定期 `sys.dm_db_index_usage_stats` / `sys.dm_db_index_physical_stats` 掃描:刪除未用索引、重建碎片 >30% 索引。
2. 彙總設計:從低增益起步、遞減曲線、Usage-Based 優化
- 彙總設計精靈:初始「效能增益」設低 (如 10-20%),觀察查詢速度提升 vs 儲存增長。
- **收益遞減規律**:前 30% 增益通常佔 80% 速度提升;追求 100% 增益會導致儲存爆炸性增長。
- **Usage-Based Optimization 精靈**:匯入真實查詢日誌 (`QueryLog`),依實際存取模式產生彙總,**成熟系統必用**。
- 新系統無日誌 → 先用設計精靈,累積日誌後轉 Usage-Based。
3. 主動快取:MOLAP 效能 + ROLAP 即時性
- MOLAP:查詢快,但處理週期性 → 資料延遲。
- ROLAP:即時查詢關聯庫,但慢。
- **主動快取**:
- 預設 MOLAP 服務查詢。
- 偵測資料變更 (輪詢/通知) → 自動切換 ROLAP 讀取最新資料 → 背景重建 MOLAP → 切回。
- 設定:分區屬性 `ProactiveCaching` → `SilenceInterval` (靜默間隔)、`Latency` (容忍延遲)、`Source` (輪詢/通知)。
實戰檢查清單
| 階段 | 動作 | 工具/指令 |
| 基線建立 | 記錄正常負載下 CPU/記憶體/查詢延遲 P95 | PerfMon + XEvents (ring_buffer 7 天) |
| 日常巡檢 | 檢視 `DISCOVER_SESSIONS` 長跑查詢、`DISCOVER_MEMORY_USAGE` 記憶體壓力 | DMV 查詢腳本排程 |
| 變更前 | 擷取代表性 MDX 查詢集 (Profiler/QueryLog) | Profiler 範本 `MDX_Query` |
| 變更後 | 重播查詢集比較延遲、資源用量 | Profiler Replay / XEvents 比對 |
| 彙總調優 | 執行 Usage-Based Optimization 精靈,檢視增益/儲存曲線 | SSMS → 彙總設計 |
| 主動快取驗證 | 模擬資料變更,觀察切換延遲、查詢正確性 | 手動更新事實表 + MDX 查詢 |
總結
**監測四件套**各司其職:Profiler 看語句、PerfMon 看資源、XEvents 看事件流、DMV 看內部狀態。**優化三板斧**針對儲存引擎核心:索引覆蓋、彙總遞減曲線、主動快取雙模。建立「基線→巡檢→變更驗證→彙總迭代」閉環,OLAP 效能才能持續在線。