- 論壇徽章:
- 0
|
本帖最后由 o阿浩o 于 2009-9-1 17:33 編輯
大多數(shù)情況下,將數(shù)據(jù)庫(kù)升級(jí)到 SQL Server 2008 會(huì)提高查詢性能。 但是,如果您具有已針對(duì)性能進(jìn)行過認(rèn)真優(yōu)化的任務(wù)關(guān)鍵查詢,在升級(jí)前最好為每個(gè)查詢創(chuàng)建一個(gè)計(jì)劃指南,以保留這些查詢的查詢計(jì)劃。 如果在升級(jí)后,查詢優(yōu)化器為一個(gè)或多個(gè)查詢選擇了效率較低的計(jì)劃,則可以啟用這些計(jì)劃指南并強(qiáng)制查詢優(yōu)化器使用升級(jí)前的計(jì)劃。
若要在升級(jí)前創(chuàng)建計(jì)劃指南,請(qǐng)按照以下步驟執(zhí)行操作:
通過使用 sp_create_plan_guide 存儲(chǔ)過程并在 USE PLAN 查詢提示中指定查詢計(jì)劃來記錄每個(gè)任務(wù)關(guān)鍵查詢的當(dāng)前計(jì)劃。
驗(yàn)證計(jì)劃指南是否適用于此查詢
將數(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ò)過新版本中的更好計(jì)劃或者重新編譯所帶來的益處。
如果在升級(jí)后選擇了效率較低的計(jì)劃,可以激活所有計(jì)劃指南或部分計(jì)劃指南以取代新計(jì)劃。
示例
下面的示例顯示如何通過創(chuàng)建計(jì)劃指南來為查詢記錄升級(jí)前的計(jì)劃。
步驟 1:收集計(jì)劃
計(jì)劃指南中記錄的查詢計(jì)劃必須采用 XML 格式。 可通過以下方式生成 XML 格式的查詢計(jì)劃:- SET SHOWPLAN_XML
- SET STATISTICS XML
復(fù)制代碼 查詢 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 事件類。
下面的示例通過查詢動(dòng)態(tài)管理視圖收集語(yǔ)句- SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC; 的查詢計(jì)劃。USE AdventureWorks;
- GO
- SELECT query_plan
- FROM sys.dm_exec_query_stats AS qs
- CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
- CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp
- WHERE st.text LIKE N\'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%\';
- GO
復(fù)制代碼 步驟 2:創(chuàng)建計(jì)劃指南以強(qiáng)制實(shí)施計(jì)劃
在計(jì)劃指南中使用 XML 格式的查詢計(jì)劃(通過上述任一方法獲。,將該查詢計(jì)劃作為字符串文字復(fù)制并粘貼在 sp_create_plan_guide 的 OPTION 子句中指定的 USE PLAN 查詢提示中。
在 XML 計(jì)劃本身中,先將計(jì)劃中出現(xiàn)的引號(hào) (\') 通過第二個(gè)引號(hào)進(jìn)行轉(zhuǎn)義,然后再創(chuàng)建計(jì)劃指南。 例如,對(duì)于包含 WHERE A.varchar = \'This is a string\' 的計(jì)劃,必須通過將該代碼修改為 WHERE A.varchar = \'\'This is a string\'\' 來進(jìn)行轉(zhuǎn)義。
下面的示例為步驟 1 中收集的查詢計(jì)劃創(chuàng)建計(jì)劃指南,并在 @hints 參數(shù)中插入此查詢的 XML 顯示計(jì)劃。 為簡(jiǎn)潔起見,此示例中僅包括部分顯示計(jì)劃輸出。- EXECUTE sp_create_plan_guide
- @name = N\'Guide1\',
- @stmt = N\'SELECT City, StateProvinceID, PostalCode
- FROM Person.Address ORDER BY PostalCode DESC;\',
- @type = N\'SQL\',
- @module_or_batch = NULL,
- @params = NULL,
- @hints = N\'OPTION(USE PLAN N\'\'<ShowPlanXML xmlns=\'\'\'\'
- http://schemas.microsoft.com/sqlserver/2004/07/showplan\'\'\'\'
- Version=\'\'\'\'0.5\'\'\'\' Build=\'\'\'\'9.00.1116\'\'\'\'>
- <BatchSequence><Batch><Statements><StmtSimple>
- …
- </StmtSimple></Statements></Batch>
- </BatchSequence></ShowPlanXML>\'\')\';
- GO
復(fù)制代碼 步驟 3:驗(yàn)證計(jì)劃指南是否適用于查詢
再次運(yùn)行查詢,并檢查生成的查詢計(jì)劃。 您應(yīng)看到該計(jì)劃與您在計(jì)劃指南中指定的計(jì)劃相符。 |
|