采样数据库连接数

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

数据库的实时连接数是否稳定是衡量一套IT系统是否稳定的一个指标。

当新系统推出或者在没有严格测试环境下更应该收集和关注这个数据。

我写了一个简单的存储过程采样数据库实时连接数并利用dbms_job来定时,方法如下:

1.在sys用户下建立保存数据库实时连接数结果的表session_num,并建立公有同义词

create table session_num(

num number(6),

username varchar2(30),

machine varchar2(30),

reportdate date )

pctfree 1 pctused 99 tablespace users;

create public synonym session_num for sys.session_num;

2.写一个存储过程select_sessionnum.sql

create or replace procedure select_sessionnum

is

begin

insert into session_num(num,username,machine,reportdate)

select count(*),username,machine,sysdate

from v$session

where username is not null

group by username,machine;

commit;

exception

when others then

rollback;

raise;

end;

/

3.用dbms_job设定每隔一个小时调用select_sessionnum过程采样数据

variable jobno number;

begin

dbms_job.submit(:jobno,'select_sessionnum;', sysdate,'sysdate + 1/24');

commit;

end;

/

关于dbms_job使用和介绍可以参考这篇文章:《在Oracle中实现定时操作》

4.DBA和一般用户都可以不定期检查这些数据:

set pagesize 1000;

set linesize 100;

column username format a15;

column machine format a30;

select * from session_num where num50;

select * from v$license;

发现异常的问题要用文档记录下来,并发给开发团队参考。

历史数据可以用truncate table session_num;清掉

(这个50是我假设的一个值,不同的应用系统值会不一样)

5.假如系统稳定并没有新的服务添加时,可以从sys用户下删掉这个采样工作:

select job from user_jobs where what='select_sessionnum;';

JOB

----------

1912

exec dbms_job.remove(1912);

后话:这个方法和statspack采样的方式很相象, 但不会增加系统太大的负担。

假如你关注其它参数也可以依葫芦画瓢来采样并跟踪它们。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航