標籤:and 中介軟體 hand find not 實作類別 request 負載 錯誤
主要參考文檔: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,由dispatcher再次交付給client。在這個過程中,涉及到兩個隊列。即請求隊列跟響應隊列。這兩個隊列都位於SGA中,共用串連的會話資訊放置在Large pool中,因此對SGA的使用很多其它。
使用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表示啟用了共用模式,這個參數不用設定過大,過大會添加啟動時間,oracle會自己主動依據負載調節共用服務進程的個數,這個數值僅僅是啟動時候的初始值。
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模式解析