Oracle优化连接数和会话空闲时间
Oracle已连接会话的五个状态
- 会话有ACTIVE、INACTIVE、KILLED、CACHED、SNIPED五个状态,一般比较常见的有ACTIVE、INACTIVE、KILLED三个状态。
- ACTIVE :处于此状态的会话,表示正在执行,处于活动状态。
- INACTIVE :处于此状态的会话表示不是正在执行的
- KILLED :处于此状态的会话,表示出现了错误或进程被杀掉,正在回滚,当然,这个状态的会话也占用系统资源的。还有一点就是, KILLED的状态一般会持续较长时间,如果你想快速杀掉回话,可以参考ORACLE快速彻底Kill掉的会话
- CACHED : Session temporarily cached for use by Oracle*XA
SNIPED : Session inactive, waiting on the client。 标记为SNIPED的进程被释放有两种条件:
- 相关的terminal再一次试图登录及执行sql
- 手动的在操作系统后台kill掉相应的spid
查询数据库允许的最大会话数和进程数
# 查询数据库当前设置的连接数 select value from v$parameter where name = 'processes';
# 查询数据库当前的会话数 select value from v$parameter where name = 'sessions';
只要会话连接数超过上面的process数或者sessions数,再来一个的会话进程,就会产生ORA-12516
错误。
查看进程,会话的历史最大数和最大数
select resource_name,max_utilization,limit_value from v$resource_limit where resource_name in('processes','sessions');
修改会话数和连接数
# 注意一下processes的值和sessions的值,Oracle官方文档中要求
sessions=processes*1.5+5
# 下面以修改连接数为1000作为示例
alter system set processes=1000 scope=spfile;
alter system set sessions=1105 scope=spfile;
# 修改完参数要重启启动数据库
shutdown immediate; # 关闭数据库
startup; # 重新启动数据库
select * from v$version; # 启动完成数据库后查看数据库的版本
设置会话超时时间
# 查看default 配置文件的内容
select PROFILE,RESOURCE_NAME,LIMIT from dba_profiles where PROFILE='DEFAULT';
# 查询用户所使用的配置文件
select username,profile from dba_users where username='username';
# 查看会话的空闲时间
select PROFILE,RESOURCE_NAME,LIMIT from dba_profiles where RESOURCE_NAME='IDLE_TIME';
# 查询资源限制相关的
select name,value from gv$parameter where name='resource_limit';
# 开启数据库资源限制使用
alter system set resource_limit=true;
# 设置空闲时间,参数的单位为分钟
alter profile default limit idle_time 10;
版权申明
本文系作者 @Tis-FYM 原创发布在Tis-FYM站点。未经许可,禁止转载。
评论