AWR快照無法自動生成debug

問題:生產庫RAC其中一節點無法自動生產快照

查看Mmonslave進程m000的trace文件,出現以下報錯:


*** KEWROCISTMTEXEC - encountered error: (ORA-12751: cpu time or run time policy

violation)

*** SQLSTR: total-len=295, dump-len=240,

STR={insertinto WRH$_SERVICE_STAT(snap_id, dbid,instance_number,service_name_hash,stat_id, value) select:snap_id, :dbid,:instance_number,stat.service_name_hash, stat.stat_id, stat.value fromv$active_services asvc, v$service_st}

DDE rules only execution for: ORA 12751

----- START Event Driven Actions Dump ----

---- END Event Driven Actions Dump ----

----- START DDE Actions Dump -----

Executing SYNC actions

Executing ASYNC actions

----- START DDE Action: 'ORA_12751_DUMP' (Sync) -----

CPU time exceeded 300 seconds

手動執行awr快照很慢,約10分鐘,查看活動會話,awr快照會話在執行以下SQL:


insert into WRH$_SERVICE_STAT

(snap_id, dbid, instance_number, service_name_hash, stat_id, value)

select

stat.service_name_hash,

stat.stat_id,

stat.value

from v$active_services asvc, v$service_stats stat

where asvc.name_hash = stat.service_name_hash

順理查看該SQL為何執行緩慢,發現v$service_stats視圖中記錄數超多。

聯想到在做expdp備份時,alert日志中會出現修改service name的片段。

expdp每次備份開始,都會新增一個service name,備份結束后會去掉該service name,該動作會記錄在alert log中:

    Tue Apr 26 18:15:48 2016
    ALTER SYSTEM SET service_names='***','***','***','SYS$SYS.KUPC$C_2_20160426181545.db' SCOPE=MEMORY SID='db2';
    ALTER SYSTEM SET service_names='SYS$SYS.KUPC$C_2_20160426181545.db','***','***','***','SYS$SYS.KUPC$S_2_20160426181545.db' SCOPE=MEMORY SID='db2';
    Tue Apr 26 18:15:49 2016
    DM00 started with pid=782, OS id=5830, job SYSTEM.SYS_EXPORT_TABLE_02
    Tue Apr 26 18:15:52 2016
    DW00 started with pid=943, OS id=5832, wid=1, job SYSTEM.SYS_EXPORT_TABLE_02
    Tue Apr 26 18:15:59 2016
    ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_2_20160426181545.db','***','***','***' SCOPE=MEMORY SID='db2';
    ALTER SYSTEM SET service_names='***','***','***' SCOPE=MEMORY SID='db2';

這個動作就會導致v$service_stats 視圖出現很多unknown的記錄

Paste_Image.png

expdp的問題相關資料:

    Bug 10421418 : UNKNOWN SERVICE_NAME IN V$SERVICE_STATS EVERY TIME CREATE/DELETE SERVICES
    On RAC, expdp Removes the Service Name [ID 1269319.1] 
    Bug 11927911 : THE AWR SNAPSHOT IS NOT OBTAINED
    Bug 5974572 : WRH$_SERVICE_STAT CAN GROW VERY LARGE ON RAC

通過以上現象和mos資料以及測試,可以基本判定原因:
1 數據泵bug導致每次邏輯導出時,會在v$service_stats視圖中增加56條service_name=unknow的記錄,由于在該節點的每日數據泵備份任務,導致v$service_stats視圖中累積存儲了大量unknow service name的記錄(如上圖所見庫中已有25W條);
2 AWR快照生成過程中在執行上述SQL時,由于fixed table統計信息不準確或者尚無統計信息,oracle選擇了效率較低的執行計劃,SQL的執行消耗大量時間,導致oracle維護任務cpu time policy violation,AWR快照生成中斷。

針對AWR快照中間sql執行過慢的解決辦法:手動收集fixed table的統計信息(約執行14min),執行計劃改變,效率提升。
--Before 12c, the fixed stats statistics were not gathered automatically

Begin
      DBMS_STATS.GATHER_FIXED_OBJECTS_STATS(no_invalidate => false);
end;

原執行計劃:

Paste_Image.png

新執行計劃:

Paste_Image.png

收集fixed table的統計信息后,AWR快照可以正常生成:


Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容