资讯专栏INFORMATION COLUMN

记一次数据库无法创建awr报告

IT那活儿 / 3035人阅读
记一次数据库无法创建awr报告
问题现象

创建awr报告时,查不到snapshot信息,查看3天内的snapshot,发现一个snapshot都没有生成


问题分析

1. 主机cpu和内存负载都不高

2. 检查mmon进程运行状态正常

3. 检查snapshot保留时间和快照间隔设置正常,发现DBA_HIST_ACTIVE_SESS_HISTOR有数据,但是没有生成snapshot保留时间和快照间隔:

DBA_HIST_ACTIVE_SESS_HISTOR数据:

4. 检查数据库日志,发现以下错误

节点1 flush AWR相关数据,有个wait event: enq: WF – contention,节点2有个wait event: not in wait,通过SessId,Ser# 可以查询到执行的问题sql和执行计划:

SQL_ID 82h7w3w07k63z, child number 0
-------------------------------------
insert into wrh$_sql_bind_metadata (snap_id, dbid, sql_id, name,
position, dup_position, datatype, datatype_string, character_sid,
precision, scale, max_length) SELECT /*+ ordered use_nl(bnd) index(bnd
sql_id) */
      :lah_snap_id, :dbid, bnd.sql_id, name, position,
dup_position, datatype, datatype_string, character_sid,
precision, scale, max_length FROM      x$kewrattrnew new,
x$kewrsqlidtab tab, v$sql_bind_capture bnd WHERE
new.str1_kewrattr = tab.sqlid_kewrsie AND tab.sqlid_kewrsie
 = bnd.sql_id AND tab.childaddr_kewrsie = bnd.child_address

Plan hash value: 4222011306

-----------------------------------------------------------------------------------
| Id  | Operation | Name             | Rows  | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------------
0 | INSERT STATEMENT          | | | | 1 (100)|
1 | LOAD TABLE CONVENTIONAL | | | | |
2 | NESTED LOOPS | | 1 | 217 | 0   (0)|
|*3 | HASH JOIN              | | 1 | 48 | 0   (0)|
4 | FIXED TABLE FULL      | X$KEWRATTRNEW | 1 | 34 | |
5 | FIXED TABLE FULL      | X$KEWRSQLIDTAB | 1 | 14 | |
|*6 | FIXED TABLE FIXED INDEX| X$KQLFBC (ind:2) | 1 | 169 | 0   (0)|
-----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("NEW"."STR1_KEWRATTR"="TAB"."SQLID_KEWRSIE")
   6 - filter(("INST_ID"=USERENV(INSTANCE) AND
              "TAB"."SQLID_KEWRSIE"="KQLFBC_SQLID" AND
              "TAB"."CHILDADDR_KEWRSIE"="KQLFBC_CADD"))



问题解决

建议对sql进行优化,查询文档发现,该问题和文档Doc ID 2226216.1 中描述匹配,建议如下方法尝试解决。
  • 文档建议收集FIXED TABLE(X$KEWRATTRNEW ,X$KEWRSQLIDTAB)统计信息,收集完统计信息,问题依旧存在,没有解决。

    注意:FIXED TABLE(FIXED TABLE),存在过多过期SQL父游标,收集该表统计信息会hang住,详见Bug 22733141 awr snapshots not created, gathering stats on x$kqlfbc hangs。

exec dbms_stats.gather_table_stats(SYS, X$KEWRATTRNEW);
exec dbms_stats.gather_table_stats(SYS, X$KEWRSQLIDTAB);


  • 文档建议的刷新shared_pool,因为是生产环境,没有尝试操作。

  • 最终选择业务停机维护时段,重新启动数据库释放X$KQLFBC表数据,暂时问题解决,开始生成新的awr报告。

  • 填充AWR wrh$_sql_bind_metadata 表来自X$KQLFBC table,如果X$KQLFBC 中的过期的SQL父游标过多,就导致X$KQLFBC查询缓慢,而导致AWR后台进程m00* 进程因超时而挂起,通过跳过收集与该表相关的数据,避免该问题。

alter system set "_awr_disabled_flush_tables" = wrh$_sql_bind_metadata;


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129885.html

相关文章

  • 程序员笔记|循序渐进解读Oracle AWR性能分析报告

    摘要:表示用户操作花费的时间,包括时间和等待事件。当内存中排序空间不足时,使用临时表空间进行排序,这个是内存排序对总排序的百分比。过低说明有大量排序在临时表空间进行。要确保,否则存在严重的性能问题,比如绑定等会影响该参数。 Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库。它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以...

    honhon 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<