学历代表过去、能力代表现在、学习力代表未来

【转载】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的状态说明

  1. active 处于此状态的会话,表示正在执行,处于活动状态。
  2. killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' 。
  3. inactive 处于此状态的会话表示不是正在执行的,比如select语句已经完成。

备注2:inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。解决inactive的方法最好的就是在oracle中直接设置超时时间,也是有两种方法,区别暂时还不清楚:

  1. 修改sqlnet.ora文件,新增expire_time=x(单位是分钟)。
  2. 通过ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,记得重启下oracle。

TAG:

BBnight的个人空间 引用 删除 BBnight   /   2011-07-15 14:18:03
linux 配合netstat -anp | grep 1521 检查web连接池的情况
BBnight的个人空间 引用 删除 BBnight   /   2011-07-15 12:25:18
plsql ->  tools -> sessions...可以查看该数据库的所有session信息(包括每个session的具体sql语句...)
 

评分:0

我来说两句

Open Toolbar