Oracle用戶端Dedicated和Shared串連模式

來源:互聯網
上載者:User

Oracle用戶端Dedicated和Shared串連模式

Dedicated(專用模式)
使用者進程和伺服器處理序是分開的。
每個使用者進程都有自己的伺服器處理序。
使用者進程和伺服器處理序可在不同的機器上運行,以利用分散式處理的優勢。
使用者進程和伺服器處理序的比率是1 比1。
即使使用者進程不發出資料庫請求,專用伺服器也存在,只是保持空閑狀態。
此處所用的程式介面取決於使用者進程和專用伺服器處理序是否在同一台機器上。如果在同一
機器上,進程間的程式介面將使用主機作業系統的互動進程通訊(IPC) 機制。
展示了Oracle專用服務模式下的客戶進程串連狀態:


 
Shared(共用模式)
減少針對某一常式的進程數目
增加可服務的使用者數
實現Server Load Balancer
減少空閑伺服器處理序的數目
減少記憶體佔用和系統開

預設情況下資料庫建立的串連模式為專享模式,但即使修改成共用串連模式以下幾種情況也必定是以專享模式串連的:
當批量提交的job時(對於服務進程,一個job幾乎沒有空閑時間)。

使用RMAN進行備份,恢複或修複資料庫時。

 
除了Dedicated和Shared,Oracle還提供了常駐串連池模式(Database Resident Connection Pooling)。這種模式主要用於web應用的請求
通過一個簡單的例子來對比三種串連模式下對記憶體的需求:
考慮一個應用每一個會話請求的記憶體大小為400K,而每一個服務進程需要使用4M的記憶體,當pool size為100並且共用模式最大串連數為100。
 
專享模式下
Memory used = 5000 X (400 KB + 4 MB) = 22 GB
共用模式下
Memory used = 5000 X 400 KB + 100 X 4 MB = 2.5 GB
超出2.5G,2G來自於SGA區
常駐串連池
Memory used = 100 X (400 KB + 4 MB) + (5000 X 35KB)= 615 MB
這裡每一個代理進程的消耗記憶體接近35k
 
配置共用模式
共用模式下涉及到的參數有:
SHARED_SERVERS 指定共用服務進程啟動時的最小數值。
MAX_SHARED_SERVERS 指定可同時啟動並執行共用服務進程的最大值。
SHARED_SERVERS_SESSIONS 指定可同時串連共用進程的使用者會話總數。
DISPATCHERS 為共用模式配置調度進程
MAX_DISPATCHERS 指定允許同時啟動並執行調度進程的最大數,該參數現在可能被忽略了。
CIRCUITS 指定網路會話流入流出可用的總的虛擬環路。
 
因為要開啟共用模式,SHARED_SERVERS設定的值必須大於0,而其他相關配置可以不需要,當SHARED_SERVERS值大於0時,調度進程也會啟動,即使沒有配置dispatchers參數
 
在DBCA建立資料庫的過程中,Oracle會自動建立一個用於XML DB(XDB)的調度進程。該配置僅允許會話以共用模式串連資料庫,但要進行一些常規的操作(如提交SQL語句),使用者必須額外的配置調度或替換XDB調度配置
 
alter system set shared_servers=5;
 
關於MAX_SHARED_SERVERS沒有預設值,如果該值為空白,PMON進程會根據請求開啟足夠多的共用服務進程。但也要受到以下參數的限制:
process 的限制

空閑process槽的最小值(至少1/8的總進程槽數,或為2當process設定的值小於24時)

系統資源

SHARED_SERVERS_SESSIONS用於限制並發共用服務的使用者會話最大數,該參數是動態變化的,其中還保留了用於專享服務的資料庫會話。這確保管理工作如備份,還原和恢複資料庫時不會佔用共用服務的會話。
 
CIRCUITS 都沒有預設值,該值取決於調度參數的值和系統資源。因此盡量對其作出限制。
alter system set circuits=<equal session>;
 
關於DISPATCHERS的設定:
限定地址協議和最小啟用調度進程數
dispatchers='(address=(pro=tcp) (host=10.x.x.x) (dispatchers=2))'
dispatchers='(description=(address=(pro=tcp) (host=10.x.x.x) (dispatchers=2)))'
限制dispatchers的最大網路連接和會話數
dispatchers='(pro=tcp) (dispatchers=2) (conn=100) (sess=100)'
為dispatchers指定別名和服務名,用於PMON進程註冊調度資訊。
dispatchers='(pro=tcp) (dispatchers=2) (list=orcl) (serv=orcl)'
允許多工和串連池
dispatchers='(pro=tcp) (dispatchers=2) (multi=on) (poo=on)'
 
dispatchers可以多在設定檔中寫多行,但是必須放在一起。或者以逗號分隔放在同一行配置中。
dispatchers='(pro=tcp) (dispatchers=2) (multi=on) (poo=on)','(pro=tcps) (dispatchers=2)'
or
dispatchers='(pro=tcp) (dispatchers=2) (multi=on) (poo=on)'
dispatchers='(pro=tcps) (dispatchers=2)'
 
如何決定調度進程的多少:
dispatchers=ceil(max_concurrent_sessions / connections for each dispatcher)
connections for each dispatcher由系統決定,一個系統允許單個進程的最大串連數即為connections for each dispatcher的取值。
 
配置TNSNAME.ORA檔案,將用戶端串連的SERVER方式修改成SHARED模式。
 
配置好上述參數後,就可以通過共用方式串連資料庫了。串連時需要指明執行個體名
通過lsnrctl services命令觀察執行個體的註冊資訊
sqlplus user/password@sid
 
可以通過下列視圖來驗證和觀察效能:
select name, paddr, network, status, accept, messages, listener, conf_indx from v$dispatcher;
select maximum_connections,maximum_sessions,servers_started from v$shared_server_monitor;
select circuit,dispatcher,server,waiter,saddr,status,queue,messsages,bytes from v$circuit;
v$dispatcher_config
v$shared_server
v$queue
v$shared_pool_reserved
v$dispatcher_rate
v$sga
v$sgastat
 
修改dispatchers參數可以通過以下方式:
alter system set dispatchers=‘(index=0) (pro=tcp) (dispatchers=2) (multi=on) (poo=on)','(index=1) (pro=tcps) (dispatchers=2)';
這裡的index後的值表示調度進程的序列,可以在v$dispatcher_config中獲得
 
關閉特定的dispatchers進程
alter system shutdown immediate ‘name of dispatchers’
這個dispatchers的名稱來自於v$dispatcher表的name欄位。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.