1.首先用TOP命令監控系統資源,如果是AIX系統,就用topas,進入TOP命令的滾動刷新數據時,發現userCPU高達98%!!
保持top的狀態下,按shift+p,可以將所有進程按CPU使用率高低排序,這樣可以了解消耗CPU最多的進程是哪些
2 現在v$process 視圖中找到pid對應的地址addr,將進程號pid和oracle的session聯系起來
SQL:select addr from v$process where spid=172928;
(簡介:v$process視圖包含當前系統oracle運行的所有進程信息。常被用於將oracle或服務進程的操作系統進程ID與數據庫session之間建立聯系。也就是可以通過進程PID來尋找數據庫的session)
再通過剛才的addr,在v$session表找到對應的sql_id
SQL:select sql_id from v$session where paddr='00000003CEA444C8';
再通過sql_id可以找到對應的SQL是哪條
SQL:select * from v$sql where sql_id = '00000003CEA444C8';
實際上,上面是三個SQL可以聯表,
SQL如下:
select t3.SQL_TEXT
from v$process t1
inner join v$session t2
on t1.ADDR = t2.PADDR
inner join v$sql t3
on t2.SQL_ID = t3.SQL_ID
where t1.SPID = 172928(這個pid就是進程id);