Oracle-11g

AWR 報告 - 調整數據庫

  • February 15, 2011

我們有一個 OLTP 系統,以下是我們在高峰時段拍攝的 AWR 報告,為期三天,每天一次。我們看到很多直接路徑讀取;我們想添加更多的 PGA 以減少此等待事件的等待時間。以下是我們 11g db 中的目前設置。

Sqls order by cpu

CPU Time (s) Executions  CPU per Exec (s) %Total Elapsed Time (s) %CPU %IO SQL Id SQL Module SQL Text 
7,279.38 9,694 0.75 31.50 7,297.79 99.75 0.27 0dp0c8wux0jnt    select case when max(LMA.LEAS... 
6,562.18 1,395 4.70 28.40 6,582.28 99.69 0.31 3g2kw67v3v0qs    SELECT NAME, vpd_predicates.ge... 
4,229.12 836,735 0.01 18.30 4,234.99 99.86 0.00 55a17fhdqg315 DBMS_SCHEDULER  begin :con := SELECT_POLICY_FU... 
2,683.17 968 2.77 11.61 2,605.03 103.00 7.61 dfd3gcuamscs8    select sc.Doc_ID docId , sc.DO... 
2,434.46 853,025 0.00 10.54 2,442.95 99.65 0.00 4y5m5y6y6wvzs DBMS_SCHEDULER  SELECT COUNT (*) FROM CONTACT_... 


Top 5 Timed Foreground Events 08-Feb-2011
Event   Waits   Time(s) Avg wait (ms)   % DB time   Wait Class
DB CPU      23,108      94.74    
db file sequential read 1,332,461   797 1   3.27    User I/O
direct path read    430,600 523 1   2.14    User I/O
db file scattered read  245,444 224 1   0.92    User I/O
SQL*Net more data to client 2,057,853   155 0   0.64    Network

直接路徑讀取是並行全表掃描的典型症狀 - 您的 I/O 最高 SQL 是什麼?我會查看查詢計劃以確保正在使用索引。你的並行設置是什麼?

只有在一個會話為給定表執行所有這些操作時,升級 PGA 才會有所幫助,在最壞的情況下,每個會話都需要一個足夠大的 PGA 來記憶體整個表……

有等待事件 enq: TM - 爭用。當您有未索引的外鍵約束列時,會發生此等待事件。對主表的更新將鎖定整個子表。我有一個查詢,它為缺少的索引生成創建索引語句。您可以根據自己的喜好更改命名約定。

SELECT 'CREATE INDEX '||a.owner||'.IX_'||a.table_name||'__'||
   replace(a.column_name, 'FK_', '') ||' ON '||a.owner||'.'||a.table_name||
   ' ('||a.column_name||') LOGGING TABLESPACE '||
   replace(b.tablespace_name, '_DAT', '_IDX')||' NOPARALLEL ONLINE;
/'
FROM (
  SELECT c.owner, c.table_name, cc.column_name, cc.position column_position
  FROM   all_constraints c, all_cons_columns cc
  WHERE  c.constraint_name = cc.constraint_name and c.owner=cc.owner
  AND    c.constraint_type = 'R'
  MINUS
  SELECT i.owner, i.table_name, ic.column_name, ic.column_position
  FROM   all_indexes i, all_ind_columns ic
  WHERE  i.index_name = ic.index_name and i.owner=ic.index_owner
) a
inner join all_tables b on b.owner=a.owner and b.table_name=a.table_name
where a.owner='<owner>'
ORDER BY a.owner, a.table_name, a.column_position;

引用自:https://dba.stackexchange.com/questions/1223