采樣數(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ù)也可以依葫蘆畫瓢來采樣并跟蹤它們。