Oracle的awr的學習與整理

Oracle的awr的學習與整理


背景

本來想上週末進行一下總結和彙總
因爲週末兩天進行了一次長時間的培訓.所以沒有成行.
只能在工作之餘找時間進行總結. 
數據庫部分自己一個不是很強.
其實也比較抗拒學習數據庫相關的內容. 
哎..

創建awr的snapshot以及生成awr報告

有時候想精確獲得部分時間節點的快照信息, 可以先創建一個快照點.
call DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
然後執行: 
SQL> @?/rdbms/admin/awrrpt.sql
用來生成awr的報告. 
生成文檔的目錄在執行 sqlplus 命令的當前目錄
注意儘量使用html方式, 比較好看好分析一些. 
下載使用瀏覽器打開就可以了

awr的分析方法-菜鳥進階級

Report Summary
第一部分是整體介紹, 會將系統信息 CPU內存服務名
以及這次AWR報告的時間, 系統信息描述出來. 
也會有很多一眼能夠看得到的信息,比如TOsql 等. 

緊接着會有一個目錄,基本上就是整個awr報告的骨幹了: 

Report Summary
Wait Events Statistics
SQL Statistics
Instance Activity Statistics
IO Stats
Buffer Pool Statistics
Advisory Statistics
Wait Statistics
Undo Statistics
Latch Statistics
Segment Statistics
Dictionary Cache Statistics
Library Cache Statistics
Memory Statistics
Replication Statistics (GoldenGate, XStream)
Advanced Queuing
Resource Limit Statistics
Shared Server Statistics
Initialization Parameters
Active Session History (ASH) Report
ADDM Reports

詳細分析如下:


Wait Events Statistics
裏面會有整個系統的信息比如: 
Operating System Statistics - Detail
會把整個數據庫的負載情況打印出來. 
如果系統裏面有多種應用可以交叉對比,避免是被其他應用干擾.


SQL Statistics
SQL ordered by Elapsed Time
SQL ordered by CPU Time
SQL ordered by User I/O Wait Time
SQL ordered by Gets
SQL ordered by Reads
SQL ordered by Physical Reads (UnOptimized)
SQL ordered by Executions
SQL ordered by Parse Calls
SQL ordered by Sharable Memory
SQL ordered by Version Count
Complete List of SQL Text

這個裏面基本是最精髓的部分了. 大部分SQL有沒有問題可以從這裏進行分析與查看. 
執行次數, IO信息. 表信息,以及具體的SQL內容都有涉及. 


IO Stats
IO相關的信息. 
如果有出現較大偏差,可以在這裏進行着重查看.

Latch Statistics
在 Oracle 數據庫中, `Latch` 統計信息可用於監控系統中用於同步訪問共享資源的 `Latches` 的性能。
 `Latch` 統計信息可用於識別與等待事件相關的熱點等待事件和性能瓶頸。
  DBA 可以使用 `v$latch` 或 `v$latch_children` 視圖檢索 Latch 信息。
  AWR報告裏面也是存的一些核心共享資源爭用的信息. 

Undo Statistics
如果有很多事務回退,後者是其他場景可以看這個內容.

Segment Statistics
數據庫段相關的統計信息
主要是 邏輯讀,物理讀.物理寫,表掃描,數據塊變化信息, 行級別鎖等待, buffer busy waits等內容.
這一塊裏面其實東西挺多的, 很值得分析. 尤其是數據事務慢, 可能更這一塊關係很大. 

Memory Statistics
內存狀態信息. 如果配置不合理, 這Ian可以看到. 

最後面一部分是ADDM的信息
ADDM(自適應數據庫設計管理器)是 Oracle 數據庫的一個強有力的性能優化工具。ADDM 可以自動分析數據庫性能問題,並提供有關以下內容的建議:

- 識別性能瓶頸
- 分析高負載 SQL 語句
- 優化關鍵性能指標(如 I/O 瓶頸、內存使用、CPU 使用情況等)
- 提供對數據庫和實例級別的優化建議等


方神提供的幾個SQL查詢執行次數

# 查詢當前內存中的SQL執行次數信息. 第一個時間是秒鐘, 第二個時間是微秒.
select exec_nums,elapsed_time_s,elap_per_exec,sql_id,sql_text
  from (select 
               sqt.exec exec_nums,
               trunc(nvl((sqt.elap / 1000000), to_number(null)),2) elapsed_time_s,
               trunc(decode(sqt.exec, 0,sqt.elap,(sqt.elap / sqt.exec)),2) elap_per_exec,
               sqt.sql_id,
               nvl(sqt.sql_text, to_clob(' ** SQL Text Not Available ** ')) sql_text
          from (select dhs.sql_id,
                       sum(dhs.ELAPSED_TIME) elap,
                       sum(dhs.EXECUTIONS) exec,
                       max(SQL_TEXT)  sql_text
                  from gv$sqlstats dhs
                 group by dhs.sql_id) sqt
         order by exec_nums desc,elapsed_time_s desc,elap_per_exec desc)
 where rownum <= 100;

# 查詢AWR歷史分析表中的數據信息. 
with a as (select DBID from v$database),
     c as (select min(snap_id) min_snap_id,max(snap_id) max_snap_id from dba_hist_snapshot where begin_interval_time >trunc(sysdate) - 12/24)
select exec_nums,elapsed_time_s,elap_per_exec,sql_id,sql_text
  from (select  sqt.exec exec_nums,
               sqt.sql_id,
               trunc(nvl((sqt.elap / 1000000), to_number(null)),2) elapsed_time_s,
               trunc(decode(sqt.exec, 0, sqt.elap,(sqt.elap / sqt.exec )),2) elap_per_exec,
               nvl(st.sql_text, to_clob(' ** SQL Text Not Available ** ')) sql_text
          from (select a.dbid,
                       dhs.sql_id,
                       sum(dhs.elapsed_time_delta) elap,
                       sum(dhs.executions_delta) exec
                  from dba_hist_sqlstat dhs,a,c
                 where dhs.dbid = a.dbid
                   and dhs.snap_id >= c.min_snap_id
                   and dhs.snap_id <= c.max_snap_id
                   and dhs.executions_delta >= 1
                 group by a.dbid,dhs.sql_id) sqt,
               dba_hist_sqltext st
         where st.sql_id(+) = sqt.sql_id
            and st.dbid(+) = sqt.dbid
         order by exec_nums desc , elapsed_time_s desc,elap_per_exec desc)
 where rownum <= 100;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章