[20160830]使用共享服務模式的弊端.txt

lfree發表於2016-08-30

[20160830]使用共享服務模式的弊端.txt

--使用專用伺服器與共享服務模式的區別,有許多文章介紹,專用伺服器是1:1,而共享服務模式可以1對多,這樣可以減少伺服器對記憶體資源
--的佔用.但是共享服務模式存在一些弊端的,一旦某個session執行很慢,這樣就會影響其他使用者的回話.

--透過例子來說明:

1.環境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.建立共享服務連線模式:
78S =
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = book)
  )
)

3.建立測試:
SCOTT@book> show parameter shared_server
NAME                   TYPE    VALUE
---------------------- ------- ------
max_shared_servers     integer
shared_server_sessions integer
shared_servers         integer 1

SCOTT@book> show parameter dispatchers
NAME            TYPE    VALUE
--------------- ------- -------------------------------------
dispatchers     string  (PROTOCOL=TCP) (SERVICE=book,bookXDB)
max_dispatchers integer

SCOTT@book> alter system set max_shared_servers=1;
System altered.

--這樣僅僅建立一個shared_servers.
--建立連線,注意都以共享連線模式:
--session 1:
SCOTT@78s> @ &r/spid
       SID    SERIAL# SPID       PID  P_SERIAL# C50
---------- ---------- ------ ------- ---------- --------------------------------------------------
       222        125 48628       20          1 alter system kill session '222,125' immediate;

--執行如下:
select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;

--session 2:
$ rlsql scott/book@78s
SQL*Plus: Release 11.2.0.4.0 Production on Tue Aug 30 08:44:38 2016
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

--可以發現掛起。必須等待session 1執行完成才能完成登入。

--session 1:
SCOTT@78s> select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;
  COUNT(*)
----------
1475789056

--也就是一個session 執行很慢會影響其他以共享模式登入會話的操作。

--session 2:
SCOTT@78s> @ &r/spid
       SID    SERIAL# SPID       PID  P_SERIAL# C50
---------- ---------- ------ ------- ---------- --------------------------------------------------
       223         39 48628       20          1 alter system kill session '223,39' immediate;

4.繼續測試:
--session 1:
SCOTT@78s> select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;
--等!

--session 2:
SCOTT@78s> select sysdate from dual ;
--掛起。

--如果語句執行很慢,也會影響其他會話。

5.繼續觀察:
--如果你仔細觀察發現前面2個會話的spid一樣都是48628。
SCOTT@book> select saddr,sid,paddr,status,server from v$session where sid in (222,223);
SADDR                   SID PADDR            STATUS   SERVER
---------------- ---------- ---------------- -------- ---------
00000000854B75C0        222 00000000859191C8 INACTIVE NONE
00000000854B44E0        223 00000000859191C8 INACTIVE NONE

--2個session 的paddr一樣。
--session 1執行:
SCOTT@78s> select count(*) from emp,emp,emp,emp,emp,emp,emp,emp;
--慢!


SCOTT@book> select saddr,sid,paddr,status,server from v$session where sid in (222,223);
SADDR                   SID PADDR            STATUS   SERVER
---------------- ---------- ---------------- -------- ---------
00000000854B75C0        222 000000008591A280 ACTIVE   SHARED
00000000854B44E0        223 00000000859191C8 INACTIVE NONE

--還可以發現sid=222,status=ACTIVE,SERVER=SHARED.執行完成後在觀察:

SCOTT@book> select saddr,sid,paddr,status,server from v$session where sid in (222,223);
SADDR                   SID PADDR            STATUS   SERVER
---------------- ---------- ---------------- -------- ---------
00000000854B75C0        222 00000000859191C8 INACTIVE NONE
00000000854B44E0        223 00000000859191C8 INACTIVE NONE

總結:
1.使用共享服務模式,執行sql語句一定要快,否則可能影響其他相同模式登入的會話。
2.有事務啟用,會話STATUS=ACTIVE,server從NONE=>SHARED.

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

相關文章