oracle 歷史檢視檢視,看這一篇就夠了

wanglinghua0907發表於2024-01-12


常用歷史語句:

dba_hist_active_sess_history

v$active_session_history

dba_hist_sqlstat

 

 

dba_hist_active_sess_history

dba_hist_active_sess_history v$active_session_history 的持久化檢視。多個觸發條件寫入 dba 檢視中。

 

mmon 程式把 v$active_session_history 中的資訊採集到基表 WRH$_ACTIVE_SESSION_HOSTORY ,然後 dba_hist_active_sess_history 從基表中獲取資訊, awr dba_hist_active_sess_history

 

每隔 10 秒鐘轉儲來自 v$active_session_history 的活動 session 資訊

_ash_disk_filter_ratio (秒)

 

 

gv$active_session_history

v$active_session_history 使用的是 x$ash 基表。 x$ash 資料存放在 Shared Pool ASH Buffer 中,大小由隱含引數 "_ash_size" 決定。

1 秒( _ash_sampling_interval ,單位毫秒)將 v$session 中記錄儲存到 v$active_session_history 檢視中,只會載入非 idle 會話。

存在記憶體,重啟就會消失。用做 ASH 報表。

 

 

 

重要!!!

1.mmnl 程式從 gv$session 檢視(從 X$KSUSE 基表獲取)採集資訊到 ash buffers 中,並且被獲取到 X$ASH 基表中,預設 1 秒一次( _ash_sampling_interval ,單位毫秒)。

2.gv$active_session_history 檢視從 X$ASH 基表讀取資料,由 mmon 程式將 gv$active_session_history 檢視資訊持久化到 wrh$_active_session_history 基表中。

3.dba_hist_active_sess_history 檢視從 wrh$_active_session_history 基表讀取資料,預設 10 秒一次( _ash_disk_filter_ratio ,秒)。

4.awr 報告資料從 dba_hist_active_sess_history 檢視獲取。

 

 

其中 x$ksuse gv$session 檢視所使用的基表,同樣可以透過前面的方法查到( set autotrace trace )。首先 mmnl 程式從 gv$session 動態效能檢視中採集資訊,預設每秒採集一次,然後將採集的資訊寫入到 ash buffers 中,此時活動會話資訊已經進入到 x$ash 基表中,然後 gv$active_session_history 檢視從 x$ash 基表中讀取資料, mmon 程式負責對 gv$active_session_history 檢視中的資訊進行持久化,持久化到 wrh$_active_session_history 基表中,而 dba_hist_active_sess_history 檢視中的資料又是來源於 wrh$_active_session_history 基表。可以看到 ash 相關的部分除了需要 mmon 程式進行持久化到 awr ,實際上正如前邊所說的, ash awr 是兩個不同的東西,不能混為一談。

 

最後列出幾個和 ASH 相關的隱含引數:

  • _ash_disk_filter_ratio

        取樣到 DBA_HIST_ACTIVE_SESS_HISTORY 中的頻率,預設為 10s 一次

  • _ash_disk_write_enable

      開啟取樣到 DBA_HIST_ACTIVE_SESS_HISTORY ,設定為 false 則即使建立快照也不會重新整理資料到 DBA_HIST_ACTIVE_SESS_HISTORY 檢視中

  • _ash_eflush_trigger

      ASH buffers 滿了多少以後會寫出,預設為 66%

  • _ash_enable

      禁用和啟用 ASH 取樣

  • _ash_sample_all

      設定為 true ,則所有會話都會被取樣,包括處於空閒等待的會話,預設是 false

  • _ash_sampling_interval

      ASH 取樣間隔時間,預設為 1000ms

  • _ash_size

       ASH buffers 大小


檢視 _ash_size 如果超過 256 m 可能觸發 bug20185439 2268127.1

如果 _ash_size 過小(預設 1m ),可能導致重新整理次數過多,造成效能瓶頸。

設定引數會重新整理一次。

建議大小為 total_size的1.5倍

select total_size/1024/1024,awr_flush_emergency_count from v$ash_info;

oracle 建議多次出現此問題再解決 Active Session History (ASH) performed an emergency flush

 

ash 是否存在異常重新整理( awr_flush_emergency_count

select total_size/1024/1024,awr_flush_emergency_count from v$ash_info;

 

alter system set "_ash_size"=2048618 sid='*' scope=spfile;

 

參考:

https://www.cnblogs.com/andy6/p/8301933.html

https://blog.csdn.net/JiekeXu/article/details/129434277


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69980685/viewspace-3003722/,如需轉載,請註明出處,否則將追究法律責任。

相關文章