oracle的sniped会话状态,Oracle中会话的状态

我们可以通过Oracle视图v$session来查看当前数据库中的所有会话信息,其中该视图有一列为status标志会话状态,Oracle官方文档对这

我们可以通过Oracle视图v$session来查看当前数据库中的所有会话信息,其中该视图有一列为status标志会话状态,Oracle官方文档对这一列定义如下

STATUS

VARCHAR2(8)

Status of the session:

ACTIVE - Session currently executing

INACTIVE

KILLED - Session marked to be killed

CACHED - Session temporarily cached for use by Oracle*XA

SNIPED - Session inactive, waiting on the client

通过我们遇到的都是ACTIVE,INACTIVE,KILLED三种状态

1、active 会话处于活动状态,当前session正在执行sql语句

2、inactive会话处于不活动状态,,sql语句已经执行完毕,但是由于某种原因,会话和后台进程没有释放,通过我们在sqlplus中退出和类似plsql developer工具log out或者直接退出,都是直接关闭会话,而不是将会话置于inactive状态,下面以sqlplus命令为例

[oracle@oracle11g ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu May 23 23:09:30 2013

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from v$process;

COUNT(*)

----------

30

SQL>

开启另一会话窗口,查询会话数量

SQL>select count(*) from v$session;

查询结果是27个会话

我们退出之前的会话

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@oracle11g ~]$

再次查询会话数量,结果是26。说明会话已经释放。而通常情况下inactive会话比较多的情况下是我们采用jboss,weblogic之类的中间件,建立连接池,而连接使用完毕之后并未释放连接,仍然将连接放回到连接池的情况。

我本机上采用weblogic连接池,连接到oracle,设置初始连接数量是5,我们通过查询

SQL> set linesize 150

SQL> select s.SID,s.SERIAL#,s.OSUSER,s.USERNAME,s.STATUS,s.PROGRAM from v$session s where s.STATUS='INACTIVE' and s.USERNAME='TEST';

SID SERIAL# OSUSER USERNAME STATUS PROGRAM

---------- ---------- ------------------------------ ------------------------------ -------- ------------------------------------------------

16 64 Administrator TEST INACTIVE JDBC Connect Client

21 28 Administrator TEST INACTIVE JDBC Connect Client

141 164 Administrator TEST INACTIVE JDBC Connect Client

142 93 Administrator TEST INACTIVE JDBC Connect Client

145 30 Administrator TEST INACTIVE JDBC Connect Client

由于会话的创建和释放都需要耗费一定的资源,应用端往往会通过连接池来缓存会话。如果inactive会话过多,不建议直接kill session,毕竟应用的稳定性是第一位的,可以考虑调整应用连接池的数量,或者考虑增加processes的数量。

3、killed处于此状态的会话,被标注为删除,表示出现了错误,正在回滚

当然,也是占用系统资源的。还有一点就是,killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,是不管用的,要用命令:alter system kill session 'sid,serial#' ; 可以通过此方式来解除死锁。

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当一个会话Oracle 数据库强制关闭时,该会话被称为被 sniped。这通常是由于会话执行时间过长或由于资源限制引发的。在 PL/SQL ,可以通过查看数据库的日志文件或在 SQL Developer 分析会话的跟踪文件来分析被 sniped会话。 以下是一般的分析步骤: 1. 查看数据库的日志文件:在 Oracle 数据库,可以查看 alert.log 或 listener.log 文件来查找有关 sniped 会话的信息。这些文件通常位于 $ORACLE_HOME/diag 目录下,可以通过查看最近的日志来确定何时发生了 sniped。 2. 查看会话的跟踪文件:可以在 SQL Developer 使用“TKPROF”工具来分析会话的跟踪文件。首先需要启用 SQL_TRACE 参数,然后在会话结束时,会生成一个跟踪文件。可以使用以下命令生成跟踪文件: ``` ALTER SESSION SET SQL_TRACE=TRUE; ``` 在跟踪文件生成后,可以使用以下命令来分析: ``` TKPROF tracefile outputfile explain=username/password ``` 其,tracefile 是跟踪文件的路径,outputfile 是结果文件的路径,explain 是可选参数,用于显示 SQL 语句的执行计划。 3. 分析执行计划:在分析跟踪文件时,可以查看 SQL 语句的执行计划,以确定是否存在性能问题。可以使用以下命令查看 SQL 语句的执行计划: ``` EXPLAIN PLAN FOR sql_statement; ``` 然后可以使用以下命令查看执行计划: ``` SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); ``` 这些步骤可以帮助您分析被 sniped会话,并找出导致性能问题的原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值