SQL Server 2005查询处理结构-用户模式计划(UMS)
SQL Server 2005查詢處理結(jié)構(gòu)-用戶模式計(jì)劃(UMS)
?
?? 在對(duì)數(shù)據(jù)庫(kù)進(jìn)行性能調(diào)優(yōu)時(shí),必須全面的考慮各種可能造成系統(tǒng)性能瓶頸的各種因素,因此深入了解SQL Server 2005的查詢處理機(jī)構(gòu)是非常有必要的。下面,我就重點(diǎn)介紹一下用戶模式計(jì)劃(UMS)。
?? SQL Server 使用協(xié)同多處理器模式取代了對(duì)稱多處理器模式。這兩種處理模式之間最大的區(qū)別在于處理器處理計(jì)劃方式不同。在協(xié)同模式下,同一時(shí)間在一個(gè)處理器上只能運(yùn)行一個(gè)線程,并且當(dāng)這個(gè)線程沒(méi)有任務(wù)要運(yùn)行時(shí),就會(huì)放棄對(duì)處理器的控制權(quán)。在這種方式下,可以允許多個(gè)線程相互協(xié)同使實(shí)際執(zhí)行的任務(wù)數(shù)量最大化。
???控制這個(gè)協(xié)同行為是用戶模式計(jì)劃(User Mode Scheduler ,UMS)的任務(wù)。SQL Server啟動(dòng)時(shí),會(huì)為每個(gè)邏輯的或物理的處理器創(chuàng)建一個(gè)UMS,并且這個(gè)UMS可以在系統(tǒng)中使用。這樣,SQL Server就可以通過(guò)UMS執(zhí)行自己的計(jì)劃,而不是將線程發(fā)送到操作系統(tǒng),由操作系統(tǒng)按計(jì)劃在處理器上執(zhí)行,認(rèn)識(shí)到這一點(diǎn)是非常重要的。
??創(chuàng)建一個(gè)SQL Server的連接時(shí),它對(duì)應(yīng)的SPID就會(huì)分配到UMS。這個(gè)分配的進(jìn)程就會(huì)采用一個(gè)基本的平衡算法,以實(shí)現(xiàn)盡可能的將進(jìn)程平均的分散在多個(gè)UMS中。盡管一個(gè)連接請(qǐng)求通常會(huì)在同一個(gè)UMS中執(zhí)行,但是這個(gè)請(qǐng)求通常會(huì)在同一UMS中執(zhí)行,但是這個(gè)請(qǐng)求還是有可能在任何可用的UMS中處理。
??每個(gè)UMS都使用三個(gè)隊(duì)列來(lái)處理查詢:可執(zhí)行的、正在執(zhí)行的和等待中的。隊(duì)列中的線程遵循先進(jìn)先出的原則。當(dāng)一個(gè)查詢執(zhí)行時(shí),會(huì)為它分配一個(gè)線程并將這個(gè)線程放入到可執(zhí)行的隊(duì)列中,可執(zhí)行隊(duì)列中的線程會(huì)占用處理器。如果線程需要等待I/O、網(wǎng)絡(luò)或內(nèi)存等資源的配置時(shí),它就會(huì)停止處理器的占用,并移入等待中的隊(duì)列。
??等待分配資源的線程會(huì)一直保存在等待的隊(duì)列中。這是,SQL Server會(huì)跟蹤這個(gè)線程等待的時(shí)間量,并用等待時(shí)間表示,當(dāng)分配的資源得到時(shí),就用等待的類型表示。一旦得到分配的資源,這個(gè)線程就會(huì)從等待隊(duì)列中轉(zhuǎn)入可執(zhí)行的隊(duì)列的底部。一個(gè)進(jìn)程從可執(zhí)行的隊(duì)列到轉(zhuǎn)入處理器上之前所花費(fèi)的時(shí)間叫一次等待。?
??處理器計(jì)劃的內(nèi)部執(zhí)行步驟:
?(1)查詢首先必須被編譯,需要內(nèi)存和處理器資源;
?(2)編譯過(guò)的計(jì)劃必須保存在查詢緩存中, 需要內(nèi)存和處理器資源;
?(3)執(zhí)行計(jì)劃會(huì)轉(zhuǎn)入到處理器中以執(zhí)行這個(gè)查詢,需要內(nèi)存、處理器資源和潛在的磁盤I/O;
?(4)當(dāng)查詢讀/寫數(shù)據(jù)時(shí),必須建立鎖,可能需要更多的內(nèi)存、處理器資源和磁盤I/O
?(5)查詢的結(jié)果必須打包并傳送回客戶端,需要內(nèi)存、處理器資源和網(wǎng)絡(luò)I/O;
?
?由以上步驟可看,內(nèi)存必須至少被分配5次。如果系統(tǒng)內(nèi)存緊張,這個(gè)進(jìn)程就不得不每次都要等待所需要的內(nèi)存分配,這也就導(dǎo)致了需要5次轉(zhuǎn)入到等待的隊(duì)列中,然后又需要5次轉(zhuǎn)回到可執(zhí)行隊(duì)列。如果發(fā)生這樣的情況,每次資源的分配都會(huì)增加查詢的持續(xù)時(shí)間,查詢效率就會(huì)降低,形成內(nèi)存瓶頸。同樣道理,CPU、磁盤I/O、內(nèi)存、鎖都會(huì)出現(xiàn)這樣的情況。
轉(zhuǎn)載于:https://www.cnblogs.com/dbasys/archive/2009/01/08/1371784.html
總結(jié)
以上是生活随笔為你收集整理的SQL Server 2005查询处理结构-用户模式计划(UMS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【预告】1月6日下午14:30 CLR开
- 下一篇: linux cmake编译源码,linu