查找Oracle高消耗語(yǔ)句的方法
更新時(shí)間:2014年03月22日 14:55:49 作者:
這篇文章主要介紹了查找Oracle高消耗語(yǔ)句的方法,需要的朋友可以參考下
在運(yùn)行下面的腳本之前需要先用生成AWR報(bào)告的SQL(程序腳本一般保存在$ORACLE_HOME下的rdbms/admin中,名稱為awrrpt.sql,需要輸入生成AWR報(bào)告的天數(shù)范圍)找到開(kāi)始和結(jié)束的snapshot編號(hào):begin_snap和end_snap。
<span style="font-size:18px;">set line 1000
set linesize 200
set pagesize 2000
set long 999999
set echo on
set markup html on
select res.*
from (select to_char(d.end_interval_time,'yyyy-mm-dd'),
a.PARSING_SCHEMA_NAME,
c.MODULE,
a.sql_id,
a.execs as 執(zhí)行次數(shù),
ROUND(a.cpu_times / a.execs, 2) as 單次執(zhí)行時(shí)間,
a.cpu_times as cpu消耗時(shí)間,
ROUND(a.cpu_times / b.sum_time * 100, 2) as 消耗cpu百分比,
a.buffer_gets as 邏輯讀,
ROUND(a.buffer_gets / b.sum_buffer * 100, 2) as 邏輯讀百分比,
a.disk_read as 物理讀,
ROUND(a.disk_read / b.sum_disk * 100, 2) as 物理讀百分比,
c.sql_fulltext
from (select PARSING_SCHEMA_NAME,
sql_id,
sum(EXECUTIONS_DELTA) AS execs,
round(sum(CPU_TIME_DELTA) / 1000000, 2) AS cpu_times,
round(sum(ELAPSED_TIME_DELTA) / 1000000, 2) AS elapsed_time,
sum(BUFFER_GETS_DELTA) AS buffer_gets,
sum(DISK_READS_DELTA) AS disk_read
from sys.WRH$_SQLSTAT wr, gv$instance i
where SNAP_ID <= &end_snap
and snap_id >= &begin_snap
and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
and i.instance_number = &instance_number
group by PARSING_SCHEMA_NAME, wr.INSTANCE_NUMBER, sql_id) a,
(SELECT round(SUM(CPU_TIME_DELTA) / 1000000, 2) sum_time,
SUM(BUFFER_GETS_DELTA) sum_buffer,
sum(DISK_READS_DELTA) sum_disk
FROM sys.WRH$_SQLSTAT wr, gv$instance i
where SNAP_ID <= &end_snap
and snap_id >= &begin_snap
and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
and i.instance_number = &instance_number) b,
v$sqlarea c,
dba_hist_snapshot d
where a.execs > 0
and a.sql_id = c.sql_id
and a.PARSING_SCHEMA_NAME <> 'SYS'
and d.snap_id = &end_snap
order by cpu消耗時(shí)間 desc) res
where rownum < 41;
exit</span>
將腳本輸出內(nèi)容保存到記事本txt中,并將記事本的后綴名更改為.html,這樣就可以輸出以下的網(wǎng)頁(yè)內(nèi)容:
復(fù)制代碼 代碼如下:
<span style="font-size:18px;">set line 1000
set linesize 200
set pagesize 2000
set long 999999
set echo on
set markup html on
select res.*
from (select to_char(d.end_interval_time,'yyyy-mm-dd'),
a.PARSING_SCHEMA_NAME,
c.MODULE,
a.sql_id,
a.execs as 執(zhí)行次數(shù),
ROUND(a.cpu_times / a.execs, 2) as 單次執(zhí)行時(shí)間,
a.cpu_times as cpu消耗時(shí)間,
ROUND(a.cpu_times / b.sum_time * 100, 2) as 消耗cpu百分比,
a.buffer_gets as 邏輯讀,
ROUND(a.buffer_gets / b.sum_buffer * 100, 2) as 邏輯讀百分比,
a.disk_read as 物理讀,
ROUND(a.disk_read / b.sum_disk * 100, 2) as 物理讀百分比,
c.sql_fulltext
from (select PARSING_SCHEMA_NAME,
sql_id,
sum(EXECUTIONS_DELTA) AS execs,
round(sum(CPU_TIME_DELTA) / 1000000, 2) AS cpu_times,
round(sum(ELAPSED_TIME_DELTA) / 1000000, 2) AS elapsed_time,
sum(BUFFER_GETS_DELTA) AS buffer_gets,
sum(DISK_READS_DELTA) AS disk_read
from sys.WRH$_SQLSTAT wr, gv$instance i
where SNAP_ID <= &end_snap
and snap_id >= &begin_snap
and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
and i.instance_number = &instance_number
group by PARSING_SCHEMA_NAME, wr.INSTANCE_NUMBER, sql_id) a,
(SELECT round(SUM(CPU_TIME_DELTA) / 1000000, 2) sum_time,
SUM(BUFFER_GETS_DELTA) sum_buffer,
sum(DISK_READS_DELTA) sum_disk
FROM sys.WRH$_SQLSTAT wr, gv$instance i
where SNAP_ID <= &end_snap
and snap_id >= &begin_snap
and wr.INSTANCE_NUMBER = i.INSTANCE_NUMBER
and i.instance_number = &instance_number) b,
v$sqlarea c,
dba_hist_snapshot d
where a.execs > 0
and a.sql_id = c.sql_id
and a.PARSING_SCHEMA_NAME <> 'SYS'
and d.snap_id = &end_snap
order by cpu消耗時(shí)間 desc) res
where rownum < 41;
exit</span>
將腳本輸出內(nèi)容保存到記事本txt中,并將記事本的后綴名更改為.html,這樣就可以輸出以下的網(wǎng)頁(yè)內(nèi)容:
相關(guān)文章
微信小程序開(kāi)發(fā)之?dāng)?shù)據(jù)存儲(chǔ) 參數(shù)傳遞 數(shù)據(jù)緩存
本文主要介紹了微信小程序開(kāi)發(fā)之?dāng)?shù)據(jù)存儲(chǔ)、參數(shù)傳遞、數(shù)據(jù)緩存的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
JavaScript數(shù)據(jù)存儲(chǔ) Cookie篇
這篇文章主要為大家介紹了JavaScript數(shù)據(jù)存儲(chǔ) Cookie篇,感興趣的朋友可以參考一下2016-07-07
javascript設(shè)計(jì)模式 – 簡(jiǎn)單工廠模式原理與應(yīng)用實(shí)例分析
這篇文章主要介紹了javascript設(shè)計(jì)模式 – 簡(jiǎn)單工廠模式,結(jié)合實(shí)例形式分析了javascript簡(jiǎn)單工廠模式基本概念、原理、定義、應(yīng)用場(chǎng)景及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
一文帶你詳細(xì)理解uni-app如何構(gòu)建小程序
uni-app是近年來(lái)一種新興的多端混合開(kāi)發(fā)框架,適合開(kāi)發(fā)跨平臺(tái)應(yīng)用,方便多端運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于uni-app如何構(gòu)建小程序的相關(guān)資料,需要的朋友可以參考下2022-11-11
JavaScript?Promise執(zhí)行流程深刻理解
這篇文章主要介紹了JavaScript?Promise執(zhí)行流程深刻理解,他是一個(gè)構(gòu)造函數(shù),每個(gè)創(chuàng)建的promise都有各自狀態(tài)和值,且狀態(tài)初始值為pending,值為undefined2022-06-06
關(guān)于JS中setTimeout()無(wú)法調(diào)用帶參函數(shù)問(wèn)題的解決方法
這篇文章主要介紹了關(guān)于JS中setTimeout()無(wú)法調(diào)用帶參函數(shù)問(wèn)題的解決方法,提供了2種解決方法供大家對(duì)比參考,需要的朋友可以參考下2016-06-06

