Oracle效能優化之合理利用資源(session)

lovehewenyu發表於2014-08-16
Oracle效能優化之合理利用資源(session)

導讀:
同學們是不是都用遇到過這種情況,一個業務系統開發期業務併發量只是估算一個值,而系統上線後這個併發量可能會出現溢位或是不夠的

情況。在這種情況下我們DBA怎麼給出合理的效能優化建議呢?本文就是利用資料給出session併發量的合理值。

目的:
利用資料給出ORACLE效能優化session的合理值。

環境:
OS: 6.1 AIX
Oracle: 11.2.0.4  rac on 2 nodes

1.例項啟動後使用者最大併發session?
select SESSIONS_CURRENT,SESSIONS_HIGHWATER from v$license;


2.資料庫是否有大量的inactive session?
select
(select count(*) from v$session where status='INACTIVE') as "session inactive" ,
(select count(*) from v$session ) as "session total" from dual;

--可以初步判斷中介軟體連線數設定是否合理。如果inactive/total比值大於0.6考慮是否可以優化(個人建議)

3.資料庫大量inactive session都是什麼業務?
select username,count(*) from v$session where status='INACTIVE' group by username;

--可以初步判斷是什麼業務有過多的inactive,聯絡業務是否可以優化(對“症”下藥)

4.既然發現了資料庫有大量的inactive存在,怎麼樣有理有據的給出優化建議呢?
我的方法:
寫一個統計total session 與active session的指令碼,定時執行指令碼並將統計結果寫入一張表。經過大量的統計(業務高峰與低峰)就可以

得到合理的session值,可以把這個合理的併發session值反饋給業務,進而最優使用系統資源,而不是產生大量的inactive session


4-1.建立一個收集統計資訊的表dou_tunning
create table dou_tunning (
username varchar2(40),
total number,
active number,
osdate date);

4-2.編寫一個收集session的指令碼
vi check_session.sh
#oracle使用者的環境變數,一定編輯在指令碼中#
sqlplus -s 'system/system' <
insert into  dou_tunning (select t.username,t.total,d.active,sysdate from (select username,count(*) as total from gv\

$session where username is not null and username not in ('SYSTEM','SYSMAN','DBSNMP') group by username ) t ,(select

username,count(*) as active from gv\$session where username is not null and status='ACTIVE' group by username ) d where

t.username=d.username) ;
commit;
exit;
EOF



4-3.定時執行收集session的指令碼
doudou1:/home/oracle$crontab -l
5,15,25,35,45,55  * * * * sh /home/oracle/check_session.sh

--AIX中的crontab不支援“/”,很無奈只能寫成這樣了。當然了,你也可以每分鐘收集一次session資訊,給客戶更詳盡的優化資料。

4-4.根據收集來的資料,根據業務的高峰期併發session值,進而給出最優併發session值

5.CASE分析
select * from dou_tunning where username='TAB_DOUDOU'
TAB_DOUDOU 363 1 2014/8/12 13:25:01
TAB_DOUDOU 361 1 2014/8/12 13:28:00
TAB_DOUDOU 358 1 2014/8/12 13:30:01
TAB_DOUDOU 358 3 2014/8/12 13:31:00
TAB_DOUDOU 358 2 2014/8/12 13:32:00
TAB_DOUDOU 358 3 2014/8/12 13:33:00
TAB_DOUDOU 358 2 2014/8/12 13:34:01
TAB_DOUDOU 362 1 2014/8/12 13:36:00
TAB_DOUDOU 363 4 2014/8/12 13:37:00
TAB_DOUDOU 363 2 2014/8/12 13:38:01
TAB_DOUDOU 366 3 2014/8/12 13:39:00
TAB_DOUDOU 368 2 2014/8/12 13:40:00
TAB_DOUDOU 364 2 2014/8/12 13:41:00
TAB_DOUDOU 364 1 2014/8/12 13:42:00
TAB_DOUDOU 358 3 2014/8/12 13:43:00
TAB_DOUDOU 362 1 2014/8/12 13:44:00
TAB_DOUDOU 362 2 2014/8/12 13:47:00
TAB_DOUDOU 360 1 2014/8/12 13:48:00
TAB_DOUDOU 358 1 2014/8/12 13:50:00
TAB_DOUDOU 357 3 2014/8/12 13:51:01
TAB_DOUDOU 357 1 2014/8/12 13:52:00
TAB_DOUDOU 358 1 2014/8/12 13:53:00
TAB_DOUDOU 356 1 2014/8/12 13:55:00
TAB_DOUDOU 362 4 2014/8/12 14:05:00
TAB_DOUDOU 362 2 2014/8/12 14:15:00
TAB_DOUDOU 363 1 2014/8/12 14:45:00
TAB_DOUDOU 363 2 2014/8/12 14:55:01
TAB_DOUDOU 361 3 2014/8/12 15:05:00
TAB_DOUDOU 362 1 2014/8/12 15:15:01
TAB_DOUDOU 366 1 2014/8/12 15:25:00
TAB_DOUDOU 360 1 2014/8/12 15:35:00
TAB_DOUDOU 359 2 2014/8/12 15:45:00
TAB_DOUDOU 361 1 2014/8/12 15:55:00
TAB_DOUDOU 361 1 2014/8/12 16:05:00

--以上是一個核心業務統計的session值,可以看到接近400的session,多數都是inactive,這個一個資源利用嚴重不合理的案例,當然了,

我會繼續給這個系統進行分析與比較,最終給客戶提出一個有建設性意義的session值。


總結:
合理的利用資源也是一種優化的方式。優化其實是一種思想。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26442936/viewspace-1252463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章