生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

概述

当数据库突然出现cpu飙升、内存占用过多的情况时,这时候我们需要去生成awr报告来观察某段时间的数据库情况,定位数据库瓶颈,下面简单说下怎么去生成一份awr报告。


手工刷出快照

默认情况下 Oracle 的快照每一小时生成一次,也就是说 AWR 分析的是一小时以内这一段时间的负载情况。

用这个默认的不够灵活,而且浪费调试时间——我们总不能压一小时才能看结果吧?一般取压力高峰时的两个快照之间的几分钟就可以了。

数据库 DBA 用户登录 SQL shell(或者直接用 Oracle 客户端打开 sql 执行窗,如 SQL Developer),执行以下 sql:

SQL> exec dbms_workload_repository.create_snapshot();

匿名块已完成

隔几分钟后再执行一次,生成俩快照。

这个间隔时间越长越好,越能说明问题。

以系统 DBA 登录 SQL shell

SSH 登录远程 Oracle 所在 Redhat 主机,依次执行以下命令以登录 SQL shell:

# export ORACLE_HOME=/u01/oracle/product/11.2.0/nwppdb
# export oracle_sid=nwppdb
# sqlplus / as sysdba
SQL>

登录 SQL shell 成功。

生成 AWR 报告

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql

进入 AWR 操作步骤:

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

Enter value for report_type 输入 html:

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

我们看当天的,Enter value for num_days 输入 1:

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

如上图所示,列出的是当天生成的所有快照,可以看到:ID 为 27810 和 27811 的两个是我们刚才手工生成的,我们就用 AWR 采集这两个快照之间的数据了。因此 Enter value for begin_snap 我们输入 27810:

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

Enter value for end_snap 我们输入 27811:

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

报告名字用默认的 awrrpt_1_27810_27811.html 即可,直接回车,awr 报告生成:

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

生成的文件就在当前目录下。


PS:AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,对我们分析数据库瓶颈有很大帮助,后面会拿生产的一个刚好出现瓶颈的数据库的awr报告来做分析,对awr涉及的一些内容做一下说明,感兴趣的朋友可以关注下!!

生产环境如何快速有效的生成awr报告来定位数据库瓶颈?

相关推荐