詳解SQL Server 2008遷移查詢(xún)計(jì)劃
大多數(shù)情況下,將數(shù)據(jù)庫(kù)升級(jí)到 SQL Server 2008 會(huì)提高查詢(xún)性能。 但是,如果您具有已針對(duì)性能進(jìn)行過(guò)認(rèn)真優(yōu)化的任務(wù)關(guān)鍵查詢(xún),在升級(jí)前***為每個(gè)查詢(xún)創(chuàng)建一個(gè)計(jì)劃指南,以保留這些查詢(xún)的查詢(xún)計(jì)劃。 如果在升級(jí)后,查詢(xún)優(yōu)化器為一個(gè)或多個(gè)查詢(xún)選擇了效率較低的計(jì)劃,則可以啟用這些計(jì)劃指南并強(qiáng)制查詢(xún)優(yōu)化器使用升級(jí)前的計(jì)劃。
若要在升級(jí)前創(chuàng)建計(jì)劃指南,請(qǐng)按照以下步驟執(zhí)行操作:
通過(guò)使用 sp_create_plan_guide 存儲(chǔ)過(guò)程并在 USE PLAN 查詢(xún)提示中指定查詢(xún)計(jì)劃來(lái)記錄每個(gè)任務(wù)關(guān)鍵查詢(xún)的當(dāng)前計(jì)劃。
驗(yàn)證計(jì)劃指南是否適用于此查詢(xún)
將數(shù)據(jù)庫(kù)升級(jí)到 SQL Server 2008。
計(jì)劃保留在升級(jí)后的數(shù)據(jù)庫(kù)中的計(jì)劃指南中,如果在升級(jí)后計(jì)劃的性能出現(xiàn)退步,則這些計(jì)劃將用作后備計(jì)劃。
建議您在升級(jí)后不要啟用計(jì)劃指南,因?yàn)橛捎诮y(tǒng)計(jì)信息進(jìn)行了更新,您可能會(huì)錯(cuò)過(guò)新版本中的更好計(jì)劃或者重新編譯所帶來(lái)的益處。
如果在升級(jí)后選擇了效率較低的計(jì)劃,可以激活所有計(jì)劃指南或部分計(jì)劃指南以取代新計(jì)劃。
示例
下面的示例顯示如何通過(guò)創(chuàng)建計(jì)劃指南來(lái)為查詢(xún)記錄升級(jí)前的計(jì)劃。
步驟 1:收集計(jì)劃
計(jì)劃指南中記錄的查詢(xún)計(jì)劃必須采用 XML 格式。 可通過(guò)以下方式生成 XML 格式的查詢(xún)計(jì)劃:
|
查詢(xún) sys.dm_exec_query_plan 動(dòng)態(tài)管理函數(shù)的 query_plan 列。
SQL Server Profiler Showplan XML、Showplan XML Statistics Profile 和 Showplan XML For Query Compile 事件類(lèi)。
下面的示例通過(guò)查詢(xún)動(dòng)態(tài)管理視圖收集語(yǔ)句
SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC; 的查詢(xún)計(jì)劃。 USE AdventureWorks; PostalCode FROM Person.Address ORDER BY PostalCode DESC;%'; GO |
步驟 2:創(chuàng)建計(jì)劃指南以強(qiáng)制實(shí)施計(jì)劃
在計(jì)劃指南中使用 XML 格式的查詢(xún)計(jì)劃(通過(guò)上述任一方法獲?。瑢⒃摬樵?xún)計(jì)劃作為字符串文字復(fù)制并粘貼在 sp_create_plan_guide 的 OPTION 子句中指定的 USE PLAN 查詢(xún)提示中。
在 XML 計(jì)劃本身中,先將計(jì)劃中出現(xiàn)的引號(hào) (') 通過(guò)第二個(gè)引號(hào)進(jìn)行轉(zhuǎn)義,然后再創(chuàng)建計(jì)劃指南。 例如,對(duì)于包含 WHERE A.varchar = 'This is a string' 的計(jì)劃,必須通過(guò)將該代碼修改為 WHERE A.varchar = ''This is a string'' 來(lái)進(jìn)行轉(zhuǎn)義。
下面的示例為步驟 1 中收集的查詢(xún)計(jì)劃創(chuàng)建計(jì)劃指南,并在 @hints 參數(shù)中插入此查詢(xún)的 XML 顯示計(jì)劃。 為簡(jiǎn)潔起見(jiàn),此示例中僅包括部分顯示計(jì)劃輸出。
|
步驟 3:驗(yàn)證計(jì)劃指南是否適用于查詢(xún)
再次運(yùn)行查詢(xún),并檢查生成的查詢(xún)計(jì)劃。 您應(yīng)看到該計(jì)劃與您在計(jì)劃指南中指定的計(jì)劃相符。
【編輯推薦】