oracle實驗記錄 (SHARED server MODE)
shared理論很簡單:client 向LISTENER 發請求,LISTENER 接到後判斷請求是DEDICATE OR SHARED
SERVER 如果是DEDICATE 連線 則 LISTENER 衍生一個SERVER HANDLER(DEDICATE PROCESS),如果是
SHARED LISTENER按算髮 找一個註冊(PMON註冊) 在LINSTER中負載最小的DISPATCHER 程式(注意不是衍
生的 是事先配置好的) 找到後LISTENER 將 此DISPATCHER程式的PORT 給CILENT ,這樣LISTENER 與
dispatcher process 連線
shared 工作原理 CILENT 將請求給DISPATCHER PRIOCESS(整個 會話期間使用者始終同一個dispatcher連
接) ,DISPATCHER放入SGA中 請求佇列(只有一個)
SHARED server process 從 請求佇列拿走並處理 放入響應佇列(每個DISPATCHER都對應一個專用的響應
佇列),dispatcher返回給USER PROCESS(client)
user session data和cursor state需要放入SGA(SHARED POOL 如果配了LARGE POOL 放入LARGE POOL)
,每個SHARED SERVER PROCESS 都需要可以訪問(因為它不是始終為一個SESSION 服務的),可以用PROFILE
的PRIVATE_SGA限制使用者使用SGA空間
實現也很簡單
SQL> show parameter dispatcher
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
dispatchers string (protocol=tcp)(dispatchers=0)
max_dispatchers integer
SQL> show parameter shared_servers
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
max_shared_servers integer
shared_servers integer 0~~~~~~
SQL> show parameter cir
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
circuits integer
每個請求包 和每個處理結果包(放入 請求佇列,響應佇列 在SGA中) 每個CLIENT 請求包 叫一個
VIRTUAL CIRCUITS ,所以 這個引數就是定義了 進和入的 VIRTUAL CIRCUITS 的總數,因為存SGA中所以
對SGA 大小有影響
shared_servers 這個是動態的 比如開始設定1 有一個SNNN 隨著執行 自己 增加,直到
max_shared_servers (dispatchers 是靜態的) 隨著SYSTEM 負載 也會自己減少
shared_server_sessions integer:SESSIONS 引數控制可以處理會話總個數(使用者會話和
系統會話) shared_server_sessions是允許MTS 連線的 會話數,它設少一點,那麼DEDICATE連線的使用者
就可以多一點 (sessions- shared_server_sessions)
配置就非常簡單了:
設定 shared_servers dispatchers
SQL> alter system set dispatchers="(protocol=tcp)(dispatchers=3)";
SQL> select program from v$process
2 ;
PROGRAM
----------------------------------------------------------------
........................
ORACLE.EXE (MMNL)
ORACLE.EXE (q000)
ORACLE.EXE (D000)~~~~~~~~~~~~~
ORACLE.EXE (D001)~~~~~~~~~~~~~~ 3個DISPATCHER process
PROGRAM
----------------------------------------------------------------
ORACLE.EXE (D002)~~~~~~~~~~~~~~
23 rows selected.
SQL> alter system set shared_servers=1;
System altered.
PROGRAM
----------------------------------------------------------------
ORACLE.EXE (D002)
ORACLE.EXE (S000)~~~~~~~~~~~~~~~~新多的SHARED SERVER PROCESS
24 rows selected.
SQL> select name,paddr,status from v$shared_server;
NAME PADDR STATUS
---- -------- ----------------
S000 6C8F3444 WAIT(COMMON)
SQL> col network format a40
SQL> select name,network,status from v$dispatcher;
NAME NETWORK STATUS
---- ---------------------------------------- ----------------
D000 (ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(P WAIT
RT=3069))
D001 (ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(P WAIT
RT=3068))
D002 (ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(P WAIT
RT=3070))
SQL> desc v$circuit;
Name Null? Type
----------------------------------------- -------- --------------------------
CIRCUIT RAW(4)
DISPATCHER RAW(4)
SERVER RAW(4)
WAITER RAW(4)
SADDR RAW(4)
STATUS VARCHAR2(16)
QUEUE VARCHAR2(16)
MESSAGE0 NUMBER
MESSAGE1 NUMBER
MESSAGE2 NUMBER
MESSAGE3 NUMBER
MESSAGES NUMBER
BYTES NUMBER
BREAKS NUMBER
PRESENTATION VARCHAR2(257)
PCIRCUIT RAW(4)
SQL> select circuit,saddr,dispatcher,server,status,waiter from v$circuit;
no rows selected來一個CILENT 就會有一條記錄,裡面有很多有用的資訊
C:\>lsnrctl
OK SERVER 端搞好了
LSNRCTL> services
"DEDICATED" established:35 refused:0 state:ready
LOCAL SERVER
"D002" established:40 refused:0 current:40 max:1002 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(PORT=3070))
"D001" established:40 refused:0 current:40 max:1002 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(PORT=3068))
"D000" established:39 refused:0 current:39 max:1002 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(PORT=3069))
可以看出來已經註冊好了到LISTENER
配置一下CLIENT的TNSNAMES.ORA吧
xh =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(oracle_sid = orcl)~~~~~~~~~~沒寫
)
)
AA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = SHARED)
(oracle_sid = orcl)~~~~~~~~~~~~~~SHARED
)
)
BB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(oracle_sid = orcl)~~~~~~~~~~~~~~專用
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
SQL> conn zz/a123@bb(SID 142)~~~~~~DEDICATE
Connected.
SQL>
SQL> conn xh/a831115@aa(SID 143)~~~~~~~~~SHARED
Connected.
SQL>
SQL> conn xh/a831115@xh (SID 144)~~~~~~~DEFAULT
Connected.
SQL>
SQL> select circuit,saddr,dispatcher,server,status,waiter from v$circuit;
CIRCUIT SADDR DISPATCH SERVER STATUS WAITER
-------- -------- -------- -------- ---------------- --------
6B66892C 6C9BBBDC 6C8F2B44 00 NORMAL 00~~~~~~~~~~~~2條
6B668F8C 6C9BCDCC 6C8F2B44 00 NORMAL 00
SQL> select sid,program from v$session where saddr='6C9BBBDC' or saddr='6C9BCDCC
'
2 ;
SID PROGRAM
---------- ----------------------------------------------------------------
143 sqlplus.exe
144 sqlplus.exe~~~~~~~~DEFUALT 用SHARED
SQL> select name,paddr,status from v$shared_server;
NAME PADDR STATUS
---- -------- ----------------
S000 6C8F3444 EXEC~~~~~~~~~當有SESSION 執行時候 狀態為EXEC
SQL> select program from v$process where addr='6C8F3444';
PROGRAM
----------------------------------------------------------------
ORACLE.EXE (S000)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-612355/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle實驗記錄 (oracle 分析shared pool(1))Oracle
- oracle實驗記錄 (oracle 分析shared pool(2))Oracle
- 【實驗】【Shared Server Mode】取消共享伺服器模式Server伺服器模式
- 【實驗】【Shared Server Mode】手工關閉某一個特定排程程式Server
- oracle實驗記錄 (flashback)Oracle
- oracle實驗記錄 (OMF)Oracle
- oracle實驗記錄 (NET)Oracle
- oracle實驗記錄 (audit)Oracle
- Oracle Shared Server(OSS)筆記 (zt)OracleServer筆記
- oracle實驗記錄 (oracle reset parameter)Oracle
- oracle實驗記錄 (使用dbms_server_alert設定threshold)OracleServer
- Oracle Data Redaction實驗記錄Oracle
- oracle實驗記錄 (block cleanout)OracleBloC
- oracle實驗記錄 (dump undo)Oracle
- oracle實驗記錄 (inlist card)Oracle
- oracle實驗記錄 (oracle 資料字典)Oracle
- Oracle檔案改名實驗記錄Oracle
- oracle實驗記錄 (選擇率)Oracle
- oracle實驗記錄 (dump logfile)Oracle
- oracle實驗記錄 (事務控制)Oracle
- oracle實驗記錄 (函式index)Oracle函式Index
- oracle實驗記錄 (bigfile tablespace)Oracle
- oracle實驗記錄 (恢復-redo)Oracle
- oracle實驗記錄 (expdp/impdp使用)Oracle
- oracle實驗記錄 (transport tablespace(Rman))Oracle
- oracle實驗記錄 (使用exp/imp)Oracle
- Oracle dedicated server process and shared server processOracleServer
- oracle實驗記錄 (dump index b*tree)OracleIndex
- oracle實驗記錄 (CKPT的觸發)Oracle
- oracle實驗記錄 (dump undo4)Oracle
- oracle實驗記錄 (dump undo3)Oracle
- oracle實驗記錄 (dump undo2)Oracle
- oracle實驗記錄 手工 duplicate database(1)OracleDatabase
- oracle實驗記錄Rman duplicate database(1)OracleDatabase
- oracle實驗記錄 (許可權,role)Oracle
- oracle實驗記錄 (SQL*PLUS 命令操作)OracleSQL
- oracle實驗記錄 (PFILE 啟動SPFILE)Oracle
- oracle實驗記錄Rman duplicate database 2OracleDatabase