用Oracle并行查詢發(fā)揮多CPU的威力
更新時(shí)間:2007年03月07日 00:00:00 作者:
正在看的ORACLE教程是:用Oracle并行查詢發(fā)揮多CPU的威力。參數(shù)
讓我們進(jìn)一步看看CPU的數(shù)量是如何影響這些參數(shù)的。
參數(shù)fast_start_parallel_rollback
Oracle并行機(jī)制中一個(gè)令人興奮之處是在系統(tǒng)崩潰時(shí)調(diào)用并行回滾得能力。當(dāng)Oracle數(shù)據(jù)庫(kù)發(fā)生少有的崩潰時(shí),Oracle能自動(dòng)檢測(cè)未完成的事務(wù)并回滾到起始狀態(tài)。這被稱為并行熱啟動(dòng),而Oracle使用基于cpu_count的fast_start_parallel_rollback參數(shù)來(lái)決定未完成事務(wù)的秉性程度。
并行數(shù)據(jù)操縱語(yǔ)言(DML)恢復(fù)能夠在Oracle數(shù)據(jù)庫(kù)崩潰后極大地加快其重新啟動(dòng)的速度。此參數(shù)的默認(rèn)值是系統(tǒng)CPU數(shù)量的兩倍,但是一些DBA們認(rèn)為應(yīng)該將這個(gè)值設(shè)置為cpu_count的四倍。
參數(shù)parallel_max_servers_parameter
Oracle一個(gè)顯著的加強(qiáng)是自動(dòng)決定OPQ并行的程度。由于Oracle清楚服務(wù)器中CPU的數(shù)量,它會(huì)自動(dòng)分配合適的子進(jìn)程的數(shù)量來(lái)提升并行查詢的響應(yīng)時(shí)間。當(dāng)然,會(huì)有其它的外部因素,比如表的劃分以及磁盤輸入/輸出子系統(tǒng)的布局等,但是根據(jù)cpu_count來(lái)設(shè)置parallel_max_servers參數(shù)將給Oracle一個(gè)合理的依據(jù)來(lái)選擇并行的程度。
由于Oracle的并行操作嚴(yán)重依賴服務(wù)器上CPU的數(shù)量,parallel_max_servers會(huì)被設(shè)置成服務(wù)器上CPU的數(shù)量。如果在一臺(tái)服務(wù)器上運(yùn)行多個(gè)實(shí)例,則默認(rèn)值太大了,會(huì)導(dǎo)致過(guò)度的頁(yè)面交換和嚴(yán)重的CPU負(fù)擔(dān)。并行的程度還依賴于目標(biāo)表中分區(qū)的數(shù)量,因此parallel_max_servers應(yīng)該設(shè)置成足夠大以允許Oracle為每個(gè)查詢選擇最佳數(shù)量的并行子查詢。
參數(shù)log_buffer
參數(shù)log_buffer定義了供即刻寫入redo日志信息的保留RAM的數(shù)量,這個(gè)參數(shù)受cpu_count的影響。Oracle推薦log_buffer最大為cpu_count乘以500KB或128KB。CPU的數(shù)量對(duì)于log_buffer來(lái)說(shuō)非常重要,因?yàn)镺racle會(huì)生成多日志寫入(LGWR)進(jìn)程來(lái)異步釋放redo信息。
log_buffer是Oracle中最易誤解的的RAM參數(shù)之一,通常存在下面幾個(gè)配置錯(cuò)誤:
log_buffer被設(shè)置得太高(例如,大于1MB),這回引起性能問(wèn)題,因?yàn)榇笕萘康慕Y(jié)果會(huì)使得寫入同步進(jìn)行(例如,日志同步等待事件非常高)。
log_buffer 在一個(gè)單獨(dú)的服務(wù)器中安裝更多的CPU成為目前的一個(gè)趨勢(shì)。使用對(duì)稱多處理服務(wù)器(SMP)的情況下,一個(gè)Oracle服務(wù)器擁有8個(gè)、16個(gè)或32個(gè)CPU以及幾吉比特RAM的SGA都不足為奇。
Oracle跟上了硬件發(fā)展的步伐,提供了很多面向多CPU的功能。從Oracle8i開(kāi)始,Oracle在每個(gè)數(shù)據(jù)庫(kù)函數(shù)中都實(shí)現(xiàn)了并行性,包括SQL訪問(wèn)(全表檢索)、并行數(shù)據(jù)操作和并行恢復(fù)。對(duì)于Oracle專業(yè)版的挑戰(zhàn)是為用戶的數(shù)據(jù)庫(kù)配置盡可能多的CPU。
在Oracle環(huán)境中實(shí)現(xiàn)并行性最好的方法之一是使用Oracle并行查詢(OPQ)。我將討論OPQ是如何工作的和怎樣用它來(lái)提升大的全表檢索的響應(yīng)時(shí)間以及調(diào)用并行事務(wù)回滾等等。
使用OPQ
當(dāng)在Oracle中進(jìn)行一次合法的、大型的全表檢索時(shí),OPQ能夠極大地提高響應(yīng)時(shí)間。通過(guò)OPQ,Oracle將表劃分成如圖A所示的邏輯塊。
圖 A

由OPQ劃分的表
一旦表被劃分成塊,Oracle啟用并行的子查詢(有時(shí)稱為雜務(wù)進(jìn)程),每個(gè)子查詢同時(shí)讀取一個(gè)大型表中的一塊。所有子查詢完畢以后,Oracle將結(jié)果會(huì)傳給并行查詢調(diào)度器,它會(huì)重新安排數(shù)據(jù),如果需要?jiǎng)t進(jìn)行排序,并且將結(jié)果傳遞給最終用戶。OPQ具有無(wú)限的伸縮性,因此,以前需要花費(fèi)幾分鐘的全表檢索現(xiàn)在的響應(yīng)時(shí)間卻不到1秒。
OPQ嚴(yán)重依賴于處理器的數(shù)量,通過(guò)并行運(yùn)行之所以可以極大地提升全表檢索的性能,其前提就是使用了N-1個(gè)并行進(jìn)程(N=Oracle服務(wù)器上CPU的數(shù)量)。
必須注意非常重要的一點(diǎn),即Oracle9i能夠自動(dòng)檢測(cè)外部環(huán)境,包括服務(wù)器上CPU的數(shù)量。在安裝時(shí),Oracle9i會(huì)檢查服務(wù)器上CPU的數(shù)量,設(shè)置一個(gè)名為cpu_count的參數(shù),并使用cpu_count作為默認(rèn)的初始化輸入?yún)?shù)。這些初始化參數(shù)會(huì)影響到Oracle對(duì)內(nèi)部查詢的處理。
下面就是Orale在安裝時(shí)根據(jù)cpu_count而設(shè)置的一些參數(shù):
不是db_block_size的倍數(shù)。在的Oracle9i中,log_buffer應(yīng)該是2048字節(jié)的倍數(shù)。
參數(shù)db_block_lru_latches
LRU鎖的數(shù)量是在Oracle數(shù)據(jù)庫(kù)內(nèi)部用來(lái)管理數(shù)據(jù)庫(kù)緩沖的,這嚴(yán)重依賴于服務(wù)器上CPU的數(shù)量。
很多聰明的Oracle9i的DBA使用多沖數(shù)據(jù)緩沖(例如db_32k_cache_size),他們推薦將這個(gè)未公開(kāi)聲明的參數(shù)重設(shè)置為默認(rèn)的最大值。db_block_lru_latches參數(shù)在Oracle8i中使用得很多,但是在Oracle9i中變成了一個(gè)未公開(kāi)聲明的參數(shù),因?yàn)镺racle現(xiàn)在根據(jù)數(shù)據(jù)庫(kù)擁有的CPU數(shù)量設(shè)置了一個(gè)合理的默認(rèn)值。
db_block_lru_latches默認(rèn)被設(shè)置為服務(wù)器上cpu_count的一半(例如服務(wù)器上只有一個(gè)Oracle數(shù)據(jù)庫(kù))。Oracle推薦db_block_lru_latches千萬(wàn)不要超過(guò)cpu_count的兩倍或三倍,或db_block_buffers的五十分之一。
如果使用多緩沖池則這種計(jì)算方法有一個(gè)問(wèn)題,因?yàn)椴荒芸刂品峙浣o每個(gè)數(shù)據(jù)緩沖池的鎖的數(shù)量。如果db_writers參數(shù)大于1,則默認(rèn)值或許顯得太小。
加強(qiáng)服務(wù)器
Oracle數(shù)據(jù)庫(kù)總是在提升性能,根據(jù)外部服務(wù)器環(huán)境檢測(cè)cpu_count和基本參數(shù)設(shè)置的能力對(duì)于Oracle軟件來(lái)說(shuō)是一個(gè)重要的加強(qiáng)。
隨著更多的Oracle系統(tǒng)轉(zhuǎn)移到SMP上來(lái),當(dāng)客戶要采取增強(qiáng)措施并將眾多的數(shù)據(jù)庫(kù)轉(zhuǎn)移到擁有32個(gè)或64個(gè)CPU的巨大服務(wù)器上來(lái)的時(shí)候,這些參數(shù)顯得愈發(fā)重要。
讓我們進(jìn)一步看看CPU的數(shù)量是如何影響這些參數(shù)的。
參數(shù)fast_start_parallel_rollback
Oracle并行機(jī)制中一個(gè)令人興奮之處是在系統(tǒng)崩潰時(shí)調(diào)用并行回滾得能力。當(dāng)Oracle數(shù)據(jù)庫(kù)發(fā)生少有的崩潰時(shí),Oracle能自動(dòng)檢測(cè)未完成的事務(wù)并回滾到起始狀態(tài)。這被稱為并行熱啟動(dòng),而Oracle使用基于cpu_count的fast_start_parallel_rollback參數(shù)來(lái)決定未完成事務(wù)的秉性程度。
并行數(shù)據(jù)操縱語(yǔ)言(DML)恢復(fù)能夠在Oracle數(shù)據(jù)庫(kù)崩潰后極大地加快其重新啟動(dòng)的速度。此參數(shù)的默認(rèn)值是系統(tǒng)CPU數(shù)量的兩倍,但是一些DBA們認(rèn)為應(yīng)該將這個(gè)值設(shè)置為cpu_count的四倍。
參數(shù)parallel_max_servers_parameter
Oracle一個(gè)顯著的加強(qiáng)是自動(dòng)決定OPQ并行的程度。由于Oracle清楚服務(wù)器中CPU的數(shù)量,它會(huì)自動(dòng)分配合適的子進(jìn)程的數(shù)量來(lái)提升并行查詢的響應(yīng)時(shí)間。當(dāng)然,會(huì)有其它的外部因素,比如表的劃分以及磁盤輸入/輸出子系統(tǒng)的布局等,但是根據(jù)cpu_count來(lái)設(shè)置parallel_max_servers參數(shù)將給Oracle一個(gè)合理的依據(jù)來(lái)選擇并行的程度。
由于Oracle的并行操作嚴(yán)重依賴服務(wù)器上CPU的數(shù)量,parallel_max_servers會(huì)被設(shè)置成服務(wù)器上CPU的數(shù)量。如果在一臺(tái)服務(wù)器上運(yùn)行多個(gè)實(shí)例,則默認(rèn)值太大了,會(huì)導(dǎo)致過(guò)度的頁(yè)面交換和嚴(yán)重的CPU負(fù)擔(dān)。并行的程度還依賴于目標(biāo)表中分區(qū)的數(shù)量,因此parallel_max_servers應(yīng)該設(shè)置成足夠大以允許Oracle為每個(gè)查詢選擇最佳數(shù)量的并行子查詢。
參數(shù)log_buffer
參數(shù)log_buffer定義了供即刻寫入redo日志信息的保留RAM的數(shù)量,這個(gè)參數(shù)受cpu_count的影響。Oracle推薦log_buffer最大為cpu_count乘以500KB或128KB。CPU的數(shù)量對(duì)于log_buffer來(lái)說(shuō)非常重要,因?yàn)镺racle會(huì)生成多日志寫入(LGWR)進(jìn)程來(lái)異步釋放redo信息。
log_buffer是Oracle中最易誤解的的RAM參數(shù)之一,通常存在下面幾個(gè)配置錯(cuò)誤:
log_buffer被設(shè)置得太高(例如,大于1MB),這回引起性能問(wèn)題,因?yàn)榇笕萘康慕Y(jié)果會(huì)使得寫入同步進(jìn)行(例如,日志同步等待事件非常高)。
log_buffer 在一個(gè)單獨(dú)的服務(wù)器中安裝更多的CPU成為目前的一個(gè)趨勢(shì)。使用對(duì)稱多處理服務(wù)器(SMP)的情況下,一個(gè)Oracle服務(wù)器擁有8個(gè)、16個(gè)或32個(gè)CPU以及幾吉比特RAM的SGA都不足為奇。
Oracle跟上了硬件發(fā)展的步伐,提供了很多面向多CPU的功能。從Oracle8i開(kāi)始,Oracle在每個(gè)數(shù)據(jù)庫(kù)函數(shù)中都實(shí)現(xiàn)了并行性,包括SQL訪問(wèn)(全表檢索)、并行數(shù)據(jù)操作和并行恢復(fù)。對(duì)于Oracle專業(yè)版的挑戰(zhàn)是為用戶的數(shù)據(jù)庫(kù)配置盡可能多的CPU。
在Oracle環(huán)境中實(shí)現(xiàn)并行性最好的方法之一是使用Oracle并行查詢(OPQ)。我將討論OPQ是如何工作的和怎樣用它來(lái)提升大的全表檢索的響應(yīng)時(shí)間以及調(diào)用并行事務(wù)回滾等等。
使用OPQ
當(dāng)在Oracle中進(jìn)行一次合法的、大型的全表檢索時(shí),OPQ能夠極大地提高響應(yīng)時(shí)間。通過(guò)OPQ,Oracle將表劃分成如圖A所示的邏輯塊。
圖 A

由OPQ劃分的表
一旦表被劃分成塊,Oracle啟用并行的子查詢(有時(shí)稱為雜務(wù)進(jìn)程),每個(gè)子查詢同時(shí)讀取一個(gè)大型表中的一塊。所有子查詢完畢以后,Oracle將結(jié)果會(huì)傳給并行查詢調(diào)度器,它會(huì)重新安排數(shù)據(jù),如果需要?jiǎng)t進(jìn)行排序,并且將結(jié)果傳遞給最終用戶。OPQ具有無(wú)限的伸縮性,因此,以前需要花費(fèi)幾分鐘的全表檢索現(xiàn)在的響應(yīng)時(shí)間卻不到1秒。
OPQ嚴(yán)重依賴于處理器的數(shù)量,通過(guò)并行運(yùn)行之所以可以極大地提升全表檢索的性能,其前提就是使用了N-1個(gè)并行進(jìn)程(N=Oracle服務(wù)器上CPU的數(shù)量)。
必須注意非常重要的一點(diǎn),即Oracle9i能夠自動(dòng)檢測(cè)外部環(huán)境,包括服務(wù)器上CPU的數(shù)量。在安裝時(shí),Oracle9i會(huì)檢查服務(wù)器上CPU的數(shù)量,設(shè)置一個(gè)名為cpu_count的參數(shù),并使用cpu_count作為默認(rèn)的初始化輸入?yún)?shù)。這些初始化參數(shù)會(huì)影響到Oracle對(duì)內(nèi)部查詢的處理。
下面就是Orale在安裝時(shí)根據(jù)cpu_count而設(shè)置的一些參數(shù):
- fast_start_parallel_rollback
- parallel_max_servers
- log_buffer
- db_block_lru_latches
[NextPage]
不是db_block_size的倍數(shù)。在的Oracle9i中,log_buffer應(yīng)該是2048字節(jié)的倍數(shù)。
參數(shù)db_block_lru_latches
LRU鎖的數(shù)量是在Oracle數(shù)據(jù)庫(kù)內(nèi)部用來(lái)管理數(shù)據(jù)庫(kù)緩沖的,這嚴(yán)重依賴于服務(wù)器上CPU的數(shù)量。
很多聰明的Oracle9i的DBA使用多沖數(shù)據(jù)緩沖(例如db_32k_cache_size),他們推薦將這個(gè)未公開(kāi)聲明的參數(shù)重設(shè)置為默認(rèn)的最大值。db_block_lru_latches參數(shù)在Oracle8i中使用得很多,但是在Oracle9i中變成了一個(gè)未公開(kāi)聲明的參數(shù),因?yàn)镺racle現(xiàn)在根據(jù)數(shù)據(jù)庫(kù)擁有的CPU數(shù)量設(shè)置了一個(gè)合理的默認(rèn)值。
db_block_lru_latches默認(rèn)被設(shè)置為服務(wù)器上cpu_count的一半(例如服務(wù)器上只有一個(gè)Oracle數(shù)據(jù)庫(kù))。Oracle推薦db_block_lru_latches千萬(wàn)不要超過(guò)cpu_count的兩倍或三倍,或db_block_buffers的五十分之一。
如果使用多緩沖池則這種計(jì)算方法有一個(gè)問(wèn)題,因?yàn)椴荒芸刂品峙浣o每個(gè)數(shù)據(jù)緩沖池的鎖的數(shù)量。如果db_writers參數(shù)大于1,則默認(rèn)值或許顯得太小。
加強(qiáng)服務(wù)器
Oracle數(shù)據(jù)庫(kù)總是在提升性能,根據(jù)外部服務(wù)器環(huán)境檢測(cè)cpu_count和基本參數(shù)設(shè)置的能力對(duì)于Oracle軟件來(lái)說(shuō)是一個(gè)重要的加強(qiáng)。
隨著更多的Oracle系統(tǒng)轉(zhuǎn)移到SMP上來(lái),當(dāng)客戶要采取增強(qiáng)措施并將眾多的數(shù)據(jù)庫(kù)轉(zhuǎn)移到擁有32個(gè)或64個(gè)CPU的巨大服務(wù)器上來(lái)的時(shí)候,這些參數(shù)顯得愈發(fā)重要。
上一頁(yè)
相關(guān)文章
Oracle數(shù)字類型number自增的實(shí)現(xiàn)代碼
這篇文章主要介紹了Oracle數(shù)字類型number自增的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08
Oracle?11g+windows?環(huán)境下Ecology7系統(tǒng)安裝過(guò)程
這篇文章主要介紹了Oracle?11g+windows?環(huán)境下Ecology7系統(tǒng)安裝,安裝步驟是以管理員模式運(yùn)行Oracle setup.exe文件,根據(jù)提示安裝Oracle,創(chuàng)建數(shù)據(jù)庫(kù),注意修改連接數(shù),本文給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10
Oracle導(dǎo)入導(dǎo)出數(shù)據(jù)的幾種方式
今天小編就為大家分享一篇關(guān)于Oracle導(dǎo)入導(dǎo)出數(shù)據(jù)的幾種方式,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
詳解Linux系統(tǒng)中Oracle數(shù)據(jù)庫(kù)程序的啟動(dòng)和關(guān)閉方式
這篇文章主要介紹了Linux系統(tǒng)中Oracle數(shù)據(jù)庫(kù)程序的啟動(dòng)和關(guān)閉方式,文中還講到了滴哦Oracle啟動(dòng)錯(cuò)誤問(wèn)題的解決,需要的朋友可以參考下2016-03-03
oracle 12c因誤刪pdb數(shù)據(jù)文件導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)打不開(kāi)的解決方法
這篇文章主要給大家介紹了關(guān)于oracle 12c因誤刪pdb數(shù)據(jù)文件導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)打不開(kāi)問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2017-10-10

