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 LOCK MODE 1.2.3.4.5.6Oracle
- 大資料實驗記錄大資料
- Oracle Shared Pool Memory ManagementOracle
- oracle ocp 19c考題10,科目082考試題 - shared server dispatchersOracleServer
- mysql load 相關實驗記錄MySql
- 實戰記錄之SQL server報錯手工注入SQLServer
- lite-server使用記錄Server
- ORACLE基礎之oracle鎖(oracle lock mode)詳解Oracle
- SSH Server CBC Mode Ciphers Enabled漏洞修復Server
- STM32F207DAC實驗記錄
- laravel-echo-server 踩坑記錄LaravelServer
- SEO 經驗記錄
- Oracle DBLink跨資料庫訪問SQL server資料同步 踩坑實錄Oracle資料庫SQLServer
- Oracle記憶體結構(二)----Shared Pool的詳細資訊(轉)Oracle記憶體
- overlay網路隔離實驗失敗記錄
- 《learn to count everything》論文閱讀、實驗記錄
- Oracle實驗(04):floatOracle
- SQL Server 資料庫基本記錄(一)SQLServer資料庫
- SQL Server 資料庫基本記錄(二)SQLServer資料庫
- SQL Server 資料庫基本記錄(三)SQLServer資料庫
- STM32F207串列埠實驗記錄串列埠
- Oracle基礎包之DBMS_SHARED_POOL(十)Oracle
- Oracle實驗(01):字元 & 位元組Oracle字元
- Oracle實驗(03):number的使用Oracle
- 查詢SQL Server的歷史執行記錄SQLServer
- oracle awr快照點不記錄問題Oracle
- 專案重構經驗記錄
- Laravel 使用個人經驗記錄Laravel
- Oracle Grid Infrastructure for a Standalone ServerOracleASTStructServer
- Oracle實驗(02):轉換 & 轉譯Oracle
- Oracle實驗(05):時間型別Oracle型別
- 【Oracle 恢復表空間】 實驗Oracle
- 實驗 20:備忘錄模式模式
- Oracle遊標遍歷%rowtype中的記錄Oracle
- Oracle 41億資料量表建立索引記錄Oracle索引
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- PostgreSQL、Oracle/MySQL和SQL Server的MVCC實現原理方式OracleMySqlServerMVC
- 概括SQL Server實時查詢Oracle資料庫WSSQLServerOracle資料庫
- 很漂亮的Python驗證碼(記錄)Python