学历代表过去、能力代表现在、学习力代表未来
【转载】Oracle的session和progress
上一篇 /
下一篇 2011-03-02 16:48:50
/ 个人分类:数据库
一般情况下,Oracle默认的最大session为150.
- 查看数据库最大会话数:show parameter sessions
- 查询当前会话数:select count(*) from v$session
- 查询当前进程数:select count(*) from v$process
- 查看数据库最大进程数:show parameter processes
- 备注:session值=processes值*1.1+5
修改processes和sessions值:
- alter system set processes=300 scope=spfile
- alter system set sessions=300 scope=spfile
- 备注:一般只执行第一个命令就可以,session自动更改
创建pfile:create pfile from spfile;
备注:如果不做此步,可能会导致更改最大连接数之后数据库不能启动现象
重启数据库,使更改生效
- shutdown immediate
- startup
- 备注:shutdown normal正常关闭数据库可能会相当相当的慢;shutdown abort 可能会导致启动数据库时很慢
查询具体应用的连接数:select b.MACHINE, b.PROGRAM , count(*) from v$process a , v$session b where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE , b.PROGRAM order by count(*) desc;
查询是否有死锁:select * from v$locked_object;
备注1:session的状态说明
- active 处于此状态的会话,表示正在执行,处于活动状态。
- killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' 。
- inactive 处于此状态的会话表示不是正在执行的,比如select语句已经完成。
备注2:inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。解决inactive的方法最好的就是在oracle中直接设置超时时间,也是有两种方法,区别暂时还不清楚:
- 修改sqlnet.ora文件,新增expire_time=x(单位是分钟)。
- 通过ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,记得重启下oracle。
收藏
举报
TAG: