ORACLE连接数
最近脑袋有点大,事情有点多,需要做个转型,要不然这些事情会将自己埋了.
优先需要弄的事情
1、Oracle连接要改为连接池
2、前端优化事项:界面优化、新功能上线、性能优化(压缩什么的)
3、服务化接口的治理
今天遇到困难的问题总结,数据库大佬突然罢工了,连接数超过限制了,进去之后发现里面的“ACTIVE”连接并多,把倒是有许多"INACTIVE"连接,还有一些是为
"KILLED"的连接。
如何关闭非活动连接
当session是active的时候,alter system kill session 只是将session标识为killed
或者pseudo状态,并不会释放session持有的资源,所以我们在执行完alter system kill session 后,看会话还是一直存在。
如果想清理连接怎么办呢?
1、手工清理进程方法
alter system disconnect session '20,9907' post_transaction;
alter system kill session '3964,51752' immediate;
通过OS清理连接
SELECT SPID, OSUSER, S.PROGRAM, SCHEMANAME
FROM GV$PROCESS P, GV$SESSION S
WHERE P.ADDR = S.PADDR;
2、清理进程的时候记得要用kill -9 参数,否则没有生效。至少我执行的环境是这样。
3、如果会话已经在DB里killed,上面的SQL已经查不出spid,可以用下面的SQL查出SPID
SELECT ADDR, PID, SPID
FROM V$PROCESS P
WHERE ADDR IN (SELECT P.ADDR
FROM V$PROCESS P
WHERE PID <> 1
MINUS
SELECT S.PADDR
FROM V$SESSION S)
补充阅读:
1、http://www.cnblogs.com/kerrycode/p/3636992.html
2、PMON进程负责处理异常结束进程相关资源的释放。PMON周期性地被唤醒,可以对"_PKT_PMON_INTERVAL"这个隐藏参数来进行修改。也可以通过查找出进程的PID,然后在oradebug中,发布 oradebug wakeup orapid(oracle进程的PID,不是OS的PID)来手动唤醒PMON进程。可以用alter session set events '100246 trace name conext forever,level 4'来查看PMON的相关
操作。
3、程序还是找找连接池的方案,或者看看到底是那个地方的连接没有及时释放吧。