MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于oracle的session

Posted on 2009-10-03 02:07 leekiang 阅读(1538) 评论(0)  编辑  收藏 所属分类: oracle
比如用"TEST"用户通过plsqldevleper登录,
执行select * from v$session t where t.USERNAME='TEST';
会看到至少两条记录,其中action列为Main session的是plsqldevleper固有的,
每一个SQL Window都会有一个session,action显示为"SQL Window - New"
当前window对应的session的STATUS列显示为ACTIVE,其他显示为"INACTIVE",
搞不明白"INACTIVE"的session为何还会显示,什么时候不显示呢?
至于查看当前session的ID,用 select distinct sid from v$mystat;

顺便记录一下v$mystat,v$sesstat和v$sysstat的区别
按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况,
我觉得可以理解为是许多综合性、全局性的指标
,比如总登录次数(logons cumulative)
如果从v$sysstat查得有347个指标,那么v$mystat(表示当前session的情况)相应的也有347个指标,
v$sesstat包括了所有session(包括活动的和不活动的)的指标的值,当然也就囊括了v$mystat,其记录数为347*25(如果有25个session的话)=8675,
至于指标号"STATISTIC#"表示的含义,可从v$statname查得。


在B/S系统中,页面纷繁复杂,而且经过系统长时间运行,如果发现某个session的wait比较严重,进行sql优化时,很难知道这个sql是用在程 序的哪个模块,很多时候只能根据开发人员的经验来定位这个sql,或者打开程序代码,搜索。这样的效率很低,这里介绍一个方法来快速定位发生问题的sql 的位置。
ORACLE提供了DBMS_APPLICATION_INFO包,其中提供了set_client_info、set_module、 set_action、read_module、read_client_info、set_session_longops几个过程,其中分别用于设置 客户端信息、设置module信息(这里同时必须设置一个action信息)、设置action信息、读取module信息(同时也会得到action信 息)、读取client_info信息和手动设置一个会话为longops。
exec dbms_application_info.set_client_info('test client info');
exec dbms_application_info.set_module(module_name => 'test module',action_name => 'test action');
http://zhang41082.itpub.net/post/7167/305794

How to trace the connection pool in a Java Web application - DBMS_APPLICATION_INFO
http://stackoverflow.com/questions/829302/how-to-trace-the-connection-pool-in-a-java-web-application-dbmsapplicationinf
http://stackoverflow.com/questions/53379/using-dbmsapplicationinfo-with-jboss
http://www.mailinglistarchive.com/java-dev@lists.apple.com/msg10280.html


使用v$sysstat中的数据
该视图中数据常被用于监控系统性能。如buffer cache命中率、软解析率等都可从该视图数据计算得出。
该视图中的数据也被用于监控系统资源使用情况,以及系统资源利用率的变化。正因如此多的性能数据,检查某区间内系统资源使用情况可以这样做,在一个时间段开始时创建一个视图数据快照,结束时再创建一个,二者之间各统计项值的不同(end value - begin value)即是这一时间段内的资源消耗情况。这是oracle工具的常用方法,诸如Statspack以及BSTAT/ESTAT都是如此。
为了对比某个区间段的数据,源数据可以被格式化(每次事务,每次执行,每秒钟或每次登陆),格式化后数据更容易从两者中鉴别出差异。这类的对比在升级前,升级后或仅仅想看看一段时间内用户数量增长或数据增加如何影响资源使用方面更加实用。
你也可以使用v$sysstat数据通过查询v$system_event视图来检查资源消耗和资源回收。
参见http://www.cnblogs.com/jimeper/archive/2008/03/30/1129431.html
该文后面有这样一句话
人生有三宝:终身运动,终身学习,终身反省.吸收新知,提高效率,懂得相处,成就自己,也成就他人,创造最
高价值。

ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:
  sessions=(1.1*process+5)
  但是我们增加process数时,往往数据库不能启动了。这因为我们还漏调了一个unix系统参数:它是/etc/system/ 中semmns,这是unix系统的信号量参数。每个process会占用一个信号量。semmns调整后,需要重新启动unix 操作系统 ,参数才能生效。不过它的大小会受制于 硬件 的内存或ORACLE SGA。范围可从200-2000不等。

  semmns的计算公式为:SEMMNS > processes + instance_processes + system processes = 数据库参数processes的值 instance_processes = 5(smon,pmon,dbwr,lgwr,arch)
  system=系统所占用信号量。
  系统所占用信号量可用下列命令查出:#ipcs -sb
  其中列NSEMS显示系统已占用信号量。
  其它一些跟连接有关的参数,如 licence_max_sessions, licence_sessions_warning 等默认设置都为零,也就是没有限制。


只有注册用户登录后才能发表评论。


网站导航: