Oracle專用與共享服務器的區別_第1頁
Oracle專用與共享服務器的區別_第2頁
Oracle專用與共享服務器的區別_第3頁
Oracle專用與共享服務器的區別_第4頁
Oracle專用與共享服務器的區別_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Oracle專用服務器與共享服務器的區別 1、原理 在建立Oracle數據庫的時候,應該會在數據庫建立助手向導上面看到這么一個選項,就是數據庫的連接 模式采用什么方式。在Oracle9i或者10g中,可以看到有2種連接模式,一種叫做專用服務器連接 (dedicated server),另外一種叫做共享服務器連接(shared server)。下面我們來分類說一下這兩種 連接方式的不同點。專用服務器模式就是說每次在對Oracle進行訪問的時候,Oracle服務器的Listener會得到這個訪問 請求,然后回為這個訪問創建一個新的進程來進行服務。所以說,對于每一個客戶端的訪問,都會生成 一個新的進

2、程進行服務,是一種類似一對一的映射關系。這種連接模式的一個很重要的特點就是UGA(用 戶全局域)是存儲在PGA(進程全局域)中的,這個特性也很好說明了當前用戶的內存空間是按照進程來進 行分配的。而另外的共享服務器連接則是一種在程序編寫的時候通常會用到的連接池(pool)的概念。采用這種 模式的話,在數據庫的初始化的時候就會創建一批服務器連接的進程,然后把這些連接進程放入一個連 接池來進行管理。初始化的池中的進程數量在數據庫初始化建立的時候是可以手動設置的。在連接建立 的時候,Listener首先接受到客戶端的建立連接的請求,然后Listener去生成一個叫做調度器(dipatcher) 的進程

3、與客戶端進行連接。調度器把把客戶端的請求放在SGA(系統全局域)的一個請求隊列中,然后再共 享服務器連接池中查找有無空閑的連接,然后讓這個空閑的服務器進行處理。處理完畢以后再把處理結 果放在SGA的相應隊列中。調度器通過查詢相應隊列,得到返回結果,再返回給客戶端。這種連接模式的 優點在于服務器進程的數量可以得到控制,不大可能出現因為連接人數過多而造成服務器內存崩潰。但 是由于增加了復雜度以及請求相應隊列,可能性能上有所下降。總之,在開發階段中,用第一種專用服務器可能好一些,因為少了一些中間的復雜度,而且開發的 時候一般連接的數量也少。而在多個應用同時使用一個數據庫的實際應用環境下,采用第二種方

4、法可能 好一些,因為如果到時候突然有1000個或者10000個請求連接的話,數據庫服務器如果同時建立10000個 連接,肯定要受不了的。當然,也要看到時候的實際情況如何再做決定,兩者沒有絕對的哪種好哪種不 好的差別關于這兩者的比較假如你來到一個城市,要在這個城市的不同的地方辦幾件事情,在交通方面你 有兩種選擇:一個是雇一輛專車,這輛專車將會把你從入帶到B,一直等你把在B的事情辦完,在把你從B 帶到C。另一種選擇是給出租車公司打電話訂輛出租車,先把你從帶到B,然后你和出租車該 干嘛干嘛,你去辦你的事情,出租車去接別的生意,等你在B的事情辦完了,你再跟出租車公司訂車,出 租車公司將會聯系當時在B附

5、近的其他出租車去接你。對于shared servers,你就要需要做一些額外的設置,當讓按照administrator guide并不難,關鍵是你 需要決定到底需要多少個shared server servers和多少個dispatcher,這不僅僅需要經驗的積累,還需 要持續的觀察和調整。在dedicated servers里,你所有的等待都是數據庫本身的等待,而在shared servers里你有可能需要等 彳寺一個 availabl e 的 shared server process。很明顯,當用戶并發的連接數很大的時候,dedicated servers的server process個

6、數也會變得很大,對 于操作系統來說多一個process就意味著多一點管理負擔,要知道操作系統支持的同時并發數可不是無限 的。這意味著,在dedicate servers里,當你有大量的用戶連接(比如,同一時間超過5000個用戶連上 來),你的系統負擔就會相當大。而這種情況shared servers就可以處理的相對好一些,因為加入同時 有5000個用戶連上來而且我們知道一般只有1%的連接是active,那我們只需要設置50個shared servers 就可以把所有的用戶請求處理得很好,并節省了系統資源。作為一個好處,shared servers可以用來控制concurrent。要知道用戶的并

7、發數和系統的處理能力決不 是成正比的(可以下面的圖),當用戶并發數超過一個閥值,系統的處理能力會明顯下降。通過shared servers可以控制系統的concurrent不超過這個閥值。在引入PGA的自動管理以前,shared servers是要比dedicated servers節省內存的,然后在自動管理的 ?仔入引入之后,shared servers的這個優勢已經不像我們想象的那么不明顯了。dedicate servers一個server process為了一個較大的request而長時間的工作而不影響其它的users, 然而在shared servers, 一些較大的request會影

8、響其它的用戶。還需要考慮其他的因素,比如,如果在前端使用了weblogic的connecting pool,那么你在database level 再使用shared servers可能就不是很必要,因為這時你的用戶連接已經在weblogic層面上得到了控制。shared servers還有一個所謂的偽死鎖的問題,這點大家參考一下tom的新書就知道了。關于dedicated servers和shared servers的話題我們就討論這么多,最后給大家一個小提示:其實 dedicated servers和shared servers是可以并存的,實際上,即使你使用了shared servers,

9、某些管理 操作也是必須在dedicated模式下來做的,比如startup或shutdown database0如果你實在難以選擇, 如果你的應用可能一部分是OLTP的(用戶量也很大),一部分是DW的,其實你可以考慮同時使用dedicated servers和shared servers。2、服務器模式的設置 啟用專用服務器dedicated servers不需要專門的設置,這個是oracle的默認選項。啟用共享服務器 要切換到共享模式,可以使用以下步驟:設置初始化參數SHARED_SERVERS大于0,可以使用alter system命令動態的設置也可以在spfile里 面修改初始化參數SH

10、ARED_SERVERS 的值大于0,然后shutdown oracle,然后restart oracle 即可 啟動共享模式,其他的共享服務器參數可以不用設置參考語句:alter system set shared_servers = 1 scope=both ;alter system set max_shared_servers = 5 scope=both ;設置dispatchers參數,可以采用下面的方法設置:alter system set dispatchers=(PROTOCOL=TCP) (SERVICE=mydbXDB)(SERVICE=mydb);前面表示的是協議,后面

11、的service分別指定要采用共享服務器模式的服務名稱oracle文檔上說該步驟不是必須做的,但是我在實際中發現如果只是設置了 shared_server參數, 而把dispatches參數設置為空的話,不能啟動共享服務器,使用上面的模式指定只啟動某個服務的 共享模式,如果要設置所有服務都使用共享模式,則設置為:alter system set dispatchers=(PROTOCOL=TCP);在客戶端的tnsnames.ora的tns設置中,在CONNECT_DATA設置一項中增加(server=shared ) 一項, 即可使用共享服務器連接如果服務器端沒有啟動共享服務器模式,而客戶端

12、使用shared方式連接的話,會出現錯誤提示:“ORA-12520: TNS:監聽程序無法找到需要的服務器類型的可用句柄”;和共享服務器相關的參數如下:max_shared_servers最大服務器進程數SHARED_SERVER_SESSIONS 指定可以同時運行的最大的共享服務會話數dispatchers協議,調度程序數,每個調度程序的最大連接數max_dispatchers最大調度程序數shared_servers-服務器進程數CIRCUITS指定網絡會話層出入的總的虛擬回路3、判斷數據庫使用的連接模式查看當前數據庫服務器的運行情況有一下幾種辦法:從v$session里面查看:SQL s

13、elect distinct server from v$session ;SQLSERVERDEDICATEDNONESQL如果顯示的除了dedicated,還有NONE,則說明當前啟動了共享服務器,并且server為none的會話正使用 共享服務器連接,同時,如果只顯示有dedicated,則不能說明服務器就一定工作在專用服務器下面,此時只能說明有可能 啟動了共享模式,但是無連接可以使用下面的語句查詢采用共享服務器的會話信息:select saddr,program ,server from v$session;SQL /SADDR PROGRAMSERVER296FB24C plsqld

14、ev.exeNONE296FFD1C oracleB851 (q001)DEDICATED29705AA0 oracleB851 (q000)DEDICATED查詢視圖:在網上有的資料上說只要查詢下面三個視圖,有記錄則說明啟動了共享模式,經過驗證,具體情況如下:select * from v$shared_server;-有記錄,且STATUS字段為WAIT(COMMON),則說明啟動共享;status為TERMINATED或者無記錄,則說明沒有啟動共享服務器select * from v$dispatcher;-有無記錄都不能說明啟動共享服務器,只能說明是配置了dispatchers 參數s

15、elect * from V$CIRCUIT-有記錄說明當前有使用共享模式的連接,無記錄則不能判定服務器模式實際查詢如下(啟動共享服務器的情況):SQL select * from v$shared_server;NAME PADDR STATUSMESSAGES BYTES BREAKS CIRCUIT IDLEBUSY REQUESTS2961ACA0 WAIT(COMMON)7356115203 00561435 TOC o 1-5 h zED8 TERMINATED22600 00300130301SQL select CIRCUIT,DISPATCHER,S

16、ERVER,WAITER,SADDR,STATUS,BYTES from v$circuit ;CIRCUIT DISPATCH SERVER WAITER SADDR STATUSBYTES 2743471C 2961A6EC 0000296FB24C NORMAL10364SQL select name,paddr,created,bytes from v$dispatcher;NAME PADDRCREATED BYTESD000 2961A6EC7612551SQL注意上述視圖之間的聯系,v$circuit中的saddr和v$session中的saddr是相等的查詢監聽器的狀態:LSN

17、RCTL serviceConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=B851)(PORT=1542)Services Summary.Service PLSExtProc has 1 instance(s).Instance PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service.Handler(s):DEDICATED established:0 refused:0LOCAL SERVERService mydb has 1 instance(s).Ins

18、tance mydb”, status READY, has 1 handler(s) for this service. Handler(s):DEDICATED established:0 refused:0 state:ready LOCAL SERVERService mydb_XPT has 1 instance(s).Instance mydb”, status READY, has 1 handler(s) for this service. Handler(s):DEDICATED established:0 refused:0 state:ready LOCAL SERVER

19、The command completed successfullyLSNRCTL其中的DEDICATED表示當前服務器處于專用服務器模式如果啟動共享服務器,則得到的狀態是LSNRCTL serviceConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=B851)(PORT=1542) Services Summary.Service PLSExtProc has 1 instance(s).Instance PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service.

20、 Handler(s):DEDICATED established:0 refused:0LOCAL SERVERService mydb has 1 instance(s).Instance mydb”, status READY, has 2 handler(s) for this service. Handler(s):D000 established:3 refused:0 current:3 max:1022 state:ready DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=B851)(PORT=60606)DEDICATED establish

21、ed:0 refused:0 state:ready LOCAL SERVERService mydbXDB has 1 instance(s).Instance mydb, status READY, has 0 handler(s) for this service.Service mydb_XPT has 1 instance(s).Instance mydb”, status READY, has 1 handler(s) for this service.Handler(s):DEDICATED established:0 refused:0 state:readyLOCAL SER

22、VERThe command completed successfullyLSNRCTL可以看出此時,mydb服務啟動了共享模式,但是同時也支持專用模式在實際的使用中還發現有趣的現象,如果把shared_servers和max_shared_servers同時設置成0, 但是保持dispatcher參數的值不變,則再查看監聽時,出現下面的情況: Service mydb has 1 instance(s).Instance mydb”, status READY, has 2 handler(s) for this service.Handler(s):D000 established:0 r

23、efused:0 current:0 max:1022 state:blockedDISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=LOCALHOST)(PORT=60606)DEDICATED established:0 refused:0 state:ready LOCAL SERVER此時的共享進程還在,但是狀態為阻塞4、客戶端建立的連接模式=當服務器采用專用服務器模式時,客戶端只能使用專用模式連接,也就是在connect_data數據中只能 使用 server=dedicated。當服務器采用共享服務器模式時,客戶端可以選擇建立共享還是專用連接,conne

24、ction,只要在 connect_data 中指定server=dedicated or server=shared大多數情況下我們更傾向或習慣專用模式,兩種模式下,對sga等分配都會有不同,所以如果轉換成mts 模式,別忘了sga也是需要調整的。最典型的是mts模式需要較大的large_pool_size。如果真想轉換還是 仔細看看oracle關于mts的文檔。共享連接只是把連接SESSION信息放在LARGE POOL,所以LARGE POOL要 大一些。而專用連接的SESION信息放在PGA。5、禁用共享服務器模式You disable shared server by setting

25、 SHARED_SERVERS to 0. No new client can connect in shared mode. However, when you set SHARED_SERVERS to 0, Oracle Database retains some shared servers until all shared server connections are closed. The number of shared servers retained is either the number specified by the preceding setting of SHAR

26、ED_SERVERS or the value of the MAX_SHARED_SERVERS parameter, whichever is smaller. If both SHARED_SERVERS and MAX_SHARED_SERVERS are set to 0, then all shared servers will terminate and requests from remaining shared server clients will be queued until the value of SHARED_SERVERS or MAX_SHARED_SERVE

27、RS is raised again.-如果同時把SHARED_SERVERS and MAX_SHARED_SERVERS都設置成0,則共享服務器將關閉,并且保留 的共享服務器的請求將進入隊列等待,一直到這兩個參數的值重新被設置To terminate dispatchers once all shared server clients disconnect, enter this statement:ALTER SYSTEM SET DISPATCHERS =;禁用的實驗:alter system set shared_servers = 0 ;alter system set max_s

28、hared_servers = 0 ;在已經建立共享模式的客戶端執行查詢,一直處于等待,查看視圖: SQL select circuit,saddr,status,queue from v$circuit;CIRCUIT SADDRSTATUSQUEUE27434010 296F8CE4NORMALCOMMON2743471C 296FB24CNORMALNONE2 rows selected.SQL select program,saddr,server,status from v$session where saddr in (296F8CE4,296FB24C);PROGRAMSADDR

29、 SERVER STATUSplsqldev.exe296F8CE4 NONEINACTIVEplsqldev.exe296FB24C NONEINACTIVE2 rows selected.SQL恢復參數值: SQL alter system set shared_servers = 1;System altered.SQL alter system set max_shared_servers = 5;System altered.SQL前臺的查詢恢復正常,查看視圖: SQL select circuit,saddr,status,queue from v$circuit;CIRCUIT SADDRSTATUSQUEUE 27434010 296F8CE4NORMALNONE2743471C 296F

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論