| 維度 | 靜態過濾 | 參數化過濾 (動態) |
|---|---|---|
| 定義 | WHERE 子句含常量,如 CityId = 1 | WHERE 子句含 HOST_NAME(),如 CityId = CONVERT(int, HOST_NAME()) |
| 適用場景 | 所有訂閱者同步相同子集 | 每訂閱者同步專屬子集(多租戶/多門店/多業務員) |
| 快照生成 | 單一快照服務所有訂閱者 | 每訂閱者生成專屬快照分區(分區快照) |
| 存儲開銷 | 低 | 高(分區數 = 訂閱者數) |
| 同步性能 | 極快(無分區計算) | 需評估分區映射開銷 |
HOST_NAME() 返回 NVARCHAR(128),直接 CONVERT(int, HOST_NAME()) 在發布精靈中會報錯「無法轉換」。
CONVERT(NCHAR(10), CityId) = HOST_NAME()
USE [ParkSurvey];
EXEC sp_changemergearticle
@publication = 'ParkSurveyPublication',
@article = 'Cities',
@property = 'subset_filterclause',
@value = 'CityId = CONVERT(int, HOST_NAME())',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
HOST_NAME() 值對應一個分區,數據不重疊,同步最小化。CityId 必須有非聚集索引(最好含 INCLUDE 覆蓋同步列)。@max_concurrent_snapshots 提高並行度,縮短分區快照生成窗口。sysmergepartitioninfo,發現傾斜及時調整過濾邏輯。參數化過濾是合並複製支撐「千人千面」同步的核心機制。掌握 HOST_NAME() 類型轉換技巧、分區選項語義、快照分區存儲特性,能在「數據隔離」與「同步性能」間找到最佳平衡點。