Oracle inactive session的清理

STATUS

ACTIVE - Session currently executing SQL

INACTIVE

KILLED - Session marked to be killed

CACHED - Session temporarily cached for use by Oracle*XA

SNIPED - Session inactive, waiting on the client

(1)active 處於此狀態的會話,表示正在執行,處於活動狀態。

        官方文檔說明:

        Any session that is connected to the database and is waiting for an event that does not belong to the Idle wait class is considered as an active session.

(2)killed處於此狀態的會話,被標註爲刪除,表示出現了錯誤,正在回滾。

        當然,也是佔用系統資源的。還有一點就是,killed的狀態一般會持續較長時間,而且用windows下的工具pl/sql developer來kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' ;

(3)inactive 處於此狀態的會話表示不是正在執行的

        該狀態處於等待操作(即等待需要執行的SQL語句),通常當DML語句已經完成。 但連接沒有釋放,這個可能是程序中沒有釋放,如果是使用中間件來連接的話,也可能是中間件的配置或者是bug 導致。

        inactive對數據庫本身沒有什麼影響,但是如果程序沒有及時commit,那麼就會造成佔用過多會話。容易是DB 的session 達到極限值。

解決方法:

1 SQLNET.EXPIRE_TIME (適當設置大小)
2 alter profile default limit idle_time 5;

根據下列SQL,再根據應用服務器主機名,可判斷應用的連接數情況:

SELECT b.MACHINE, b.PROGRAM, COUNT (*)
FROM v$process a, v$session b

WHERE a.ADDR = b.PADDR AND b.USERNAME IS NOT NULL
ADN A.TYPE !='BACKGROUND'
and a.status in ('ACTIVE','INACTIVE')
GROUP BY b.MACHINE, b.PROGRAM
ORDER BY COUNT (*) DESC;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章