建立與Oracle資料庫伺服器連線的兩種連線模式(專用伺服器與共享伺服器)

tolywang發表於2008-04-17
在建立Oracle資料庫的時候,應該會在資料庫建立助手嚮導上面看到這麼一個選項,就是資料庫的連線模式採用什麼方式。在Oracle9i或者10g中,可以看到有2種連線模式,一種叫做專用伺服器連線(dedicated server) ,另外一種叫做共享伺服器連線(shared server)。下面我們來分類說一下這兩種連線方式的不同點。[@more@]

專用伺服器模式就是說每次在對Oracle進行訪問的時候,Oracle伺服器的Listener會得到這個訪問請求,然後回為這個訪問建立一個新的程式來進行服務。所以說,對於每一個客戶端的訪問,都會生成一個新的程式進行服務,是一種類似一對一的對映關係。這種連線模式的一個很重要的特點就是UGA(使用者全域性域)是儲存在PGA(程式全域性域)中的,這個特性也很好說明了當前使用者的記憶體空間是按照程式來進行分配的。

而另外的共享伺服器連線則是一種在程式編寫的時候通常會用到的連線池(pool)的概念。採用這種模式的話,在資料庫的初始化的時候就會建立一批伺服器連線的程式,然後把這些連線程式放入一個連線池來進行管理。初始化的池中的程式數量在資料庫初始化建立的時候是可以手動設定的。在連線建立的時候,Listener首先接受到客戶端的建立連線的請求,然後Listener去生成一個叫做排程器(dipatcher)的程式與客戶端進行連線。排程器把把客戶端的請求放在SGA(系統全域性域)的一個請求佇列中,然後再共享伺服器連線池中查詢有無空閒的連線,然後讓這個空閒的伺服器進行處理。處理完畢以後再把處理結果放在SGA的相應佇列中。排程器透過查詢相應佇列,得到返回結果,再返回給客戶端。這種連線模式的優點在於伺服器程式的數量可以得到控制,不大可能出現因為連線人數過多而造成伺服器記憶體崩潰。但是由於增加了複雜度以及請求相應佇列,可能效能上有所下降。

總之,談到兩種連線方式的優點和缺點,真的是各有千秋。在專用伺服器模式下,優點就是每個使用者都有一個連線,所以大家不至於有的應用佔著連線造成別的客戶的請求給掛起了。而最大的缺點在於記憶體管理上,因為隨著連線數的增加,每增加一個連線,就要分配一份PGA,如果增加10000個連線,那就是10000個PGA要提供,記憶體很容易吃爆掉。而共享連線方式優點在於連線數量固定,所以記憶體數量不會佔用很多,不過在資料庫初始化的時候,共享伺服器就要初始化好,比如有100個共享伺服器,由於共享連線模式下,UGA是分配在PGA中的,所以初始化的時候需要初始化比較多的記憶體,也就是那100個UGA的記憶體。另外共享伺服器還有一個優點就是很多資料庫高階連線特性都要求使用共享伺服器,所以有時候為了使用這些特性迫不得已只好設定為共享伺服器連線模式。共享伺服器的最大的缺點還是在於資料倉儲模式下執行的時候,如果有大量的請求需要長時間佔用伺服器,那麼就會造成很多別的請求的掛起,導致整個伺服器效能的降低。另外,在有些應用伺服器提供了連線池的時候,比如J2EE中經常有應用伺服器的連線池,比如Weblogic的啊,還有開源的DBCP以及C3P0等等。在有這些連線池的時候,共享伺服器對於效能上反而造成了累贅。另外,有時候在使用共享伺服器的時候,由於資料事務處理不及時,而佔住伺服器的程式試圖鎖定前面事務沒有處理的資料,會造成資料庫的死鎖,特別是如果沒有設定連線鎖定超時的話,只能透過DBA上資料庫殺程式的方式來解決了。不過也有這種的最佳方案,那就是混合模式,也就是對於同一個資料庫伺服器,既有專用伺服器,也有共享伺服器,共享伺服器用來處理那種事務性很強的活。而專用伺服器用來對付那些比較耗時間和資源的請求。當然,也要看到時候的實際情況如何再做決定,兩者沒有絕對的哪種好哪種不好的差別。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-1002665/,如需轉載,請註明出處,否則將追究法律責任。

相關文章