明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

SQL Server小知識(shí):Processor Affinity

[摘要]SQL Server通常都運(yùn)行在多處理器的服務(wù)器上,這一點(diǎn)在現(xiàn)在尤為普遍。原因是多內(nèi)核的處理器越來(lái)越普及。 那么,在多處理器環(huán)境下,Windows操作系統(tǒng)(事實(shí)上是從2000開(kāi)始的)通常都會(huì)將進(jìn)程任...

SQL Server通常都運(yùn)行在多處理器的服務(wù)器上,這一點(diǎn)在現(xiàn)在尤為普遍。原因是多內(nèi)核的處理器越來(lái)越普及。

那么,在多處理器環(huán)境下,Windows操作系統(tǒng)(事實(shí)上是從2000開(kāi)始的)通常都會(huì)將進(jìn)程任務(wù)放在一個(gè)隊(duì)伍里面,然后讓這些處理任務(wù)依次去占有處理器進(jìn)行計(jì)算。

這樣做的好處就是每個(gè)計(jì)算任務(wù)都可以獲得近似于平均的處理資源,盡管無(wú)法保證一個(gè)處理任務(wù)每次都能拿到同一個(gè)處理器。這就像嘉年華我們重復(fù)排隊(duì)參加一個(gè)刺激的項(xiàng)目(比如說(shuō)自由落體,事實(shí)上我從來(lái)不參加這種項(xiàng)目),每個(gè)人上去一輪,并不能保證每次都能做同一張位置。

不過(guò)回到SQL Server上面來(lái),SQL Server可不喜歡這樣的處理機(jī)制。

大家可能都知道處理器中有個(gè)東西叫片內(nèi)緩存,片內(nèi)緩存有1級(jí)、2級(jí)、3級(jí)之分。

我們假設(shè)處理器要計(jì)算A、B、C三個(gè)任務(wù),處理器先運(yùn)算A任務(wù),A任務(wù)還沒(méi)有結(jié)束的時(shí)候它的游戲時(shí)間就結(jié)束了,因此處理器在接受B的時(shí)候會(huì)將計(jì)算B所需的數(shù)據(jù)加載到1級(jí)片內(nèi)緩存中,而將A任務(wù)(我們假設(shè)處理器還沒(méi)有完成它的計(jì)算任務(wù))的數(shù)據(jù)挪到2級(jí)片內(nèi)緩存中,或者3級(jí)。

當(dāng)那個(gè)A任務(wù)回來(lái)的計(jì)算的時(shí)候,處理器會(huì)從2級(jí)片內(nèi)緩存中恢復(fù)計(jì)算所需的數(shù)據(jù),當(dāng)然這要取決于是不是那些數(shù)據(jù)還在2級(jí)緩存中,因?yàn)橛泻芏嘁蛩乜梢宰屗辉谀莾海热缯f(shuō)A任務(wù)回來(lái)的時(shí)候發(fā)現(xiàn)接待它的已經(jīng)不是原來(lái)那個(gè)處理器了,當(dāng)然A任務(wù)就不能指望面前這個(gè)處理器有它的計(jì)算數(shù)據(jù)了(當(dāng)然計(jì)算A任務(wù)回到同一顆處理器,也可能因?yàn)槠渌蝿?wù)占用了這個(gè)處理器的2級(jí)片內(nèi)緩存而導(dǎo)致它原來(lái)存入的數(shù)據(jù)被替換掉了)。

如果處理器發(fā)現(xiàn)A任務(wù)數(shù)據(jù)還在2級(jí)片內(nèi)緩存中,操作系統(tǒng)就認(rèn)為這次命中了2級(jí)緩存,如果不在了,就說(shuō)這次沒(méi)有命中2級(jí)緩存。因此我們可以知道操作系統(tǒng)是非?释看味济2級(jí)緩存的,因?yàn)檫@樣就可以節(jié)省不少時(shí)間重新從內(nèi)存中將數(shù)據(jù)加載到片內(nèi)緩存中。

大多數(shù)操作系統(tǒng)要面對(duì)的任務(wù)都不會(huì)有太多的計(jì)算數(shù)據(jù),因此這些任務(wù)不需要太多關(guān)心片內(nèi)緩存的問(wèn)題。同時(shí)多數(shù)低端的服務(wù)器也沒(méi)有很大的片內(nèi)緩存,因此它們也不太關(guān)心這個(gè)問(wèn)題。不過(guò)對(duì)于運(yùn)行在有較大片內(nèi)緩存的服務(wù)器上的SQL Server來(lái)說(shuō),這個(gè)問(wèn)題就要嚴(yán)肅一些了。

在中高端的PC服務(wù)器(為什么說(shuō)是PC服務(wù)器呢,因?yàn)閃indows現(xiàn)在還可以運(yùn)行在一些廠商的小型機(jī)平臺(tái)上,例如HP的SuperDome)中,通常單個(gè)處理器的片內(nèi)緩存都在2M-4M,而且這些服務(wù)器可以擁有8個(gè)甚至更多一些的處理器,同時(shí)SQL Server的計(jì)算任務(wù)都是依賴于大量數(shù)據(jù)的,因此SQL Server的一個(gè)任務(wù)可不希望它重新拿回處理器的時(shí)候發(fā)現(xiàn)自己的數(shù)據(jù)不在了。

為了解決這個(gè)問(wèn)題,SQL Server就有了這個(gè)處理器親和度(Processor Affinity)的配置項(xiàng),啟用這個(gè)選項(xiàng)后,SQL Server中的任務(wù)就會(huì)記著自己原來(lái)在那個(gè)處理器上工作的,當(dāng)它們?cè)俅斡袡C(jī)會(huì)回到處理器工作的時(shí)候它們會(huì)認(rèn)準(zhǔn)回家的路——只用原來(lái)的那顆處理器。(事實(shí)上這個(gè)過(guò)程要復(fù)雜一些,有興趣的朋友可以進(jìn)一步了解SQL Server中調(diào)度這個(gè)概念)。

關(guān)鍵詞標(biāo)簽:知識(shí),處理器,任務(wù),計(jì)算

學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。