天天看點

Oracle專用伺服器與共享伺服器的差別

Oracle專用伺服器與共享伺服器的差別

在建立Oracle資料庫的時候,應該會在資料庫建立助手向導上面看到這麼一個選項,就是資料庫的連接配接模式采用什麼方式。在Oracle9i或者10g中,可以看到有2種連接配接模式,一種叫做專用伺服器連接配接(dedicated server) ,另外一種叫做共享伺服器連接配接(shared server)。下面我們來分類說一下這兩種連接配接方式的不同點。

  專用伺服器模式就是說每次在對Oracle進行通路的時候,Oracle伺服器的Listener會得到這個通路請求,然後回為這個通路建立一個新的程序來進行服務。是以說,對于每一個用戶端的通路,都會生成一個新的程序進行服務,是一種類似一對一的映射關系。這種連接配接模式的一個很重要的特點就是UGA(使用者全局域)是存儲在PGA(程序全局域)中的,這個特性也很好說明了目前使用者的記憶體空間是按照程序來進行配置設定的。

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

  總之,在開發階段中,用第一種專用伺服器可能好一些,因為少了一些中間的複雜度,而且開發的時候一般連接配接的數量也少。而在多個應用同時使用一個資料庫的實際應用環境下,采用第二種方法可能好一些,因為如果到時候突然有1000個或者10000個請求連接配接的話,資料庫伺服器如果同時建立10000個連接配接,肯定要受不了的。當然,也要看到時候的實際情況如何再做決定,兩者沒有絕對的哪種好哪種不好的差别

      關于這兩者的比較"假如你來到一個城市,要在這個城市的不同的地方辦幾件事情,在交通方面你有兩種選擇:一個是雇一輛專車,這輛專車将會把你從A帶到B,一直等你把在B的事情辦完,在把你從B帶到C。。。。。。另一種選擇是給計程車公司打電話訂輛計程車,先把你從A帶到B,然後你和計程車該幹嘛幹嘛,你去辦你的事情,計程車去接别的生意,等你在B的事情辦完了,你再跟計程車公司訂車,計程車公司将會聯系當時在B附近的其他計程車去接你。。。。。。

首先,dedicated servers的設定非常簡單-----不需要設定,這個是oracle的預設選項

而對于shared servers,你就要需要做一些額外的設定,當讓按照administrator guide并不難,關鍵是你需要決定到底需要多少個shared server servers和多少個dispatcher,這不僅僅需要經驗的積累,還需要持續的觀察和調整。

在dedicated servers裡,你所有的等待都是資料庫本身的等待,而在shared servers裡你有可能需要等待一個available的shared server process。

很明顯,當使用者并發的連接配接數很大的時候,dedicated servers的server process個數也會變得很大,對于作業系統來說多一個process就意味着多一點管理負擔,要知道作業系統支援的同時并發數可不是無限的。這意味着,在dedicate servers裡,當你有大量的使用者連接配接(比如,同一時間超過5000個使用者連上來),你的系統負擔就會相當大。而這種情況shared servers就可以處理的相對好一些,因為加入同時有5000個使用者連上來而且我們知道一般隻有1%的連接配接是active,那我們隻需要設定50個shared servers就可以把所有的使用者請求處理得很好,并節省了系統資源。

作為一個好處,shared servers可以用來控制concurrent。要知道使用者的并發數和系統的處理能力決不是成正比的(可以下面的圖),當使用者并發數超過一個閥值,系統的處理能力會明顯下降。通過shared servers可以控制系統的concurrent不超過這個閥值。

在引入PGA的自動管理以前,shared servers是要比dedicated servers節省記憶體的,然後在自動管理的PGA引入之後,shared servers的這個優勢已經不像我們想象的那麼不明顯了。

dedicate servers一個server process為了一個較大的request而長時間的工作而不影響其它的users,然而在shared servers,一些較大的request會影響其它的使用者。

還需要考慮其他的因素,比如,如果在前端使用了weblogic的connecting pool,那麼你在database level再使用shared servers可能就不是很必要,因為這時你的使用者連接配接已經在weblogic層面上得到了控制。

shared servers還有一個所謂的僞死鎖的問題,這點大家參考一下tom的新書就知道了。

關于dedicated servers和shared servers的話題我們就讨論這麼多,最後給大家一個小提示:其實dedicated servers和shared servers是可以并存的,實際上,即使你使用了shared servers,某些管理操作也是必須在dedicated 模式下來做的,比如startup或shutdown database。如果你實在難以選擇,如果你的應用可能一部分是OLTP的(使用者量也很大),一部分是DW的,其實你可以考慮同時使用dedicated servers和shared servers。

"

檢視運作情況:

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

15 rows selected.

模式切換:

用戶端建立的連接配接。

如果伺服器是專用模式,用戶端再怎麼修改也沒有用。

伺服器切換專有和共享模式的方法是修改參數檔案中的參數。

sample: