我喜歡把sql服務(wù)器所捆綁的工具看作是倒金字塔型的,診斷和檢查一般問題的工具在頂端,尋找和診斷問題具體區(qū)域的工具在底部。除了提供一種編寫sql腳本的便捷方式之外,在你需要解決特定sql腳本里明確問題的時(shí)候,查詢分析器(query analyzer)還是所需要使用的資源。如果你需要指出哪個(gè)查詢正在保持著某個(gè)特定表格的鎖定狀態(tài),你也會(huì)希望使用查詢分析器。
查詢分析器的關(guān)鍵診斷特性是它能夠顯示某個(gè)查詢的執(zhí)行計(jì)劃。這個(gè)執(zhí)行計(jì)劃會(huì)向你提供各種類型的有用信息,例如在查詢的執(zhí)行期間如何以及何時(shí)使用或者不使用索引。它還會(huì)提供許多其他的細(xì)節(jié),例如排序、平行(parallelism)、嵌套循環(huán),以及sql服務(wù)器在執(zhí)行指定查詢時(shí)必須做的其他事情。
計(jì)劃的好處
有了查詢分析器,你就可以查看預(yù)計(jì)計(jì)劃而不需要運(yùn)行查詢本身,或者在查詢執(zhí)行之后查看真實(shí)的計(jì)劃。很顯然,真實(shí)的計(jì)劃會(huì)更加準(zhǔn)確,因?yàn)樗菑奈锢砩蠈?duì)數(shù)據(jù)庫(kù)運(yùn)行查詢的。但是對(duì)于系統(tǒng)負(fù)載巨大和/或長(zhǎng)期的查詢,這種方法可能就不是最好的選擇了。在典型情況下,當(dāng)我認(rèn)為某個(gè)特定的查詢有問題的時(shí)候,或者如果我預(yù)計(jì)有一個(gè)查詢會(huì)在應(yīng)用程序里被足夠頻繁地調(diào)用以至于可能會(huì)導(dǎo)致性能問題的時(shí)候,我就會(huì)運(yùn)行這個(gè)工具。
你可以通過把sql表達(dá)式輸入查詢分析器再按[ctrl]l來查看預(yù)計(jì)的執(zhí)行計(jì)劃。執(zhí)行計(jì)劃然后就會(huì)顯示在結(jié)果(results)面板的選項(xiàng)卡里。執(zhí)行計(jì)劃在剛開始的時(shí)候可能比較難讀,因?yàn)樗幌裼⒄Z(yǔ)一樣是從左往右讀的,而是從右往左讀的。
運(yùn)行中的計(jì)劃
這里有一個(gè)你可以跟著做的例子,從這個(gè)例子里你可以看到如何使用查詢分析器來查看一個(gè)執(zhí)行計(jì)劃。考慮一下下面查詢,它會(huì)從northwind數(shù)據(jù)庫(kù)里返回某個(gè)雇員所在的地點(diǎn)和相關(guān)地區(qū):
select
territorydescription, regiondescription
from
employees e
join employeeterritories et on e.employeeid = et.employeeid
join territories t on et.territoryid = t.territoryid
join region r on t.regionid = r.regionid
where
e.employeeid = 1
order by
territorydescription, regiondescription
這個(gè)查詢的結(jié)果顯示:一號(hào)employeeid在東部(eastern)有兩個(gè)地區(qū),如圖a所示。
圖a

圖b顯示了sql服務(wù)器從示例查詢所生成的預(yù)計(jì)執(zhí)行。這個(gè)圖標(biāo)中的每個(gè)節(jié)點(diǎn)都代表著sql服務(wù)期執(zhí)行示例查詢所采取的步驟。要注意,每個(gè)節(jié)點(diǎn)包括一個(gè)預(yù)計(jì)的相對(duì)消耗,以及執(zhí)行計(jì)劃被顯示的時(shí)候sql服務(wù)器所使用的每個(gè)索引的名稱。
圖b
你可以把鼠標(biāo)放在執(zhí)行計(jì)劃的每個(gè)節(jié)點(diǎn)上以獲取更多關(guān)于該步驟的信息,例如該節(jié)點(diǎn)所代表的操作類型、受影響的行數(shù),以及和該步相關(guān)的消耗的分解。圖c顯示的是圖b里針對(duì)第一個(gè)節(jié)點(diǎn)的額外信息。這些彈出窗口里的信息能夠提示你可以對(duì)查詢做出哪些改進(jìn),如果能夠改進(jìn)的話。
圖c

你可以將查詢分析器和sql服務(wù)器的索引調(diào)節(jié)向?qū)В╯erver’s index tuning wizard,itw)一起使用。我通常使用sql服務(wù)器的profiler來收集要送入itw的數(shù)據(jù)。但是有時(shí)候,我會(huì)使用查詢分析器,如果我認(rèn)為它代表著我正在進(jìn)行測(cè)試時(shí)的某種活動(dòng)類型的話。你可以從查詢(query)菜單來訪問itw;它能夠?qū)υ诨顒?dòng)編輯面板里的sql腳本做出性能建議。
新聞熱點(diǎn)
疑難解答
圖片精選