在SQL Server中,等待類型有很多,為了便于使用和管理,這些等待類型又是被進(jìn)行了分類的,所以,下面,我們就來(lái)看看等待類型的分類。
成都創(chuàng)新互聯(lián)于2013年成立,先為賓縣等服務(wù)建站,賓縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為賓縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。說(shuō)出來(lái)可能有點(diǎn)嚇人:在SQL Server內(nèi)部,可以跟蹤大約400多個(gè)等待類型。如此眾多的等待類型,可以讓我們感受到:發(fā)生等待的原因真是太多了,如果靠我們自己“小米+步槍”的方式去分析,會(huì)花費(fèi)多少精力。
盡管有如此眾多的等待,其實(shí)我們常常用到的,或者我們關(guān)注的等待就只有很少的一部分,如那些與資源爭(zhēng)奪相關(guān)的等待:CPU,I/O,內(nèi)存等。下面,我們就介紹我們常常使用的四大等待類型的分類:
資源等待(Resource waits):這類型的等待發(fā)生的場(chǎng)景是這樣的:當(dāng)某個(gè)工作線程要去訪問謀一份資源的時(shí)候,但是此時(shí),這個(gè)資源被其他線程占用。在這種等待分類中,我們常??吹降牡湫偷模珂i,閂鎖,和網(wǎng)絡(luò)。
信號(hào)等待(Signal waits):某個(gè)工作線程在等待CPU可用所花費(fèi)的時(shí)間。在SQL Server中,如果某個(gè)工作線程運(yùn)行所需要的資源全部已經(jīng)準(zhǔn)備好了,此時(shí),它就要被運(yùn)行,但是CPU每次只能運(yùn)行一個(gè)線程,那么,那些已經(jīng)就緒的工作線程就會(huì)被放在稱之為runnable的隊(duì)列中,等待CPU時(shí)鐘的到來(lái),然后被運(yùn)行。此時(shí),可以知道,如果這類的等待時(shí)間多長(zhǎng),那么就說(shuō)明CPU有壓力,因?yàn)橐贿\(yùn)行的線程不缺任何的資源,就差被CPU去執(zhí)行了。
隊(duì)列等待(Queue waits):這種分類的等待發(fā)生的場(chǎng)景是這樣的:一個(gè)工作線程很閑,等待有任務(wù)教給它。那么,這里就有一點(diǎn)要說(shuō)明的就是:在數(shù)據(jù)庫(kù)中,有個(gè)工作線程池,我們的向數(shù)據(jù)庫(kù)發(fā)送的每個(gè)請(qǐng)求,都是交給工作線程,然后這些線程去運(yùn)行的。舉個(gè)例子,你要去圖書館借書,在圖書館中有很多的圖書管理員,這些管理員我們就稱之為“工作線程”。當(dāng)我們發(fā)起一個(gè)借書的請(qǐng)求之后,這個(gè)請(qǐng)求就被交給圖書管理員,然后由他們?nèi)フ視?。如果圖書館總是沒有人借書,或者借的人很少,那么這些管理員就閑置。這種類型的等待常常與系統(tǒng)的背后任何相關(guān),可以用來(lái)分析死鎖等情況。
外部等待(External waits):很好理解,當(dāng)SQL Server工作線程要等待外部某個(gè)事件事件的發(fā)生然后才去運(yùn)行,在事件發(fā)生之前就要等待,如采用linked server查詢,需要等到結(jié)果過(guò)了之后才能繼續(xù)進(jìn)行。
不登高山,怎知天高;不臨深溪,焉知地厚!站在堅(jiān)實(shí)的土地上,做著生命中最真實(shí)的事情;像一棵挺拔的大樹,認(rèn)可自己的命運(yùn)并敢于迎接屬于這一方天空的風(fēng)風(fēng)雨雨。