Shared Server
啟用SHARED SERVERS和關閉
只需要把SHARED_SERVERS設定為大於1的值,系統即轉為SHARED SERVER。關閉SHARED SERVERS只需要把該引數設定為0。SQL> alter system set shared_servers=2; #更改已成功
系統已更改。
SQL> select name,status from v$shared_server; #結果顯示有S000和S001兩個SHARED SERVERS PROCESS正執行
NAME STATUS
---- ----------------
S000 WAIT(COMMON)
S001 WAIT(COMMON)
SQL> alter system set dispatchers="(protocol=tcp)(dispatcher=2)";
系統已更改。
SQL> select name,status,accept as accept from v$dispatcher;
NAME STATUS ACC
---- ---------------- ---
D000 WAIT YES #STATUS為WAIT表示空閒,正等待任務,ACC為YES表示可以接受新建連線
D001 WAIT YES
SQL> alter system shutdown immediate 'D000';
系統已更改。
SQL> select name,status,accept as accept from v$dispatcher;
NAME STATUS ACC
---- ---------------- ---
D000 REFUSE NO #狀態顯示拒絕任何新建連線
D001 WAIT YES
SQL> select name,status,accept as accept from v$dispatcher;
NAME STATUS ACC
---- ---------------- ---
D001 WAIT YES #過一會再試D000已經關閉
SQL>
SQL> alter system set shared_Servers=0; #關閉SHARED SERVER
系統已更改。
SQL> select name,status,accept as accept from v$dispatcher;
NAME STATUS ACC
---- ---------------- ---
D001 WAIT NO #所有DISPATCHER均拒絕任何新建連線
SQL> select name,status from v$shared_server; #沒有立即生效,ORACLE手冊上說是因為系統會等所有有SHARED SERVER連線斷開再停止SHARED SERVER PROCESS。
NAME STATUS
---- ----------------
S000 WAIT(COMMON)
S001 WAIT(COMMON)
SQL> select name,status from v$shared_server;
NAME STATUS
---- ----------------
S000 QUIT #過一會再試,變成退出的狀態
S001 QUIT
SQL> select name,status from v$shared_server;
NAME STATUS
---- ----------------
S000 TERMINATED #過一會再試變成終止的狀態
S001 TERMINATED
SQL> select name,status from v$shared_server;
未選定行 #已經沒有SHARED SERVER PROCESS了
SQL>
在共享伺服器中請求一個專用連線
如果在共享伺服器中需要請求一個專用連線,如果正使用TNSNAME命名方法,則只需要新增以下引數即可。SERVER=DEDICATEDORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
修改DISPATCHER
啟用SHARED SERVERS後DISPATCHER預設為dispatchers="(PROTOCOL=tcp)"例:這是一個典型例子
Dispatchers="(PROT=TCP)(DISP=2)"
例:強制使用Dispatcher的地址
Dispatchers="(Address=(Protocol=tcp)(host=144.25.16.201))(dispatchers=2)"
例:強制使用Dispatcher的埠
Dispatchers="(Address=(Protocol=tcp)(Port=5000))"
Dispatchers="(Address=(Protocol=tcp)(Port=5001))"
配置連線池特性
該特性透過預建立一個連線池,客戶需要連線時從連線池中取,當連線空閒時自動斷開,並放回到連線池,以備下個連線請求使用。該特性賦予了Shared Server處理較大數量連線的能力。如果有大量客戶並且大量是空閒連線,則適用該特性,例如WEB。配置示例如下:
SQL> alter system set dispatchers="(protocol=tcp)(dispatcher=2)(pool=on)(tick=1)
(connections=500)(sessions=1000)";
系統已更改。
SQL>
意思如下:
(DISPATCHER=1) -- 配置一個Dispatcher
(PROTOCOL=TCP) -- 接受協議是TCP
(POOL=ON) -- 為它開啟連線池特性
(TICK=1) -- 當經過10分鐘無通訊後,連線會被視為空閒,如果TICK=2,經過20分鐘後連線會被視為空閒
(CONNECTIONS=500) -- 該DISPATCHER最大可接受500個連線
(SESSIONS=1000) -- 該DISPATCHER最大可接受1000個會話
關閉指定DISPATCHER
首先檢視DISPATCHER的名稱SELECT NAME, NETWORK FROM V$DISPATCHER;
然後根據名稱關閉
ALTER SYSTEM SHUTDOWN IMMEDIATE 'D002';
使用共享伺服器的動態效能檢視
要知道動態效能檢視的完整解釋,請下載完整ORACLE文件庫,然後定位到以下位置開啟文件庫首頁->開啟BOOK標籤頁->定位到書名為 "Reference" ->開啟HTML版 ->定位到"Part III Dynamic Performance Views“中的Dynamic performance (V$) Views->然後找到需要的檢視
使用V$DISPATCHER
SQL> select name,status,messages,idle,busy,bytes,breaks from v$dispatcher;
NAME STATUS MESSAGES IDLE BUSY BYTES BREAKS
---- ---------------- ---------- ---------- ---------- ---------- ----------
D000 WAIT 8685 217560 705 1501540 0
SQL>
以上查訪結果顯示:
- 現在有一個Dispatcher,名稱為:D000
- STATUS為WAIT,表示它正處於空閒的狀態
- MESSAGES表示它已經處理完8685條資訊
- IDLE表示自啟動以來空閒了271560,
- BUSY表示繁忙了705
- BYTES表示該Dispatcher已處理的所有資訊的總位元組數
- BREAKS表示它已經處理過的中斷(例如從控制檯發到
+ )
使用v$dispatcher_config
該檢視含有DISPATCHER的配置資訊。包括:監聽協議,監聽地址,接受的最大連線數和會話數及服務名稱資訊。SQL> select conf_indx,dispatchers,connections,sessions "SESS", service from v$dispatcher_config;
CONF_INDX DISPATCHERS CONNECTIONS SESS SERVICE
--------------------------------------------------------------------------------
0 2 1002 1002 orcl,orcl,orcl_XPT
SQL>
結果顯示:
1. 系統配置了兩個DISPATCHER
2. 可接受的連線數和會話數都是1002
3. 可接受以下服務的請求orcl,orcl,orcl_XPT
使用V$DISPATCHER_RATE
顯示DISPATCHER的統計資料,例如已處理的平均位元組數,曾經出站與入站的最大連線數及每個客戶連線的平均處理位元組。其中以CUR開頭為當前統計資料,以AVG或MAX為平均或最大統計資料SQL> select name,cur_event_rate,cur_msg_rate,cur_svr_byte_rate from v$dispatcher
_rate;
NAME CUR_EVENT_RATE CUR_MSG_RATE CUR_SVR_BYTE_RATE
---- -------------- ------------ -----------------
D000 77 0 0
D001 104 0 0
SQL>
結果顯示:
1. 有兩個除錯程式
2. D000當前大約每分鐘處理77個事件
3. D000當前資訊量和位元組數都為0
使用V$SHARED_SERVER
下例可看到伺服器已經處理了多少個請求和資訊,並可看到資訊的總大小,並可看到自啟動以來總繁忙的時間NAME | PADDR | STATUS | MESSAGES | BYTES | BREAKS | CIRCUIT | IDLE | BUSY | REQUESTS |
---|---|---|---|---|---|---|---|---|---|
S000 | 1EE4CBEC | WAIT(COMMON) | 146 | 20872 | 0 | 00 | 287354 | 966 | 37 |
shared server效能調優
調節共享伺服器選項應該考慮到的地方- 確保有足夠的Dispatcher,以便客戶沒有正在等候Dispatcher響應它們的請求
- 確保有足夠的Shared Server Process,以便沒有請求正在等候得到處理
- 配置Large Pool SGA,以便有足夠大的地方儲存UGA。
配置Large Pool
- 在init.ora檔案中引數LARGE_POOL_SIZE可以被配置成最小300K和至少2G的最大值,最大值跟作業系統相關
- 例:LARGE_POOL_SIZE = 50M
- 也可以使用Slter system修改
- 例:ALTER SYSTEM SET LARGE_POOL_SIZE=100M
- 當使用預設值時,共享伺服器中的每個會話使Large pool增加250KB,並分配給該會話。
- 當Large Pool未被配置時,UGA會放在Shared Pool中,這會影響Shared Pool效能,所以應該配置一個Large Pool。
- 使用V$SGASTAT可檢查LARGE POOL正使用的空間。FREE MEMORY顯示可供使用的空間,SESSION HEAP顯示已使用的空間
POOL NAME BYTES
------------ -------------------------- ----------
large pool PX msg pool 206208
large pool free memory 7851120
large pool session heap 331280
SQL>
結果顯示共有空閒LARGE POOL記憶體7851120位元組,會話頭使用了331280位元組
確定Large Pool大小
一般來說,每個連線需要1MB到3MB之間的記憶體查詢V$SESSTAT檢視可得到所有連線中最大曾經分配的最大記憶體。把乘以預計的最大連線數即可得出Large Pool的大小.
SQL> select sum(value) "max mts memory allocated" from v$sesstat ss, v$statname
st where name = 'session uga memory max' and ss.statistic# = st.statistic#;
max mts memory allocated
------------------------
6167676
SQL>
結果顯示單個連線曾最大分配記憶體為6167676位元組
確定是否有足夠的Dispatcher
查詢V$dispatcher可監視各Dispatcher程式,從而得知各Dispatcher有多繁忙。如果Dispatcher繁忙時間百分比超過50%,則需要考慮啟動更多的排程程式。SQL> select name, (busy/(busy + idle)) "dispatcher busy rate" from v$dispatcher
;
NAME dispatcher busy rate
---- --------------------
D000 .000121704
D001 .000042597
D002 .004935402
SQL>
以上例顯示D000繁忙的比率大約只是0.001%,顯然遠未達到50%,所以不需要增加DISPATCHER
測量使用者等候Dispatcher程式多長時間
透過組合查詢V$queue和V$dispatcher可得出結果SQL> Select decode(sum(totalq), 0, 'no responses', sum(wait)/sum(totalq)) "avera
ge wait time" from V$QUEUE Q, V$DISPATCHER D WHERE Q.TYPE='DISPATCHER' AND Q.PAD
DR=D.PADDR;
average wait time
----------------------------------------
0
SQL>
結果顯示使用者不需要等待,所以不需要增加DISPATCHER。
確定是否有足夠的共享伺服器
下例顯示請求佇列中的平均等時間比0.3秒略多一點SQL> Select decode(totalq,0,'No Requests') "Wait Time", Wait/totalq || ' hundred
ths of seconds' "Average Wait time per request" from V$QUEUE where type='COMMON'
;
Wait Time Average Wait time per request
----------- --------------------------------------------------------------
.324324324324324324324324324324324324324 hundredths of seconds[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/779728/viewspace-1005708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shared Server 分片Server
- 配置Shared ServerServer
- Dedicated and Shared Server ProcessesServer
- Oracle dedicated server process and shared server processOracleServer
- configure shared serverServer
- dispatcher & shared server小結Server
- Restricted Operations of the Shared Server (132)RESTServer
- Oracle shared server 配置詳解OracleServer
- Shared Server Architecture (128)Server
- Shared Server Processes (Snnn) (131)Server
- Oracle Shared Server(OSS)筆記 (zt)OracleServer筆記
- oracle實驗記錄 (SHARED server MODE)OracleServer
- 共享伺服器模式(shared server)和專用伺服器模式(dedicated server)伺服器模式Server
- 【實驗】【Shared Server Mode】取消共享伺服器模式Server伺服器模式
- 【Shared Server Mode】測試調整shared_servers引數對資料庫的影響Server資料庫
- 【偵聽】V$session.server = none when using Shared Server/MTS ConfigurationSessionServerNone
- 【實驗】【Shared Server Mode】手工關閉某一個特定排程程式Server
- oracle ocp 19c考題10,科目082考試題 - shared server dispatchersOracleServer
- 【Shared Server Mode】“專有伺服器模式”調整為“共享伺服器模式”Server伺服器模式
- 如何基於共享伺服器模式shared server mode配置大池large pool之二伺服器模式Server
- oracle 10g在共享伺服器模式shared server如何配置大池large poolOracle 10g伺服器模式Server
- 【Shared Pool】使用DBMS_SHARED_POOL包將PL/SQL大物件儲存到Shared PoolSQL物件
- Oracle shared poolOracle
- _shared_pool_reserved_pct or shared_pool_reserved_size with ASMMASM
- zt_Oracle shared pool internals_共享池_shared_poolOracle
- SHARED POOL總結
- mount windows shared diskWindows
- SHARED_POOL解析
- 理解Oracle Shared PoolOracle
- Shared SQL Areas (88)SQL
- std::make_shared
- Flutter shared_preferences 探究Flutter
- Oracle Shared Pool Memory ManagementOracle
- ORACLE SGA之shared poolOracle
- sql_shared_cursor (轉)SQL
- Shared SQL Dependency Management (249)SQL
- Dedicated and Shared Servers (104)Server
- 使用DBMS_SHARED_POOL包將PL/SQL大物件儲存到Shared PoolSQL物件