省流
connects (连接)、sessions(会话)和pocesses(进程)的关系:
- connect(连接):使用plsql连接到oracle后,就是建立了一个连接(一次logon)
- session(会话):决定同时登陆到数据库的并发用户数(数据库层面)
- processes(进程):也决定同时登陆到数据库的并发用户数(操作系统层面)
connects 和session:
有A/B两个城市,需要从A运送白菜到B城
我们先建设一条公路(connection) 然后运送白菜过去,包括准备白菜和运送白菜以及返回等一系列的动作(session)
一条公路,可以运送0-n次白菜(session >= connection) 当然从A到B的公路也可能不只一条(connection >= 1)
某一次运送白菜,可以在真正上路时才开通某一条道路(需要session时才建connection) 一次运送不会影响别的运送的状态(同一connection上的不同session之间互不影响)
因此:
- 一个连接可以进行多次的会话
- 一个会话可以不依赖于某个连接,甚至没有连接(当我准备好了,真正开始运送时再建立连接)
- 一个会话不会影响别的会话
session和processes:
每个sqllogon称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,一个会话对应一个服务器进程(process);如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。
使用共享模式连接示例:
ORCL_1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.142)(PORT = 1521))
)
(CONNECT_DATA =
(server = shared )
(sid = orcl)
)
)
使用专用服务器模式连接示例:
ORCL_1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.142)(PORT = 1521))
)
(CONNECT_DATA =
(server = dedicated )
(sid = orcl)
)
)
常用查询sql
--允许最大进程数processes:
select value from v$parameter where name = 'processes' ;
--当前已用进程数processes:
select count(*) from v$process ;
--最大允许会话数session:
show parameter sessions
--当前已用会话数session:
select count(1) from v$session;
--查看连接数历史最大值
select resource_name,MAX_UTILIZATION,LIMIT_VALUE from v$resource_limit where resource_name in ('processes','sessions');
(MAX_UTILIZATION代表数据库自上次启动以来达到的最大值,LIMIT_VALUE代表设置的最大值)
--查询某客户端连接数据库的session值:
select * from v$session where terminal='RUIFEI'
--查询某客户端连接数据库的process值:
select * from v$process
where addr in
(select paddr from v$session where terminal='RUIFEI')
--如果是专用服务器方式连接,session和process是一样的。
--查看当前数据库使用的模式:
select count(*) from v$shared_server;(结果不为0,表示共享模式)
--当前活动的session
SELECT S.USERNAME,
S.SID,
S.SERIAL#,
S.INST_ID,
S.EVENT,
S.WAIT_CLASS,
S.SQL_EXEC_START,
S.LOGON_TIME,
S.ACTION,
SQ.SQL_TEXT
FROM GV$SESSION S, GV$SQLAREA SQ
WHERE S.STATUS = 'ACTIVE'
AND S.USERNAME IS NOT NULL
AND S.SQL_ID = SQ.SQL_ID;