Oracle之共享伺服器模式

2021-09-25 04:30:34 字數 3411 閱讀 1088

在共享伺服器體系結構中,乙個dispatcher分派器將傳入網路的多個會話請求定向到乙個共享伺服器程序池,消除了為每個連線分配乙個專用伺服器程序的需要。作為一般的指導原則,僅當系統需要併發連線到資料庫的數量超過作業系統的處理能力時,才能使用共享伺服器。

共享伺服器模式必須使用net services.也就是必須配置tns資訊(即使客戶端與服務端為同一臺機器,也要配置tns,且通過ipc協議進行通訊)。它適合用於高併發,事務量小,如果此時採用了共享模式,可以大大減少由於高度併發對於oracle伺服器的資源消耗。

1,共享伺服器模式優缺點

優點:(1)減少了例項中的程序數

(2)增加了更多併發使用者的數量

(3)實現動態負載均衡

(4)減少了空閒伺服器程序數量

(5)減少了例項pga記憶體

缺點:(1)共享伺服器的**路徑比專用伺服器長,所以它天生就比專用伺服器慢;

(2)存在人為死鎖的可能,因為它是序列的,只要乙個連線阻塞,則該伺服器程序上的所有使用者都被阻塞,並且極可能死鎖;

(3)存在獨佔事務的可能,因為如果乙個會話的事務執行時間過長,它獨佔共享資源,其它使用者只能等待,而專用伺服器,每個客戶端是乙個會話;

(4)共享伺服器模式限制了某些資料庫特性,例如:不能單獨啟動和關閉例項,不能進行介質恢復。

2,在共享伺服器體系結構中需要的程序

(1)將客戶端程序連線放到 dispatcher 或者 專有伺服器程序的 網路***(ps:***是oracle網路服務的一分部,而不是oracle資料庫的一部分)。

(2)乙個或多個分派器程序(dnnn)

(3)乙個或多個共享伺服器程序(snnn)

3,請求處理流程

分派器將請求放入請求佇列,然後共享伺服器程序檢查公共請求佇列並取出處理,最後伺服器程序將響應結果置於分派器的響應佇列。(每乙個分派器都有乙個響應佇列)

4,分派器程序(dnnn)

分派器程序使得客戶端程序可以共享數量有限的伺服器程序。可以為單個資料庫例項建立多個分派器程序。分派器程序的最佳個數取決於作業系統的限制和每個程序的連線數。

當客戶端程序發出連線請求時,***將確定客戶端程序是否應使用共享伺服器程序,這個在配置檔案裡面有配:

○ 如果明確配置的是server = shared 並且建立了和dispatcher的通訊,則使用共享伺服器模式。

○ 如果配置的是server = shared但是無法建立和任何dispatcher的通訊,或者配置的是server = dedicated,則使用專有伺服器模式。

乙個典型的例項分派器設定如下(引數檔案中設定):

dispatchers="(protocol=tcp)(serv=orcl)(list=orcl)(poo=on)(disp=5)(conn=33)(sess=224)"

protocol=tcp--協議

list=orcl--***別名,並非***的名字,實際是乙個tnsnames.ora中的網路服務名

serv=orcl--網路服務名

poo=on--是否啟用共享池

disp=5--初始排程程序數

sess=224--每個排程程序的最大會話數

max_dispatchers=19--最大排程程序的數

通過v$dispatcher檢視可以檢視資料庫例項目前存在多少個排程器程序(分派器):select * from v$dispatcher;

修改排程程序數量:alter system set dispatchers="(protocol=tcp)(disp=6)" scope=both;

也可以手動的殺掉乙個指定的排程器程序:alter system shutdown immediate 'd000';

5,共享伺服器程序(snnn)

在共享伺服器配置中,每個共享伺服器程序為多個客戶端請求服務。除了共享伺服器程序不與特定客戶端程序相關聯外,共享伺服器程序和專用伺服器程序提供相同的功能。

(1)共享服務程序的設定主要受三個引數的影響:

○ shared_servers

指定了當instance啟動的時候share_servers啟動的數量(可通過shared server process檢視),不要將這個引數設定得太大,否者啟動資料庫instance的時候就會花更多時間,oracle啟動過後會根據負載來動態調整shared_servers。如果為0,表示資料庫沒有啟動共享服務模式。這個引數是配置shared server必須的,而且只有這個引數是必須的。

修改引數:  alter system set shared_servers=1;

○ max_shared_servers

oracle在同乙個時刻最大能夠使用的share_servers數量,不要將這個引數設定小於shared_servers,如果動態修改shared_servers大於max_shared_servers,oracle會覆蓋max_shared_servers的值,此時你需要修改max_shared_servers,同時也不能大於processes的值。這個引數是為了給占用很大資源操作而設的(批處理),為了預留一些process給dba任務(rman備份)。

○ shared_server_sesions:

指定了總共允許的的shared server session的數量。如果設定了這個引數,那麼就不要將這個值超過sessions,如果沒有設定這個值,那麼只要還有空閒的session,就可以被使用。設定這個值是為專有連線預留user sessions的。

(2)把伺服器從共享伺服器模式改為專用伺服器模式

alter system set shared_servers = 0 scope = both;   --已經存在的共享程序需要等到會話結束才能結束

或alter system set max_share_servers=0 scope=both; --立即強制結束所有共享伺服器程序

6,判斷當前session的連線模式

資料庫可以同時支援共享伺服器連線和專用伺服器連線。因此如果引數shared_servers=0 ,可以確定所有連線均是專用模式。但是如果shared_servers>0,那麼就需要通過v$session檢視的server欄位來進一步判斷當前連線模式了。

補充:oracle11gr2安裝後初始設定shared_servers=1;同時,資料庫還建立了乙個排程器程序,在引數檔案中有如下配置:dispatchers='(protocol=tcp) (service=orclxdb)',service "orclxdb"是oracle9i後建立資料庫時預設包含的xml db特性,提供http、ftp等服務。通過lsnrctl service可以檢視***監聽的網路服務:(orclxdb是oracle網路體系中的乙個服務,而不是作業系統層面的服務)

oracle設定共享伺服器模式

oracle設定共享伺服器模式 1.修改初始化引數檔案,加入如下內容 用alter system 命令修改spfile shared servers 3 初始共享伺服器程序數,設定為0表示關閉共享伺服器模式 max shared servers 39 最大共享伺服器程序數 oracle動態調整共享伺...

oracle專用伺服器模式與共享伺服器模式

一 共享伺服器模式。共享伺服器模式,也叫做多執行緒伺服器模式。在這種模式下,oracle資料庫允許多個使用者程序共享非常少的伺服器程序。所以,可以同時實現使用者併發訪問的人數也就大大的增加。如果使用專用伺服器模式,則每個使用者連線資料庫時,每個使用者程序需要他自己的專用伺服器程序。也就是說,客戶端程...

oracle 專用伺服器模式與共享伺服器模式詳解

一 共享伺服器模式。共享伺服器模式,也叫做多執行緒伺服器模式。在這種模式下,oracle資料庫允許多個使用者程序共享非常少的伺服器程序。所以,可以同時實現使用者併發訪問的人數也就大大的增加。採用共享伺服器模式的話,則多個使用者可以共用乙個伺服器程序,也就是說,此時客戶端程序與伺服器程序是多對一的情況...