oracle监听器启动原理,监听器配置与加固及原理简析(含视频)

SQL>  alter system set shared_server_sessions =10;

alter system set dispatchers='(PROTOCOL=TCP)(DISPATCHERS=3)';

alter system set max_dispatchers=5;

show parameter dispatcher

--dispatchers       string      (PROTOCOL=TCP)(DISPATCHERS=3)

--max_dispatchers   integer       5   ----共享服务器模式下调度进程最大数量。

补充:

-将SHARED_SERVERS转换为0后,数据库并不能立即进入专用服务器模式,需要等待当前所有基于共享服务器模式的连接结束后,数据库才转换为专用服务器模式。

-将SHARED_SERVERS设为0的同时,参数MAX_SHARED_SERVERS也设为0,则数据库立即进入专用服务器模式。

-将SHARED_SERVERS设置为大于0,而没有配置参数DISPATCHERS,那么数据库将自动创建一个基于TCP协议的调度进程。

-shared_server_sessions=共享服务器模式下能够同时运行的用户会话数。

三、监控共享服务器

1、v$shared_server_monitor——共享服务器进程的信息

SQL> select * from v$shared_server_monitor;

MAXIMUM_CONNECTIONS MAXIMUM_SESSIONS SERVERS_STARTED SERVERS_TERMINATED SERVERS_HIGHWATER

------------------- ---------------- --------------- ------------------ -----------------

3                3               2                  0                 3

2、v$shared_server——可以查看服务器进程的状态

SQL> select * from v$shared_server;

NAME PADDR    STATUS             MESSAGES      BYTES     BREAKS CIRCUIT        IDLE       BUSY   REQUESTS

---- -------- ---------------- ---------- ---------- ---------- -------- ---------- ---------- ----------

S000 48E1ACB0 WAIT(RECEIVE)           116      44699          0 46E076FC    6114114       9192         48

S001 48E1CEE8 WAIT(COMMON)              0          0          0 00           241441          0          0

S002 48E1E004 WAIT(COMMON)              0          0          0 00           241438          0          0

3、v$dispatcher——调度器进程的信息

SQL> select name,network,paddr,status,idle,busy from v$dispatcher;

NAME NETWORK                                                 PADDR    STATUS       IDLE       BUSY

---- ------------------------------------------------------- -------- ------ ---------- ----------

D000 (ADDRESS=(PROTOCOL=tcp)(HOST=R54X32O10R2)(PORT=51177))  48E1A6FC WAIT      6209322          4

D001 (ADDRESS=(PROTOCOL=tcp)(HOST=R54X32O10R2)(PORT=55354))  48E1E5B8 WAIT       326096          0

D002 (ADDRESS=(PROTOCOL=tcp)(HOST=R54X32O10R2)(PORT=34671))  48E1EB6C WAIT       326091          2

--补充:调度程序进程的速率统计表;

SQL> select name from V$DISPATCHER_RATE;

D000

D001

D002

--补充:关闭调度进程

SQL> alter system shutdown immediate 'D002 ';

4、v$shared_server_monitor——共享服务器会话信息

SQL> select SID,SERIAL#,PADDR,USERNAME,OSUSER,PROGRAM from v$session where username is not null;

SID    SERIAL# PADDR    USERNAME  OSUSER          PROGRAM

---------- ---------- -------- --------- --------------- -----------------------------------

140         61 48E1E5B8 SCOTT     Administrator   sqlplus.exe

144        198 48E1C380 SYS       oracle          sqlplus@R54X32O10R2 (TNS V1-V3)

147        213 48E1ACB0 SYS       Administrator   sqlplus.exe

5、V$CIRCUIT——包含有关虚拟回路的信息

SQL> col PRESENTATION for a16

SQL> select circuit,dispatcher,server,waiter,queue,presentation,pcircuit from v$circuit;

CIRCUIT  DISPATCH SERVER   WAITER   QUEUE            PRESENTATION     PCIRCUIT

-------- -------- -------- -------- ---------------- ---------------- --------

46E076FC 48E1EB6C 48E1ACB0 48E1ACB0 SERVER           TTC              00

46E07E08 48E1E5B8 00       00       NONE             TTC              00

6、V$QUEUE——包含有关shared server message queues的信息

SQL> select * from V$QUEUE;

PADDR    TYPE           QUEUED       WAIT     TOTALQ

-------- ---------- ---------- ---------- ----------

00       COMMON              0          3         48

48E1A6FC DISPATCHER          0          0         15

48E1E5B8 DISPATCHER          0          0         14

48E1EB6C DISPATCHER          0          3         30

7、V$SERVICES displays the services in the database

SQL> col NETWORK_NAME for a22

select NAME,NETWORK_NAME from  v$services;

orclXDB                           orclXDB

orcl                              orcl

SYS$BACKGROUND

SYS$USERS

8、服务等待事件与调优有关,动态注册

SQL> col STAT_NAME for a35     有物理读,逻辑读

select STAT_NAME,value from v$service_stats where SERVICE_NAME='SYS$USERS';

parse count (total)                      28720

parse time elapsed                    30474434

execute count                           297868

sql execute elapsed time             150960203

session logical reads                  1400665

physical reads                            4233

physical writes                            211

user commits                               396

9、V$SGA:包含各个系统全局区(SGA)组的容量信息;

SQL> select * from V$SGA;

Fixed Size              1221276

Variable Size         192941412

Database Buffers      486539264

Redo Buffers            7163904

10、V$SGASTAT:关于DGA的详细统计信息,用于协调共享服务器;

SQL> select distinct pool from V$SGASTAT;

java pool     shared pool     large pool

11、V$SHARED_POOL_RESERVED:共享存储池的信息

02.02-客户机配置为共享连接并登陆

一、在Windows上tnsnames.ora配置中添加(SERVER = SHARED)

# tnsnames.ora Network Configuration File: C:\app\Administrator\product\11.2.0\client_2\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

TEST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.135)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

(SERVER = SHARED)

)

)

二、客户机端:使用tnsnames.ora中的共享配置登陆

1、在远程Windows机器上通过默认监听登陆

c:\> sqlplus sys/oracle@TEST as sysdba

set pagesize 0

select sid,username,server from v$session where sid=(select distinct sid from v$mystat);

159 SYS       SHARED--用户进程请求到的服务器进程类型=共享

2、列出所有通过监听登陆的用户

SQL> set linesize 999

select '--'||username,server,program from v$session where username is not null;

--SCOTT                          NONE      sqlplus.exe

--SYS                            DEDICATED sqlplus@R54X32O10R2 (TNS V1-V3)

--SYS                            SHARED    sqlplus.exe

02.03-补充:共享服务器基础知识

一、用户很多时使用共享服务器模式的特点

1、连接可以共享

2、一个server进程可以服务多个user进程,可节省内存等资源

3、配置共享模式后,多出了两类进程

可以使用一个或多个Dispatcher进程(d001,d002,d003...)

也可以使用一个或多个Shared server进程(snnn,snnn,snnn)

4、用户会话的数据保存在SGA中

-在SGA共享池内开辟部分空间来用作队列的存储,包含请求队列、响应队列

-如果配置了large_pool_size或sga_target则使用SGA的large pool 来处理所有队列

5、共享服务器模式强制使用Oracle Net,而不论客户端与服务器是否处于同一台主机

6、当使用共享模式的连接时,服务器上的所有本地连接都会得到一个专用服务器,使用IPC进行连接

7、不能执行DBA管理任务,如批处理和批量加载,数据仓库操作、备份、恢复、Log Miner、单独启动和关闭实例等。

8、service handler是dispatcher:调度器进程直接与客户端会话进行通信,共享服务进程并不作为服务处理器。

调度器将来自客户端的连接请求放入共享池中的请求队列(仅一个请求队列)中,然后由空闲的共享服务进程对连接请求进行处理,把结果放到响应队列中(每dispatcher对应一个响应队列),处理结果再由调度器返回给客户端会话。

$ lsnrctl services listener

Service "orcl" has 1 instance(s).

Instance "orcl", status READY, has 4 handler(s) for this service...

Handler(s):

"DEDICATED" established:19 refused:0 state:ready

LOCAL SERVER

"D001" established:1 refused:0 current:1 max:1022 state:ready

DISPATCHER

(ADDRESS=(PROTOCOL=tcp)(HOST=R54X32O10R2)(PORT=55354))

"D000" established:1 refused:0 current:0 max:1022 state:ready

DISPATCHER

(ADDRESS=(PROTOCOL=tcp)(HOST=R54X32O10R2)(PORT=51177))

"D002" established:2 refused:0 current:1 max:1022 state:ready

DISPATCHER

(ADDRESS=(PROTOCOL=tcp)(HOST=R54X32O10R2)(PORT=34671))

二、共享连接建立后:SQL请求处理的过程

0、监听程序探测到用户进程请求后

-验证用户进程提供的用户名和口令,

-验证通过后将该用户进程分配给一个Dispatcher调度进程

1、Dispatcher接受到用户端的请求(在整个会话期间,用户始终与同一个调度程序相连)

2、用户提交一条SQL语句,调度进程对SQL语句进行处理,然后将处理结果和调度程序ID放入位于SGA中的一个“Request Queue”中,并建立了类似电路的一条回路Circurt用来标识请求是来自哪个Client。

3、某闲置的Server Process从“Request Queue” 中取出一条处理后的SQL,并对该SQL解析和执行,得到它所请求的数据。

Request Queue说明:

-所有调度器共享一个公共的输入Request Queue

-共享服务器监视请求队列以查看是否有新的请求。

-有一个会话死了,该服务器进程上的所有用户将被阻塞

4、共享服务器进程将处理结果放入SGA中的“Response Queue”中(每个调度器都有自己的输出队列Response Queue)。

用户请求完成后,将释放共享服务器进程,于是该进程可为请求队列中的另一个用户请求服务。

5、Dispatcher定期检查“Response Queue”中的Dispatcher ID,有自己送出请求的则把处理结果则取出(返给Dispatcher)

6、Dispatcher将结果最终返回给当初的Client进程

02.04-补充:共享服务器和专用服务器的内存比较

-假设一个应用程序访问Oracle的每个Session需要400KB的内存,

-每个服务进程的内存需要4MB,

-所分配的共享服务进程数为100个。现在有5000个客户连接,

1、在Dedicated模式下——内存=5000 * (400KB+4MB) = 22GB

2、在Shared模式下———内存=5000 * 400KB + 100 * 4MB = 2.5GB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值