實時獲取最耗CPU的SQL
實時獲取最耗CPU的SQL
在Oracle效能診斷和日常監控中,最耗CPU的語句通常也是我們最需要關心的語句。所以在Oracle10g的awr中,將cpu time和elapsed time最高的語句加入到了報表,並且放到了SQL語句部分的前兩位。那麼在平時的監控中,也可以通過shell指令碼實時捕獲系統中CPU耗用最多的程式中正在執行的SQL,以更加有效和及時的診斷和發現問題。
首先寫一個根據spid來或者其SQL的指令碼get_by_spid.sql
#!/bin/ksh
# creator:NinGoo
# function: get sql statement by spid
# parameter: spid
# useage: get_by_spid.sh spid
# creator:NinGoo
# function: get sql statement by spid
# parameter: spid
# useage: get_by_spid.sh spid
sqlplus -S /nolog col SERIAL# format 999999
col sid format 99999
col username format a10
col machine format a12
col program format a32
col sql_text format a81
set lines 1000
set pages 1000
set verify off
col sql_hash_value new_value hash_value head hash_value
select sid,serial#,username,program,sql_hash_value,
to_char(logon_time,’yyyy/mm/dd hh24:mi:ss’) as login_time
from v\$session
where paddr in ( select addr from v\$process where spid=$1);
col sid format 99999
col username format a10
col machine format a12
col program format a32
col sql_text format a81
set lines 1000
set pages 1000
set verify off
col sql_hash_value new_value hash_value head hash_value
select sid,serial#,username,program,sql_hash_value,
to_char(logon_time,’yyyy/mm/dd hh24:mi:ss’) as login_time
from v\$session
where paddr in ( select addr from v\$process where spid=$1);
select sql_text
from v\$sqltext_with_newlines
where hash_value = &hash_value
order by piece;
exit;
EOF
from v\$sqltext_with_newlines
where hash_value = &hash_value
order by piece;
exit;
EOF
然後再在另外一個shell指令碼topsql.sh中獲得系統中CPU耗用最多的oracle server process的spid,迴圈呼叫第一個指令碼獲得SQL
#!/bin/ksh
# creator:NinGoo
# function: get top cpu sql
# parameter: N
# useage: topsql.sh N
# creator:NinGoo
# function: get top cpu sql
# parameter: N
# useage: topsql.sh N
if [ $# -eq 0 ]; then
echo “Usage: `basename $0` N”
exit 1
fi
echo “Usage: `basename $0` N”
exit 1
fi
topcpu=`ps auxw|grep LOCAL|sort -rn +2 |head -$1|awk ‘{print $2}’`
i=0
i=0
for spid in $topcpu
do
i=`expr $i + 1`
echo “\033[32;1m===============top $i cpu sql=============\033[0m”
. /home/oracle/worksh/get_by_spid.sh $spid
done
do
i=`expr $i + 1`
echo “\033[32;1m===============top $i cpu sql=============\033[0m”
. /home/oracle/worksh/get_by_spid.sh $spid
done
那麼呼叫就很簡單了,假如我們要看系統top 3的sql語句,只需要執行topsql.sh 3即可。當然,如果我們自己通過top/topas等工具已經獲得spid了,那麼只要執行get_by_spid.sh spid就能獲得該程式正在執行的sql語句了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24996904/viewspace-767682/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- windows獲取實際cpu speed(非物理)Windows
- np.array-tensor(cpu)-tensor(gpu)-np.array哪一步最耗時GPU
- T-SQL運維指令碼——檢視SQLServer平均最耗資源時間的SQL語句SQL運維指令碼Server
- python kubernetes 獲取 pod 的 cpu 佔用率Python
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- 7種Linux中獲取CPU速度的方法Linux
- JVM調優jstack找出最耗cpu的執行緒&定位問題程式碼JVMJS執行緒
- 簡單實現Laravel獲取當前執行的SQLLaravelSQL
- 在Linux中,如何獲取CPU的總核心數?Linux
- 分享:ODC 如何精準展現 SQL 執行的耗時?SQL
- Espresso 如何獲取控制元件的實時文字?Espresso控制元件
- SQLServer如何查詢近3分鐘最消耗CPU的SQLSQLServer
- Laravel 獲取執行的sql語句LaravelSQL
- SQL Server 怎麼在分頁獲取資料的同時獲取到總記錄數SQLServer
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- SQL Server在分頁獲取資料的同時獲取到總記錄數的兩種方法SQLServer
- 如何獲取 Android CPU 核心數 (Java/C++)AndroidJavaC++
- 如何在Ubuntu Linux中獲取CPU溫度UbuntuLinux
- 【SQL】SQL解惑-如何從字串中獲取IP地址SQL字串
- SQL 獲取SQL Server中兩個日期之間的所有日期SQLServer
- 獲得JD商品評論 API 如何實現實時資料獲取API
- Vue 服務端渲染實踐 ——Web應用首屏耗時最優化方案Vue服務端Web優化
- Springboot:高併發下耗時操作的實現Spring Boot
- Linux時間的獲取與使用Linux
- python 獲取時間的datetime庫Python
- 如何捕獲問題SQL解決過度CPU消耗的問題SQL
- SQL 獲取SQL Server中日期最近7天之間的所有日期SQLServer
- 如何透過API獲取實時商品資料API
- MaxCompute如何對SQL查詢結果實現分頁獲取SQL
- 耗時又繁重的SQL最佳化,以後就都交給TA吧!SQL
- WPF 前臺觸發器實時獲取當前時間觸發器
- 如何使用cURL獲得請求/響應具體耗時?
- 追蹤將伺服器CPU耗光的兇手伺服器
- 獲取系統時間
- php 獲取時間差PHP
- 獲取當前時間
- 常見的Javascript獲取時間戳JavaScript時間戳
- 獲取當前時間往前的日期
- jQuery獲取class相同的div中的最後一個jQuery