實時獲得最耗CPU資源的SQL語句(zt)
在效能診斷和日常監控中,最耗CPU的語句通常也是我們最需要關心的語句。所以在Oracle10g的awr中,將cpu time和elapsed time最高的語句加入到了報表,並且放到了語句部分的前兩位。那麼在平時的監控中,也可以透過指令碼實時捕獲系統中CPU耗用最多的程式中正在執行的SQL,以更加有效和及時的診斷和發現問題。[@more@] -->
首先寫一個根據spid來或者其SQL的指令碼get_by_spid.sql
#!/bin/ksh
# creator:NinGoo
# function: get sql statement by spid
# parameter: spid
# useage: get_by_spid.sh spid
sqlplus -S /nolog < connect / as sysdba;
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);
select sql_text
from v$sqltext_with_newlines
where hash_value = &hash_value
order by piece;
exit;
EOF
# 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);
select sql_text
from v$sqltext_with_newlines
where hash_value = &hash_value
order by piece;
exit;
EOF
然後再在另外一個shell指令碼topsql.sh中獲得系統中CPU耗用最多的oracle process的spid,迴圈呼叫第一個指令碼獲得SQL
#!/bin/ksh
# 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
topcpu=`ps auxw|grep LOCAL|sort -rn +2 |head -$1|awk '{print $2}'`
i=0
for spid in $topcpu
do
i=`expr $i + 1`
echo "33[32;1m===============top $i cpu sql=============33[0m"
. /home/oracle/worksh/get_by_spid.sh $spid
done
# 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
topcpu=`ps auxw|grep LOCAL|sort -rn +2 |head -$1|awk '{print $2}'`
i=0
for spid in $topcpu
do
i=`expr $i + 1`
echo "33[32;1m===============top $i cpu sql=============33[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語句了。
--EOF--
作者:江楓| 【轉載時請務必以超連結形式標明文章原始出處和作者資訊及本宣告】
地址:http://rdc.taobao.com/blog/dba/html/126_get_top_n_cpu_sql_in_realtime.html
地址:http://rdc.taobao.com/blog/dba/html/126_get_top_n_cpu_sql_in_realtime.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-1002594/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實時查詢最耗CPU資源的SQL語句SQL
- 實時獲取最耗CPU的SQLSQL
- Oracle 查耗CPU資源sql語句及程式代號-轉OracleSQL
- oracle 高耗cpu sql語句的捕捉 。OracleSQL
- oracle資料庫:耗cpu sql語句優化Oracle資料庫SQL優化
- T-SQL運維指令碼——檢視SQLServer平均最耗資源時間的SQL語句SQL運維指令碼Server
- 找出最耗資源的sqlSQL
- 查詢最佔資源、CPU、記憶體、和執行最長的SQL語句記憶體SQL
- 【實驗】【SQL_TRACE】使用sql_trace功能獲得show parameter的sql語句SQL
- 【原】獲取SQLServer的最完整資料字典的SQL語句SQLServer
- 根據SQL Id獲得SQL語句的執行計劃SQL
- 查詢UNIX/LINUX 下的佔用CPU資源的SQL語句LinuxSQL
- 獲得目標SQL語句執行計劃的方法SQL
- oracle自定義過程來獲得完整的sql語句OracleSQL
- 耗cpu sql ---013SQL
- [zt] 基於索引的SQL語句優化索引SQL優化
- 【IMP】使用imp工具的show選項獲取超大備份檔案中的SQL語句將非常耗時SQL
- sql語句引起的CPU佔用國高SQL
- 織夢CMS最簡單實用的SQL語句SQL
- 使用dbms_xplan包來獲得sql語句的執行計劃SQL
- Oracle高資源消耗SQL語句定位OracleSQL
- 列出oracle dbtime得sql語句OracleSQL
- SQL語句效能調整原則(zt)SQL
- 搬運工,oracle獲得ddl語句Oracle
- 監控使用高cpu的sql語句指令碼SQL指令碼
- 使用mysqlsniffer捕獲SQL語句MySql
- 實用的SQL語句~!SQL
- ORACLE SQL語句優化技術分析(zt)OracleSQL優化
- 找出消耗CPU最高的程式對應的SQL語句SQL
- Sql Server 資料庫獲取字串中小寫字母的SQL語句SQLServer資料庫字串
- Laravel 獲取執行的sql語句LaravelSQL
- 如何快速定位當前資料庫消耗 CPU 最高的 sql 語句?資料庫SQL
- 透過DMV查詢CPU時間最長的語句和查詢計劃
- 如何使用cURL獲得請求/響應具體耗時?
- 【AWR】通過AWR報告中記錄的 SQL Id獲得SQL語句的執行計劃SQL
- SQL語句資料SQL
- 【轉】通過sql語句獲取資料庫的基本資訊SQL資料庫
- DBMS_METADATA包獲得物件DDL語句物件