概述
今天主要介紹幾個sql,可能很多人就收藏一下但很少會去用,所以結(jié)合案例來做一下分析,這樣就知道在什么場景用了。
下面介紹一下案例。
1、監(jiān)控分析
從監(jiān)控發(fā)現(xiàn)物理IO讀處于比較高的水平,截圖如下:物理讀基本保持在幾十M,物理寫很少。
2、觀察AWR報(bào)告
這里拿了對應(yīng)的awr報(bào)告,簡單看下邏輯讀和物理讀情況。
從這個截圖我們只計(jì)算下邏輯讀和物理讀:
1.邏輯讀大小:56222*8192/1024/1024=439M/s
2.物理讀大小:7173*8192/1024/1024=56M/s
假設(shè)這里物理讀將近邏輯讀一半,因?yàn)樵谝话阆到y(tǒng)中很難得到這個比例,那就證明物理讀過高了,這里因?yàn)椴皇歉叻迤冢圆辉趺纯吹贸鰜怼?/p>
下面看下具體的sql情況。
邏輯讀前10的sql
SELECT * FROM (SELECT sql_fulltext AS sql, SQL_ID, buffer_gets / executions AS "Gets/Exec", buffer_gets, executions, cpu_time, elapsed_time, last_active_time, module FROM V$SQLAREA WHERE buffer_gets > 10000 and executions > 0 ORDER BY "Gets/Exec" DESC) WHERE rownum <= 10;
個別參數(shù)說明:
SQL_FULLTEXT //CLOB類型 整個sql文本,不用借助于V$SQL_TEXT視圖來查看整個文本 SQL_ID //庫緩存中的SQL父游標(biāo)的標(biāo)志 FETCHES // sql取數(shù)據(jù)的次數(shù) EXECUTIONS //自從被載入共享池后,sql執(zhí)行的次數(shù) CPU_TIME //該子游標(biāo)解析,執(zhí)行和獲取數(shù)據(jù)使用的CPU時間,毫秒 ELAPSED_TIME //sql的執(zhí)行時間,毫秒 v$sqlarea的字段定義和v$sql基本一致,不同的是V$SQLAREA是在父游標(biāo)級別上統(tǒng)計(jì)的sql信息,v$sql的匯總表,進(jìn)行了group by hash_value,sql_id的匯總。
物理讀(磁盤讀寫)前10的sql
SELECT * FROM (SELECT sql_fulltext AS sql, SQL_ID, disk_reads / executions AS "Reads/Exec", disk_reads, executions,cpu_time,elapsed_time,last_active_time,module FROM V$SQLAREA WHERE disk_reads > 1000 and executions > 0 AND is_obsolete = 'N' ORDER BY "Reads/Exec" DESC) WHERE rownum <= 10;
物理IO前10的表
SELECT TABLE_NAME,TOTAL_PHYS_IO
FROM ( SELECT OWNER||'.'||OBJECT_NAME AS TABLE_NAME,
SUM(VALUE) AS TOTAL_PHYS_IO
FROM V$SEGMENT_STATISTICS
WHERE OWNER!='SYS' AND OBJECT_TYPE='TABLE'
AND STATISTIC_NAME IN ('physical reads','physical reads direct',
'physical writes','physical writes direct')
GROUP BY OWNER||'.'||OBJECT_NAME
ORDER BY TOTAL_PHYS_IO DESC)
WHERE ROWNUM <=10;






