采樣數(shù)據(jù)庫連接數(shù)
2024-07-21 02:39:18
供稿:網(wǎng)友
數(shù)據(jù)庫的實時連接數(shù)是否穩(wěn)定是衡量一套IT系統(tǒng)是否穩(wěn)定的一個指標(biāo)。
當(dāng)新系統(tǒng)推出或者在沒有嚴(yán)格測試環(huán)境下更應(yīng)該收集和關(guān)注這個數(shù)據(jù)。
我寫了一個簡單的存儲過程采樣數(shù)據(jù)庫實時連接數(shù)并利用dbms_job來定時,方法如下:
1.在sys用戶下建立保存數(shù)據(jù)庫實時連接數(shù)結(jié)果的表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設(shè)定每隔一個小時調(diào)用select_sessionnum過程采樣數(shù)據(jù)
variable jobno number;
begin
dbms_job.submit(:jobno,'select_sessionnum;', sysdate,'sysdate + 1/24');
commit;
end;
/
關(guān)于dbms_job使用和介紹可以參考這篇文章:《在Oracle中實現(xiàn)定時操作》
4.DBA和一般用戶都可以不定期檢查這些數(shù)據(jù):
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;
發(fā)現(xiàn)異常的問題要用文檔記錄下來,并發(fā)給開發(fā)團(tuán)隊參考。
歷史數(shù)據(jù)可以用truncate table session_num;清掉
(這個50是我假設(shè)的一個值,不同的應(yīng)用系統(tǒng)值會不一樣)
5.假如系統(tǒng)穩(wěn)定并沒有新的服務(wù)添加時,可以從sys用戶下刪掉這個采樣工作:
select job from user_jobs where what='select_sessionnum;';
JOB
----------
1912
exec dbms_job.remove(1912);
后話:這個方法和statspack采樣的方式很相象, 但不會增加系統(tǒng)太大的負(fù)擔(dān)。
假如你關(guān)注其它參數(shù)也可以依葫蘆畫瓢來采樣并跟蹤它們。