Oracle數(shù)據(jù)庫進(jìn)程之從屬進(jìn)程詳解
上次我們介紹了:Oracle數(shù)據(jù)庫進(jìn)程之后臺進(jìn)程詳解,本文我們看一下最后一類Oracle 進(jìn)程:從屬進(jìn)程(slave process)。Oracle 中有兩類從屬進(jìn)程:I/O 從屬進(jìn)程和并行查詢從屬進(jìn)程。接下來我們分別開始介紹。
I/O 從屬進(jìn)程
I/O從屬進(jìn)程用于為不支持異步I/O的系統(tǒng)或設(shè)備模擬異步I/O。例如,磁帶設(shè)備(相當(dāng)慢)就不支持異步I/O。通過使用I/O 從屬進(jìn)程,可以讓磁帶機(jī)模仿通常只為磁盤驅(qū)動器提供的功能。就好像支持真正的異步I/O 一樣,寫設(shè)備的進(jìn)程(調(diào)用者)會收集大量數(shù)據(jù),并交由寫入器寫出。數(shù)據(jù)成功地寫出時,寫入器(此時寫入器是I/O 從屬進(jìn)程,而不是操作系統(tǒng))會通知原來的調(diào)用者,調(diào)用者則會從要寫的數(shù)據(jù)列表中刪除這批數(shù)據(jù)。
采用這種方式,可以得到更高的吞吐量,這是因為會由I/O 從屬進(jìn)程來等待慢速的設(shè)備,而原來的調(diào)用進(jìn)程得以脫身,可以做其他重要的工作來收集下一次要寫的數(shù)據(jù)。
I/O 從屬進(jìn)程在Oracle 中有兩個用途。DBWn 和LGWR 可以利用I/O 從屬進(jìn)程來模擬異步I/O,另外RMAN寫磁帶時也可能利用I/O 從屬進(jìn)程。
有兩個參數(shù)控制著I/O 從屬進(jìn)程的使用:
BACKUP_TAPE_IO_SLAVES:這個參數(shù)指定RMAN 是否使用I/O 從屬進(jìn)程將數(shù)據(jù)備份、復(fù)制或恢復(fù)到磁帶上。由于這個參數(shù)是圍繞著磁帶設(shè)備設(shè)計的,而且磁帶設(shè)備一次只能由一個進(jìn)程訪問,所以這個參數(shù)是一個布爾值,而不是所用從屬進(jìn)程的個數(shù)(這可能出乎你的意料)。RMAN 會為所用的物理設(shè)備啟動多個必要的從屬進(jìn)程。BACKUP_TAPE_IO_SLAVES = TRUE 時,則使用一個I/O 從屬進(jìn)程從磁帶設(shè)備讀寫。如果這個參數(shù)為FALSE(默認(rèn)值),就不會使用I/O從屬進(jìn)程完成備份。相反,完成備份的專用服務(wù)器進(jìn)程會直接訪問磁帶設(shè)備。
DBWR_IO_SLAVES:這個參數(shù)指定了DBW0 進(jìn)程所用I/O 從屬進(jìn)程的個數(shù)。DBW0 進(jìn)程及其從屬進(jìn)程總是將緩沖區(qū)緩存中的臟塊寫至磁盤。這個值默認(rèn)為0,表示不使用I/O 從屬進(jìn)程。注意,如果將這個參數(shù)設(shè)置為一個非0 的值,LGWR 和ARCH 也會使用其自己的I/O 從屬進(jìn)程,LGWR 和ARCH 最多允許4 個I/O 從屬進(jìn)程。
DBWR I/O 從屬進(jìn)程的名字是I1nn,LGWRI/O 從屬進(jìn)程的名字是I2nn,這里nn 是一個數(shù)。
并行查詢從屬進(jìn)程
Oracle7.1.6 引入了并行查詢功能。這個功能是指:對于SELECT、CREATE TABLE、CREATE INDEX、UPDATE 等SQL 語句,創(chuàng)建一個執(zhí)行計劃,其中包含可以同時完成的多個(子)執(zhí)行計劃。將每個執(zhí)行計劃的輸出合并在一起構(gòu)成一個更大的結(jié)果。其目標(biāo)是僅用少量的時間來完成操作,這只是串行完成同一操作所需時間的一小部分。
例如,假設(shè)有一個相當(dāng)大的表,分布在10 個不同的文件上。你配置有16 個CPU,并且需要在這個表上執(zhí)行一個即席查詢。另一種方法是:可以將這個查詢計劃分解為32 個小部分,并充分地利用機(jī)器;而不是只使用一個進(jìn)程串行地讀取和處理所有數(shù)據(jù)。相比之下,前一種做法要好得多。
使用并行查詢時,會看到名為Pnnn 的進(jìn)程,這些就是并行查詢從屬進(jìn)程。處理一條并行語句時,服務(wù)器進(jìn)程則稱為并行查詢協(xié)調(diào)器(parallelquery coordinator)。操作系統(tǒng)上服務(wù)器進(jìn)程的名字并不會改變,但是閱讀有關(guān)并行查詢的文檔時,如果提到了協(xié)調(diào)器進(jìn)程,你應(yīng)該知道這就是原來的服務(wù)器進(jìn)程。
關(guān)于Oracle數(shù)據(jù)庫進(jìn)程之從屬進(jìn)程的相關(guān)知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@。
Oracle進(jìn)程系列相關(guān)文章:
Oracle數(shù)據(jù)庫進(jìn)程之服務(wù)器進(jìn)程詳解
Oracle數(shù)據(jù)庫進(jìn)程之后臺進(jìn)程詳解
【編輯推薦】