【Shared Server Mode】“專有伺服器模式”調整為“共享伺服器模式”

secooler發表於2009-07-23
本文給出將資料庫執行狀態由“專有伺服器模式”調整為“共享伺服器模式”的方法。
專有伺服器模式            ---&gt 共享伺服器模式
Dedicatied Server Mode ---&gt Shared Server Mode


1.首先生成一份PFILE
sys@ora10g> create pfile from spfile;

File created.

2.到$ORACLE_HOME/dbs目錄,確認PFILE已經生成成功
ora10g@testdb /home/oracle$ cd $ORACLE_HOME/dbs
ora10g@testdb /oracle/app/oracle/product/10.2.0/db_1/dbs$ ls -l initora10g.ora
-rw-r--r-- 1 oracle oinstall 999 07-23 08:50 initora10g.ora

3.修改PFILE
ora10g@testdb /home/oracle$ vi $ORACLE_HOME/dbs/initora10g.ora
在initora10g.ora引數檔案的後面新增如下幾條關鍵引數!
shared_servers=3
max_shared_servers=60
dispatchers="(protocol=TCP)(serv=ora10g)(list=ora10g)(poo=on)(disp=6)(con=36)(sess=100)"
max_dispatchers=20

在這裡,我來分別解釋一下上面非常重要的四個引數設定後的含義:
shared_servers=3
註釋:資料庫啟動時,共享伺服器程式的最小值,這裡也就是說,先分配3個共享伺服器程式;

max_shared_servers=60

註釋:當上面3個程式無法滿足需要的時候,系統會自動擴充套件到這個最大值,也就是最大會分配60個共享伺服器程式;

dispatchers="(protocol=TCP)(serv=ora10g)(list=ora10g)(poo=on)(disp=6)(con=33)(sess=100)"

註釋:上面設定了共享伺服器程式的數量,這裡就需要設定另外一個很重要的程式--排程程式,分別說明其中的每一個引數
protocol=TCP:沒啥說的,支援的協議是TCP
serv=ora10g:指定監聽器的別名,注意這裡需要設定為在tnsnames.ora中的一個服務名,我這裡是ora10g
list=ora10g:指定在tnsnames.ora中的一個網路服務名,我這裡還是ora10g
poo=on:啟用共享池
disp=6:初始分配排程程式數量為6
con=36:每個排程程式最大網路連線數為36
sess=100:每個排程程式最大會話數為100

max_dispatchers=20
註釋:限制dispatchers最大數為20。

4.關閉資料庫
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

5.透過上面的PFILE生成SPFILE
NotConnected@> create spfile from pfile='$ORACLE_HOME/dbs/initora10g.ora';

File created.

6.重啟資料庫(這時預設使用的引數檔案已經是剛剛生成的SPFILE)
NotConnected@> startup;
ORACLE instance started.

Total System Global Area  562036736 bytes
Fixed Size                  2022312 bytes
Variable Size             163578968 bytes
Database Buffers          390070272 bytes
Redo Buffers                6365184 bytes
Database mounted.
Database opened.

7.確認上面四個重要引數已經生效
sys@ora10g> show parameter shared_servers

NAME               TYPE    VALUE
------------------ ------- ----------------------------
max_shared_servers integer 60
shared_servers     integer 3

sys@ora10g> show parameter dispatchers
NAME               TYPE    VALUE
------------------ ------- ----------------------------------------
dispatchers        string  (protocol=TCP)(serv=ora10g)(list=ora10g)
                           (poo=on)(disp=5)(con=33)(sess=100)
max_dispatchers    integer 20

8.共享伺服器程式情況檢視
正如上面的引數shared_servers=3設定的那樣,現在系統中已經初始化開啟了3個共享伺服器程式
資料庫中檢視方法:
sys@ora10g> select NAME,PADDR,STATUS,MESSAGES,BYTES from v$shared_server;

NAME PADDR            STATUS             MESSAGES      BYTES
---- ---------------- ---------------- ---------- ----------
S000 000000008165E508 WAIT(COMMON)            870     150376
S001 000000008165ECF0 EXEC                   1858     376240
S002 000000008165F4D8 EXEC                   6078     807850

作業系統程式檢視方法:
sys@ora10g> !ps -ef | grep -v grep | grep ora_s0
oracle    7195     1  0 09:16 ?        00:00:01 ora_s000_ora10g
oracle    7197     1  0 09:16 ?        00:00:01 ora_s001_ora10g
oracle    7199     1  0 09:16 ?        00:00:02 ora_s002_ora10g

9.共享伺服器程式情況檢視
這裡也如上面的引數dispatchers中disp=6設定的那樣,現在系統中已經初始化開啟了6個排程程式
資料庫中檢視方法:
sys@ora10g> select NAME,NETWORK,STATUS from v$dispatcher;

NAME NETWORK                                            STATUS
---- -------------------------------------------------- ----------------
D000 (ADDRESS=(PROTOCOL=tcp)(HOST=testdb)(PORT=23377))  WAIT
D001 (ADDRESS=(PROTOCOL=tcp)(HOST=testdb)(PORT=63510))  WAIT
D002 (ADDRESS=(PROTOCOL=tcp)(HOST=testdb)(PORT=22876))  WAIT
D003 (ADDRESS=(PROTOCOL=tcp)(HOST=testdb)(PORT=24477))  WAIT
D004 (ADDRESS=(PROTOCOL=tcp)(HOST=testdb)(PORT=47889))  WAIT
D005 (ADDRESS=(PROTOCOL=tcp)(HOST=testdb)(PORT=33295))  WAIT

6 rows selected.

作業系統程式檢視方法:
sys@ora10g> !ps -ef | grep -v grep | grep ora_d0
oracle    7185     1  0 09:16 ?        00:00:00 ora_d000_ora10g
oracle    7187     1  0 09:16 ?        00:00:00 ora_d001_ora10g
oracle    7189     1  0 09:16 ?        00:00:00 ora_d002_ora10g
oracle    7191     1  0 09:16 ?        00:00:00 ora_d003_ora10g
oracle    7193     1  0 09:16 ?        00:00:00 ora_d004_ora10g
oracle    9320     1  0 09:58 ?        00:00:00 ora_d005_ora10g

OK,到此,透過上面的簡單配置,資料庫已經由原來的專有伺服器模式配置成為了共享伺服器模式。

10.小結
對於共享伺服器模式的資料庫,其實配置關鍵就是圍繞以下四個引數展開的:
shared_servers=3
max_shared_servers=60
dispatchers="(protocol=TCP)(serv=ora10g)(list=ora10g)(poo=on)(disp=6)(con=36)(sess=100)"
max_dispatchers=20

什麼時候需要共享伺服器模式?
1)併發超高
2)資料庫server的訪問壓力過大,這種模式可以減少伺服器程式的數量
3)特殊需求

什麼時候不適合共享伺服器模式?
1)因為存在分配和響應使用者請求的過程,有時會有效能問題
2)能用專有伺服器模式的情況下就不用共享伺服器模式

Good luck

secooler
09.07.23

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-609990/,如需轉載,請註明出處,否則將追究法律責任。

相關文章