oracle的shared、dedicated模式解析
主要參考文檔:http://www.itpub.net/thread-1714191-1-1.html
Oracleh有兩種server模式shared mode和dedicated mode。
Dedicated mode下。client每發來一個連接請求。數據庫都要給這個請求建立一個服務進程來完畢響應。而在shared mode下。oracle會首先建立一定數目的服務進程,client發來的請求會首先發送到dispatcher即調度器,然後由dispatcher依據服務進程的忙閑情況。選擇性的把請求交付給詳細的服務進程進行響應。共享服務進程作出響應後,把響應的結果再交給dispatcher,由
使用shared mode和dedicated mode的優劣。
使用dedicated mode,由於為每個連接請求建立一個專屬進程進行響應。所以它的響應速度要比shared mode快,但dedicate mode要為每個請求建立專屬的PGA,所以對內存的需求更高。但在生產環境中,大多數都是使用dedicated mode。同一時候dedicated mode也是oracle的默認模式。
使用shared mode
但shared mode由於在client請求與server響應之間,必需要走dispatcher這道程序。也就更easy造成擁堵或死鎖,也可能由於某一請求長時間占用服務時間而造成其它請求的長時間等待,此外,共享模式不easy實現trace。在生產環境中。大多不適用shared mode,而使用中間件軟件來實現類似的需求。
查看當前系統的server模式
Show parameter shared
首先shared_servers顯示的系統啟動時候啟用的共享服務進程的個數。這個參數大於0表示啟用了共享模式,這個參數不用設置過大,過大會添加啟動時間,
Max_shared_servers這個參數設置了共享服務進程的最大數。
Show parameter dispatcher
僅僅啟動shared_server並不能真正啟用共享模式,還須要設置好dispatchers。
Dispatchers的內容形如‘(protocol=tcp) (service=jf01) (dispatchers=3)’。
當中protocol表示協議類型,service表示要啟用共享模式的服務名,dispatchers表示初始調度進程的數量。
Max_dispatchers為調度進程的最大數目。
共享模式下相應的後臺進程分別為以“S”和“D”開頭的,S開頭的為服務進程,D開頭的為調度進程。形如S000,S001,D000,D001此類。能夠通過select pname from v$process查看。
啟用禁用共享模式
Dedicated模式是oracle的默認模式,oracle也不推薦使用shared模式。
啟用共享
Alter system set shared_servers=2;
設置此參數大於0
Alter system set dispatcher=’(protocol=tcp) (service=jf01) (dispatchers=3)’;
設置要啟用共享模式的服務。
此外。還須要再client的tnsnames.ora文件裏,在要使用共享模式連接的實例解析下更改
CONNECT_DATA 中的 (SERVER=SHARED )一項。
僅僅有這樣,client才會發起建立共享連接的請求。假設此時服務端沒有啟用共享模式。則會出現錯誤提示:
ORA-12520 TNS:Listener count not find available handler for requested type of server。
禁用共享模式
Alter system set shared_server=0;
Alter system set dispatcher=’’;
這樣就能夠了。
查看當前會話的信息
Select server from v$session;
相關視圖
V$shaed_server
V$dispatcher
V$circuit
oracle的shared、dedicated模式解析