Oracle 10g 中引入了v$osstat 视图方便了dba了解主机负载情况,同时也可以通过oem网页观察到一段时间内主机上负载较高的进程;但如果db未开启oem管理界面,则无法了解过去时段内高负载服务进程的相关信息。以下脚本可以给予一定的帮助。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE 
TABLE 
"SYS"
.
"HIGHLOAD_HISTORY"
(
"SAMPLE_TIME" 
DATE
,
"SPID"     
NUMBER(10,0),
"LOAD"     
VARCHAR2(7 BYTE),
"SID"      
VARCHAR2(30 BYTE),
"USERNAME" 
VARCHAR2(40 BYTE),
"MACHINE"  
VARCHAR2(64 BYTE),
"PROGRAM"  
VARCHAR2(48 BYTE),
"SQL_ID"   
VARCHAR2(13 BYTE),
"SQL_FULLTEXT" 
CLOB,
"INST_ID" 
NUMBER(2,0),
"STATUS"  
VARCHAR2(8 BYTE)
)    
--建立记录高负载进程信息的表,内容包括了cpu使用率,及sql(并不十分准确,因为获取spid后需要进行查询)
1
ps 
aux|
grep 
$ORACLE_SID|
awk 
'{ if($3>=0.3) print "insert into highload_history select sysdate rec_time,"$2,",\47"$3"%\47",", ss.sid,ss.username,ss.machine,ss.program,ss.sql_id,(select sql_fulltext from v$sqlarea sq where sq.sql_id=ss.sql_id),(select instance_number from v$instance),ss.status from v$session ss,v$process pr where  pr.addr=ss.paddr and pr.spid=",$2";"}'  
| sqlplus / as sysdba  --直接运行即可