Oracle專(zhuān)用服務(wù)器與共享服務(wù)器對(duì)比談
在建立Oracle數(shù)據(jù)庫(kù)的時(shí)候,應(yīng)該會(huì)在數(shù)據(jù)庫(kù)建立助手向?qū)厦婵吹竭@么一個(gè)選項(xiàng),就是數(shù)據(jù)庫(kù)的連接模式采用什么方式。在Oracle9i或者10g中,可以看到有2種連接模式,一種叫做專(zhuān)用服務(wù)器連接(dedicated server) ,另外一種叫做共享服務(wù)器連接(shared server)。下面我們來(lái)分類(lèi)說(shuō)一下這兩種連接方式的不同點(diǎn)。
專(zhuān)用服務(wù)器模式就是說(shuō)每次在對(duì)Oracle進(jìn)行訪(fǎng)問(wèn)的時(shí)候,Oracle服務(wù)器的Listener會(huì)得到這個(gè)訪(fǎng)問(wèn)請(qǐng)求,然后回為這個(gè)訪(fǎng)問(wèn)創(chuàng)建一個(gè)新的進(jìn)程來(lái)進(jìn)行服務(wù)。所以說(shuō),對(duì)于每一個(gè)客戶(hù)端的訪(fǎng)問(wèn),都會(huì)生成一個(gè)新的進(jìn)程進(jìn)行服務(wù),是一種類(lèi)似一對(duì)一的映射關(guān)系。這種連接模式的一個(gè)很重要的特點(diǎn)就是UGA(用戶(hù)全局域)是存儲(chǔ)在PGA(進(jìn)程全局域)中的,這個(gè)特性也很好說(shuō)明了當(dāng)前用戶(hù)的內(nèi)存空間是按照進(jìn)程來(lái)進(jìn)行分配的。
而另外的共享服務(wù)器連接則是一種在程序編寫(xiě)的時(shí)候通常會(huì)用到的連接池(pool)的概念。采用這種模式的話(huà),在數(shù)據(jù)庫(kù)的初始化的時(shí)候就會(huì)創(chuàng)建一批服務(wù)器連接的進(jìn)程,然后把這些連接進(jìn)程放入一個(gè)連接池來(lái)進(jìn)行管理。初始化的池中的進(jìn)程數(shù)量在數(shù)據(jù)庫(kù)初始化建立的時(shí)候是可以手動(dòng)設(shè)置的。在連接建立的時(shí)候,Listener首先接受到客戶(hù)端的建立連接的請(qǐng)求,然后Listener去生成一個(gè)叫做調(diào)度器(dipatcher)的進(jìn)程與客戶(hù)端進(jìn)行連接。調(diào)度器把把客戶(hù)端的請(qǐng)求放在SGA(系統(tǒng)全局域)的一個(gè)請(qǐng)求隊(duì)列中,然后再共享服務(wù)器連接池中查找有無(wú)空閑的連接,然后讓這個(gè)空閑的服務(wù)器進(jìn)行處理。處理完畢以后再把處理結(jié)果放在SGA的相應(yīng)隊(duì)列中。調(diào)度器通過(guò)查詢(xún)相應(yīng)隊(duì)列,得到返回結(jié)果,再返回給客戶(hù)端。這種連接模式的優(yōu)點(diǎn)在于服務(wù)器進(jìn)程的數(shù)量可以得到控制,不大可能出現(xiàn)因?yàn)檫B接人數(shù)過(guò)多而造成服務(wù)器內(nèi)存崩潰。但是由于增加了復(fù)雜度以及請(qǐng)求相應(yīng)隊(duì)列,可能性能上有所下降。
總之,在開(kāi)發(fā)階段中,用第一種專(zhuān)用服務(wù)器可能好一些,因?yàn)樯倭艘恍┲虚g的復(fù)雜度,而且開(kāi)發(fā)的時(shí)候一般連接的數(shù)量也少。而在多個(gè)應(yīng)用同時(shí)使用一個(gè)數(shù)據(jù)庫(kù)的實(shí)際應(yīng)用環(huán)境下,采用第二種方法可能好一些,因?yàn)槿绻綍r(shí)候突然有1000個(gè)或者10000個(gè)請(qǐng)求連接的話(huà),數(shù)據(jù)庫(kù)服務(wù)器如果同時(shí)建立10000個(gè)連接,肯定要受不了的。當(dāng)然,也要看到時(shí)候的實(shí)際情況如何再做決定,兩者沒(méi)有絕對(duì)的哪種好哪種不好的差別
關(guān)于這兩者的比較"假如你來(lái)到一個(gè)城市,要在這個(gè)城市的不同的地方辦幾件事情,在交通方面你有兩種選擇:一個(gè)是雇一輛專(zhuān)車(chē),這輛專(zhuān)車(chē)將會(huì)把你從A帶到B,一直等你把在B的事情辦完,在把你從B帶到C。。。。。。另一種選擇是給出租車(chē)公司打電話(huà)訂輛出租車(chē),先把你從A帶到B,然后你和出租車(chē)該干嘛干嘛,你去辦你的事情,出租車(chē)去接別的生意,等你在B的事情辦完了,你再跟出租車(chē)公司訂車(chē),出租車(chē)公司將會(huì)聯(lián)系當(dāng)時(shí)在B附近的其他出租車(chē)去接你。。。。。。
首先,dedicated servers的設(shè)置非常簡(jiǎn)單-----不需要設(shè)置,這個(gè)是Oracle的默認(rèn)選項(xiàng)
而對(duì)于shared servers,你就要需要做一些額外的設(shè)置,當(dāng)讓按照administrator guide并不難,關(guān)鍵是你需要決定到底需要多少個(gè)shared server servers和多少個(gè)dispatcher,這不僅僅需要經(jīng)驗(yàn)的積累,還需要持續(xù)的觀(guān)察和調(diào)整。
在dedicated servers里,你所有的等待都是數(shù)據(jù)庫(kù)本身的等待,而在shared servers里你有可能需要等待一個(gè)available的shared server process。
很明顯,當(dāng)用戶(hù)并發(fā)的連接數(shù)很大的時(shí)候,dedicated servers的server process個(gè)數(shù)也會(huì)變得很大,對(duì)于操作系統(tǒng)來(lái)說(shuō)多一個(gè)process就意味著多一點(diǎn)管理負(fù)擔(dān),要知道操作系統(tǒng)支持的同時(shí)并發(fā)數(shù)可不是無(wú)限的。這意味著,在dedicate servers里,當(dāng)你有大量的用戶(hù)連接(比如,同一時(shí)間超過(guò)5000個(gè)用戶(hù)連上來(lái)),你的系統(tǒng)負(fù)擔(dān)就會(huì)相當(dāng)大。而這種情況shared servers就可以處理的相對(duì)好一些,因?yàn)榧尤胪瑫r(shí)有5000個(gè)用戶(hù)連上來(lái)而且我們知道一般只有1%的連接是active,那我們只需要設(shè)置50個(gè)shared servers就可以把所有的用戶(hù)請(qǐng)求處理得很好,并節(jié)省了系統(tǒng)資源。
作為一個(gè)好處,shared servers可以用來(lái)控制concurrent。要知道用戶(hù)的并發(fā)數(shù)和系統(tǒng)的處理能力決不是成正比的(可以下面的圖),當(dāng)用戶(hù)并發(fā)數(shù)超過(guò)一個(gè)閥值,系統(tǒng)的處理能力會(huì)明顯下降。通過(guò)shared servers可以控制系統(tǒng)的concurrent不超過(guò)這個(gè)閥值。
在引入PGA的自動(dòng)管理以前,shared servers是要比dedicated servers節(jié)省內(nèi)存的,然后在自動(dòng)管理的PGA引入之后,shared servers的這個(gè)優(yōu)勢(shì)已經(jīng)不像我們想象的那么不明顯了。
dedicate servers一個(gè)server process為了一個(gè)較大的request而長(zhǎng)時(shí)間的工作而不影響其它的users,然而在shared servers,一些較大的request會(huì)影響其它的用戶(hù)。
還需要考慮其他的因素,比如,如果在前端使用了weblogic的connecting pool,那么你在database level再使用shared servers可能就不是很必要,因?yàn)檫@時(shí)你的用戶(hù)連接已經(jīng)在weblogic層面上得到了控制。
shared servers還有一個(gè)所謂的偽死鎖的問(wèn)題,這點(diǎn)大家參考一下tom的新書(shū)就知道了。
關(guān)于dedicated servers和shared servers的話(huà)題我們就討論這么多,最后給大家一個(gè)小提示:其實(shí)dedicated servers和shared servers是可以并存的,實(shí)際上,即使你使用了shared servers,某些管理操作也是必須在dedicated 模式下來(lái)做的,比如startup或shutdown database。如果你實(shí)在難以選擇,如果你的應(yīng)用可能一部分是OLTP的(用戶(hù)量也很大),一部分是DW的,其實(shí)你可以考慮同時(shí)使用dedicated servers和shared servers。"
查看運(yùn)行情況:
- idle> show parameter shared_server mts_servers
- NAME_COL_PLUS_SHOW_PARAM TYPE
- ------------------------------------------------------------
- VALUE_COL_PLUS_SHOW_PARAM
- ------------------------------------------------------------
- max_shared_servers integer
- 20
- shared_server_sessions integer
- 165
- shared_servers integer
- 1
- --如果VALUE_COL_PLUS_SHOW_PARAM大于0為dedicated模式
- idle> select p.program,s.server from v$session s , v$process p
- 2 where s.paddr = p.addr
- 3 ;
- PROGRAM SERVER
- ------------------------------------------------ ---------
- oracle@infa (PMON) DEDICATED
- oracle@infa (DBW0) DEDICATED
- oracle@infa (LGWR) DEDICATED
- oracle@infa (CKPT) DEDICATED
- oracle@infa (SMON) DEDICATED
- oracle@infa (RECO) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- oracle@infa (TNS V1-V3) DEDICATED
- 15 rows selected.
模式切換:
客戶(hù)端建立的連接。
如果服務(wù)器是專(zhuān)用模式,客戶(hù)端再怎么修改也沒(méi)有用。
服務(wù)器切換專(zhuān)有和共享模式的方法是修改參數(shù)文件中的參數(shù)。
sample:
trace:http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/manproc.htm#sthref630
大多數(shù)情況下我們更傾向或習(xí)慣專(zhuān)用模式,兩種模式下,對(duì)sga等分配都會(huì)有不同,所以如果轉(zhuǎn)換成mts模式,別忘了sga也是需要調(diào)整的。最典型的是mts模式需要較大的large_pool_size。如果真想轉(zhuǎn)換還是仔細(xì)看看oracle關(guān)于mts的文檔。共享連接只是把連接SESSION信息放在LARGE POOL,所以L(fǎng)ARGE POOL要大一些。而專(zhuān)用連接的SESION信息放在PGA。
Note:
1. 如果是dedicated server,則客戶(hù)端只能創(chuàng)建dedicated server connection
2. 如果是shared server,則客戶(hù)端能創(chuàng)建dedicated server connection和shared server connection,只要在service name中指定server=dedicated or server=shared.
原文標(biāo)題:Oracle專(zhuān)用服務(wù)器與共享服務(wù)器的區(qū)別
鏈接:http://www.cnblogs.com/programwjy/archive/2010/08/24/1807249.html