檢視當前最消耗CPU/Memory的oracle程式

kunlunzhiying發表於2016-12-12

找出LINUX最消耗資源的程式

 

TOP

檢視當前最消耗CPU/Memory的程式資訊

主要引數
d
:指定更新的間隔,以秒計算。

q
:沒有任何延遲的更新。如果使用者有超級使用者,則top命令將會以最高的優先序執行。

c
:顯示程式完整的路徑與名稱。

S
:累積模式,會將己完成或消失的子行程的CPU時間累積起來。

s
:安全模式。

i
:不顯示任何閒置(Idle)或無用(Zombie)的行程。

n
:顯示更新的次數,完成後將會退出
to
顯示引數
:
PID
Process ID):程式標示號。

USER
:程式所有者的使用者名稱。

PR
:程式的優先順序別。

NI
:程式的優先順序別數值。

VIRT
:程式佔用的虛擬記憶體值。

RES
:程式佔用的實體記憶體值

SHR
:程式使用的共享記憶體值。

S
:程式的狀態,其中S表示休眠,R表示正在執行,Z表示僵死狀態,N表示該程式優先值是負數。

%CPU
:該程式佔用的CPU使用率。

%MEM
:該程式佔用的實體記憶體和總記憶體的百分比

TIME
+:該程式啟動後佔用的總的CPU時間。

Command
:程式啟動的啟動命令名稱,如果這一行顯示不下,程式會有一個完整的命令列。

top
命令使用過程中,還可以使用一些互動的命令來完成其它引數的功能。這些命令是透過快捷鍵啟動的。

<
空格>:立刻重新整理。

P
:根據CPU使用大小進行排序。

T
:根據時間、累計時間排序。

q
:退出top命令。

m
:切換顯示記憶體資訊。

t
:切換顯示程式和CPU狀態資訊。

c
:切換顯示命令名稱和完整命令列。

M
:根據使用記憶體大小進行排序

W
:將當前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。

 

PS

可以使用一下命令查使用記憶體最多的5個程式

ps -aux | sort -k4nr | head 5

可以使用一下命令查使用CPU最多的5個程式

ps -aux | sort -k3nr | head 5

 

VMSTAT

只能給出當前CPU/MEMORY/IO的總體效能,沒有單個程式資訊

 

透過以上命令大致可以確定OS消耗最多資源的程式資訊,另外可以從資料庫層面檢視TOP程式

 

找出過去4個小時內登陸且在近30分鐘呼叫過的sql

 

Find Sessions with the Highest CPU Consumption

 

 

-- sessions with highest CPU consumption

SELECT s.sid, s.serial#, p.spid as "OS PID",s.username, s.module, st.value/100 as "CPU sec"

FROM v$sesstat st, v$statname sn, v$session s, v$process p

WHERE sn.name = 'CPU used by this session' -- CPU

AND st.statistic# = sn.statistic#

AND st.sid = s.sid

AND s.paddr = p.addr

AND s.last_call_et < 1800 -- active within last 1/2 hour

AND s.logon_time > (SYSDATE - 240/1440) -- sessions logged on within 4 hours

ORDER BY st.value;

 

       SID    SERIAL# OS PID       USERNAME             MODULE                                      CPU sec

---------- ---------- ------------ -------------------- ---------------------------------------- ----------

       141       1125 15315        SYS                  sqlplus@coehq2 (TNS V1-V3)                     8.25

       147        575 10577        SCOTT                SQL*Plus                                     258.08

       131        696 10578        SCOTT                SQL*Plus                                     263.17

       139        218 10576        SCOTT                SQL*Plus                                     264.08

       133        354 10583        SCOTT                SQL*Plus                                     265.79

       135        277 10586        SCOTT                SQL*Plus                                     268.02

 

 

Find Sessions with Highest Waits of a Certain Type

 

-- sessions with the highest time for a certain wait

SELECT s.sid, s.serial#, p.spid as "OS PID", s.username, s.module, se.time_waited

FROM v$session_event se, v$session s, v$process p

WHERE se.event = '&event_name'

AND s.last_call_et < 1800 -- active within last 1/2 hour

AND s.logon_time > (SYSDATE - 240/1440) -- sessions logged on within 4 hours

AND se.sid = s.sid

AND s.paddr = p.addr

ORDER BY se.time_waited;

 

SQL> /

Enter value for event_name: db file sequential read

 

       SID    SERIAL# OS PID       USERNAME             MODULE                                   TIME_WAITED

---------- ---------- ------------ -------------------- ---------------------------------------- -----------

       141       1125 15315        SYS                  sqlplus@coehq2 (TNS V1-V3)                         4

       147        575 10577        SCOTT                SQL*Plus                                       45215

       131        696 10578        SCOTT                SQL*Plus                                       45529

       135        277 10586        SCOTT                SQL*Plus                                       50288

       139        218 10576        SCOTT                SQL*Plus                                       51331

       133        354 10583        SCOTT                SQL*Plus                                       51428

 

10g or higher: Find Sessions with the Highest DB Time

 

-- sessions with highest DB Time usage

SELECT s.sid, s.serial#, p.spid as "OS PID", s.username, s.module, st.value/100 as "DB Time (sec)"

, stcpu.value/100 as "CPU Time (sec)", round(stcpu.value / st.value * 100,2) as "% CPU"

FROM v$sesstat st, v$statname sn, v$session s, v$sesstat stcpu, v$statname sncpu, v$process p

WHERE sn.name = 'DB time' -- CPU

AND st.statistic# = sn.statistic#

AND st.sid = s.sid

AND  sncpu.name = 'CPU used by this session' -- CPU

AND stcpu.statistic# = sncpu.statistic#

AND stcpu.sid = st.sid

AND s.paddr = p.addr

AND s.last_call_et < 1800 -- active within last 1/2 hour

AND s.logon_time > (SYSDATE - 240/1440) -- sessions logged on within 4 hours

AND st.value > 0;

 

       SID    SERIAL# OS PID       USERNAME MODULE                                   DB Time (sec) CPU Time (sec)      % CPU

---------- ---------- ------------ -------- ---------------------------------------- ------------- -------------- ----------

       141       1125 15315        SYS      sqlplus@coehq2 (TNS V1-V3)                       12.92           9.34      72.29

 

 

使用dbms_system.set_env/oradebug/dbms_monitor對相應程式作10046跟蹤,然後使用tkprof格式化

tkprof <trace file name> <output file name> sort=fchela,exeela,prsela

根據相應資訊可以進一步確定資源都消耗在哪些地方

 

 

 

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

相關文章