利用計畫指南來重用執行計畫降低CPU壓力

很久以前就聽聞過SQL的計畫指南功能,但我一直沒有用過。可以從字面上初步了解就是針對某些查詢我們可以干涉最佳化引擎,讓SQL根據我們的需求來跑執行計畫。一些官方文件的舉例就是在不異動查詢語句的狀況下讓管理者可以針對語句下hint(如MAXDOP設定及OPTIMIZE FOR或Recompile等)。

...繼續閱讀 »

解決SQL Server因升級後改採新型的基數估計(Cardinality Estimation)而導致的效能問題

最近由於SQL2008R2即將EOS,所以陸陸續續將資料庫升級到SQL2017的版本。而升級完成後有部分功能居然查詢時間太久導致Web TimeOut,經一番查詢後發現是新版SQL Server已在SQL2014採用新的基數估計(Cardinality Estimation簡稱CE)。而某些查詢會因為採用新版CE來估計統計反而誤用效能不好的執行計畫,官網分析有下列特性的查詢就可能發生查詢變慢的狀況。

...繼續閱讀 »

利用Table Varible做大資料量的處理,可能會有效能較差的隱憂

一直以來在寫TSQL時如需要一個暫存資料表,大多會用Table Varible或Temp Table來做

但常常聽到一些講師或看見官方文件都將Table Varible定義成存放小資料量的臨時資料表

但我長期使用Table Varible來做大資料的暫存表也沒遇見什大問題,因此也就沒多注意。

直到某天突然爆了一個大雷......

...繼續閱讀 »