采样数据库连接数
数据库的实时连接数是否稳定是衡量一套IT系统是否稳定的一个指标。 当新系统推出或者在没有严格 测试环境 下更应该收集和关注这个数据。 我写了一个简单的存储过程采样数据库实时连接数并利用dbms_job来定时,方法如下: 1.在sys用户下建立保存数据库实时连接
数据库的实时连接数是否稳定是衡量一套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 num>50;
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采样的方式很相象, 但不会增加系统太大的负担。
如果你关注其它参数也可以依葫芦画瓢来采样并跟踪它们。
原文转自:http://www.ltesting.net
|