排除點陣圖篩選選擇性問題
點陣圖篩選可藉由盡早移除查詢計畫中不合格的資料列,以大幅提升使用星型結構描述之資料倉儲查詢的效能。這樣可減少透過聯結運算子及所有後續運算子所傳遞的資料列,因此能夠改善查詢回應時間。在 SQL Server 2008 中,點陣圖篩選可以在最佳化之後導入查詢計畫中,或是在查詢計畫產生期間由查詢最佳化工具動態導入。當動態導入此篩選時,就將它稱為「最佳化點陣圖篩選」。如需有關點陣圖篩選的詳細資訊,請參閱<透過點陣圖篩選讓資料倉儲查詢效能最佳化>。
只有當點陣圖篩選變成非選擇性時,才會發生點陣圖篩選特有的效能問題。非選擇性的點陣圖篩選會在處理查詢時產生不必要的負擔,因此不但無法提升效能,反而會讓查詢的執行效能變得更緩慢。
診斷及解決非選擇性點陣圖篩選問題
若要診斷及解決與非選擇性點陣圖篩選有關的查詢效能問題,請遵循以下步驟:
識別造成效能問題的查詢。
使用 SQL Server Profiler 來協助找出速度慢的查詢。如需詳細資訊,請參閱<使用 SQL Server Profiler>。您也可以產生執行程序表來分析查詢效能,這個程序表可以用文字、XML 或圖形來表示查詢最佳化工具產生的查詢執行計畫。如需詳細資訊,請參閱<SET SHOWPLAN_TEXT (Transact-SQL)>、<XML 顯示計畫>和<顯示圖形執行計畫 (SQL Server Management Studio)>。
確認查詢有使用點陣圖篩選。
您可以使用 sys.dm_exec_query_plan (Transact-SQL) 和 sys.dm_exec_query_stats (Transact-SQL) 來擷取查詢計畫,以確認查詢實際上是否有使用點陣圖篩選。另外,您也可以在 XML 執行程序表或查詢的圖形執行計畫中尋找點陣圖篩選。如需詳細資訊,請參閱<解譯包含點陣圖篩選的執行計畫>。
確認點陣圖篩選是效能問題的原因。
只有在使用雜湊聯結或合併聯結的平行查詢計畫中,才會套用點陣圖篩選。只有在使用雜湊聯結的平行查詢計畫中,才會套用最佳化點陣圖篩選。若要確認點陣圖篩選確實有影響到查詢效能,請在查詢陳述式中指定聯結提示 LOOP 來手動停用點陣圖篩選。如此可強制最佳化工具選擇指定的聯結類型,而不是雜湊聯結。您也可以在查詢陳述式中指定聯結提示 MERGE 來停用最佳化點陣圖篩選。如需有關使用這些提示的詳細資訊,請參閱<聯結提示 (Transact-SQL)>和<查詢提示 (Transact-SQL)>。
使用追蹤事件點陣圖警告來追蹤已停用點陣圖篩選的查詢。
根據預設,查詢最佳化工具會自動停用非選擇性的點陣圖篩選。如果追蹤事件引發,嘗試去除點陣圖篩選變成非選擇性的原因。點陣圖篩選變成非選擇性的原因如下:
查詢最佳化工具所做的不適當的基數估計。
SQL Server 主要是從建立索引或統計資料時所建立的長條圖 (透過手動或自動方式) 來估計基數。過期的統計資料和遺漏的索引可能會造成基數估計不正確,如此會產生不正確的成本計算,因而可能產生次佳查詢計畫。在與查詢有關的資料行上,建立有用的索引或統計資料。如需詳細資訊,請參閱<查詢效能不佳的疑難排解:基數估計>。
系統上的記憶體壓力。
在記憶體負載極高的系統中,若在查詢計畫中使用具有點陣圖篩選的查詢,則當查詢無法取得建立點陣圖所需的最低記憶體時,會卸除點陣圖運算子。系統監視器可用來監視可能會造成系統上記憶體壓力之 SQL Server 與非 SQL Server 元件的效能。如需範例,您可以使用 Memory Manager 物件來監視整體的伺服器記憶體使用狀況。如需詳細資訊,請參閱<監視資源使用量 (系統監視器)>。如需有關記憶體壓力問題疑難排解的詳細資訊,請參閱<SQL Server 2005 效能問題疑難排解>(英文)。
沒有足夠的執行緒可平行執行查詢。
只有在平行查詢計畫中,才會套用點陣圖篩選。當無法滿足針對平行處理原則之特定程度的平行計畫執行緒需求時,Database Engine 會自動降低平行處理原則的程度,或是完全放棄指定工作負載內容中的平行計畫。然後,它會執行序列計畫 (一個執行緒)。如需詳細資訊,請參閱<平行程度>。