Oracle 內存性能指標

一、報表的目的#

經過幾個關鍵的內存指標,檢查當前內存組件配置的合理性,並結合數據庫的Advice視圖,給出合理的建議值。

二、實現方法與基本邏輯#

經過foglight agent 鏈接數據庫獲取相關指標數據,無需額外配置。


2、報表各字段釋義#

一、報表各字段的含義#

1.1 共享池大小(Shared_pool size):當前Shared_pool的大小,單位M

1.2 共享池推薦大小:從v$shared_pool_advice中獲取,判斷條件是,若是shared增長10%,能夠減小2%左右的解析時間,取最大的一個點。Sql語句見下表 sql

select max(shared_pool_size_for_estimate)   from (select shared_pool_size_for_estimate,                nvl((estd_lc_time_saved_factor -                    lag(estd_lc_time_saved_factor, 1)                     over(order by shared_pool_size_factor)),                    estd_lc_time_saved_factor - 1) * 100  as time_save_factor           from v$shared_pool_advice          where estd_lc_time_saved_factor > 1.005)  where time_save_factor > 2
1.3 Library cache命中率:library cache命中率定義爲(1-reloads/pins)*100%。Reload和Pin的次數的比值,應該小於1%。若是超出了這些數值範圍,就說明庫緩存的使用有問題。問題的緣由主要有兩個,沒有使用綁定變量或是庫緩存過小。不過Reload和Pin的比例太高,也多是在繁忙時執行了DDL所致使的。
select round((sum(PINS) - sum(RELOADS)) / sum(PINS) * 100,2) Hit_Ratio from v$librarycache
1.4 執行次數大於1的SQL佔比:該比值越高越好,若是該比值太低,說明數據庫中大部分應用的sql都沒有使用綁定變量,應該讓開發進行優化。
select round(sum(decode(executions,1,0,1))/count(1)*100,2)  from v$sqlarea
1.5 數據緩存大小(Buffer cache size):當前Buffer cache的大小,單位M

1.6 數據緩存推薦大小:從v$db_cache_advice獲取的DEFAULT cache的建議值。若是數據庫參數db_cache_advice是OFF,則該字段顯示爲OFF,不然判斷條件爲,若是buffer cache每增長10%的大小,能夠減小25%的物理讀時間,則進入候選隊列,取候選隊列中的最大值。Sql語句以下 數據庫

select max(size_for_estimate)   from (select size_for_estimate,                nvl((lag(estd_physical_read_factor, 1)                     over(order by size_factor) -estd_physical_read_factor ),                    0) * 10 as time_save_factor           from v$db_cache_advice          where estd_physical_read_factor <= 1            and name = 'DEFAULT')  where time_save_factor > 0.5
1.7 Buffer命中率:DEFAULT Buffer的命中率,定義爲(1-物理讀/邏輯讀)*100%,邏輯讀由兩部分組成consistent_gets 和 db_block_gets。通常OLTP系統,buffer命中率應該在95%以上,最嚴重也不該該低於90%。
select round(((consistent_gets + db_block_gets) - physical_reads) / (consistent_gets + db_block_gets) * 100,2) "Hit Ratio%" from v\$buffer_pool_statistics where physical_reads > 0 and name = 'DEFAULT'
1.8 PGA大小:當前PGA的大小,單位M

1.9 PGA推薦大小:從v$pga_target_advice視圖中獲取。重點講這個視圖的estd_pga_cache_hit_percentage是評估的pga命中率,計算公式BYTES_PROCESSED / (BYTES_PROCESSED + ESTD_EXTRA_BYTES_RW),這個值越大越好。ESTD_OVERALLOC_COUNT字段的值應該爲0,若是不爲0,說明PGA不足。 緩存

select min(pga_target_for_estimate / 1024 / 1024)    from v$pga_target_advice   where ( estd_pga_cache_hit_percentage,          estd_overalloc_count) in         (select max(estd_pga_cache_hit_percentage),                 min(estd_overalloc_count)            from v$pga_target_advice)
1.10 optimal比例: 使用optimal mode完成排序的比例。
首先須要理解的一個概念是,Oracle在排序的時候要維護一個二叉樹,若是這個二叉樹很大的話,那麼會很消耗CPU資源,所以並不是全部東西都在內存排序就是最好的。Oracle完成排序有3種模式
optimal模式當一個排序進程讀取數據源,寫到workarea_size_policy 的時候,incoming data和tree沒有被填充滿就結束了排序的狀況,就是optimal模式,這種是性能最好的狀況。
one-pass模式當一個排序吧incoming data和tree填充滿之後,若是再繼續填充,那麼會把工做區裏面的數據進行分片,叫sort runs,這個排序運行片歸檔至臨時表空間。那麼若是排序很大,就會有不少的sort runs,歸檔到臨時表空間的sort runs還的從新進行一次merge,這裏有一個基於排序區的寬度(max intermediate merge width),也就是一次merge的寬度,能夠經過10032和10033查看這些內容,好比這裏有50個sort runs,這個寬度是100,那麼咱們merge一次就能夠完成,這裏就叫作one-pass。
multi-pass模式若是merge一次,不夠,須要屢次merge。屢次merge,確定增長IO壓力。因此這種是效率最差的。PGA優化主要是消除multi-pass。
SELECT        ROUND(optimal_count / total_count * 100, 2) "optimal_pct",        ROUND(onepass_count / total_count * 100, 2) "onepass_pct",        ROUND(multipass_count / total_count * 100, 2) "multipass_pct"   FROM (SELECT SUM(a.total_executions) total_count,                SUM(a.optimal_executions) optimal_count,                SUM(a.onepass_executions) onepass_count,                SUM(a.multipasses_executions) multipass_count           FROM v\$sql_workarea_histogram a          WHERE a.total_executions <> 0)
1.11 1-pass比例: 使用one-pass mode完成排序的比例。具體解析見1.10。

1.12 m-pass比例: 使用multi-pass mode完成排序的比例。具體解析見1.10。 jsp

二、報表監控的閥值#

共享池推薦大小 Library命中率 執行次數大於1的SQL佔比 數據緩存推薦大小 Buffer命中率 PGA推薦大小 optimal比例
有值 <99 <70 有值 <80 有值 <95

3、報表異常處理方法#

一、超過閥值異常處理#

1.1 推薦值非空:系列主管DBA應根據主機資源,數據庫的業務類型合理的調整相應的內存組件。

1.2 執行次數大於1的SQL佔比低於閥值:系列主管DBA應推進開發使用綁定變量。 性能

1.3 m-pass值太高: 系列主管DBA應根據數據庫的業務類型判斷是否合理,是否存在sql過量使用排序(不合理的hash join)。 優化

相關文章
相關標籤/搜索