[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.