首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

強制 SQL Server 採用平行執行計畫,大幅提升複雜查詢效能

     編輯:關於SqlServer

案例背景

某客戶複雜查詢(涉 12 張表)建立索引後,I/O 銳減但執行時間卻從 8 秒飆升至 20 秒。經分析發現:優化器因統計資訊步長導致估計行數偏差(實際 1.5 萬行 vs 估計 800 行),選擇了 Loop Join 且放棄平行執行,導致效能倒退。

解決方案:Undocumented Trace Flag 8649

因查詢在預存程序中,直接加入 OPTION (QUERYTRACEON 8649) 提示,強制將平行執行門檻降為 0,查詢時間從 20 秒降至 5 秒(對比 Hash Join 提示的 7 秒)。

實戰示範

以 AdventureWorks 範例資料庫為例:

-- 原始查詢,預設不走平行
SELECT * 
FROM [AdventureWorks].[Sales].[SalesOrderDetail] a 
INNER JOIN [Sales].SalesOrderHeader b ON a.SalesOrderID = b.SalesOrderID;

執行計畫顯示為序列執行(圖 1)。

原始執行計畫

圖 1. 原始執行計畫(序列)

加入提示後:

SELECT * 
FROM [AdventureWorks].[Sales].[SalesOrderDetail] a 
INNER JOIN [Sales].SalesOrderHeader b ON a.SalesOrderID = b.SalesOrderID 
OPTION (QUERYTRACEON 8649);

執行計畫轉為平行模式(圖 2),效能顯著提升。

平行執行計畫

圖 2. 加入提示後的平行執行計畫

適用建議

面對複雜 DSS/OLAP 查詢遇到類似情況,可嘗試此 Undocumented 提示強制平行化,但需謹慎測試,避免濫用導致資源爭用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved