

# 使用 Automatic Workload Repository (AWR) 生成性能报告
<a name="Appendix.Oracle.CommonDBATasks.AWR"></a>

要收集性能数据并生成报告，Oracle 建议使用 Automatic Workload Repository (AWR)。AWR 需要 Oracle Database Enterprise Edition 以及 Diagnostics and Tuning 包的许可证。要启用 AWR，请将 `CONTROL_MANAGEMENT_PACK_ACCESS` 初始化参数设置为 `DIAGNOSTIC` 或 `DIAGNOSTIC+TUNING`。

## 在 RDS 中使用 AWR 报告
<a name="Appendix.Oracle.CommonDBATasks.AWRTechniques"></a>

要生成 AWR 报告，您可以运行脚本，例如 `awrrpt.sql`。这些脚本安装在数据库主机服务器上。在 Amazon RDS 中，您无法直接访问主机。但是，您可以从其他 Oracle 数据库安装中获取 SQL 脚本的副本。

您还可以通过在 `SYS.DBMS_WORKLOAD_REPOSITORY` PL/SQL 软件包中运行过程来使用 AWR。您可以使用此软件包管理基准和快照，还可以显示 ASH 和 AWR 报告。例如，要生成文本格式的 AWR 报告，请运行 `DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT` 过程。但是，您无法从AWS 管理控制台访问这些 AWR 报告。

使用 AWR 时，我们建议使用 `rdsadmin.rdsadmin_diagnostic_util` 过程。您可以使用这些过程生成以下内容：
+ AWR 报告
+ Active Session History (ASH) 报告
+ Automatic Database Diagnostic Monitor (ADDM) 报告
+ AWR 数据的 Oracle Data Pump Export 转储文件

`rdsadmin_diagnostic_util` 过程将报告保存到数据库实例文件系统。您可以从控制台访问这些报告。您还可以使用 `rdsadmin.rds_file_util` 过程访问报告，并可以使用 S3 集成访问复制到 Amazon S3 的报告。有关更多信息，请参阅“[读取数据库实例目录中的文件](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ReadingFiles)”和“[Amazon S3 集成](oracle-s3-integration.md)”。

您可在以下 Amazon RDS for Oracle 数据库引擎版本中使用 `rdsadmin_diagnostic_util` 过程：
+ 所有 Oracle Database 21c 版本
+ 19.0.0.0.ru-2020-04.rur-2020-04.r1 或更高的 Oracle Database 19c 版本

有关解释如何在复制场景中使用诊断报告的博客，请参阅[为 Amazon RDS for Oracle 只读副本生成 AWR 报告](https://aws.amazon.com/blogs/database/generate-awr-reports-for-amazon-rds-for-oracle-read-replicas/)。

## 诊断实用程序软件包的通用参数
<a name="Appendix.Oracle.CommonDBATasks.CommonAWRParam"></a>

通常，您在通过 `rdsadmin_diagnostic_util` 软件包管理 AWR 和 ADDM 时可以使用以下参数。


| 参数 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
| `begin_snap_id` | `NUMBER` | — | 是 | 开始快照的 ID。 | 
| `end_snap_id` | `NUMBER` | — | 是 | 结束快照的 ID。 | 
| `dump_directory` | `VARCHAR2` | `BDUMP` | 否 | 将报告写入或将文件导出到的目录。如果您指定非默认目录，则运行 `rdsadmin_diagnostic_util` 过程的用户必须具有该目录的写入权限。 | 
| `p_tag` | `VARCHAR2` | — | 否 | 可用于区分备份的字符串，以便指示备份的目的或用法，例如 `incremental` 或 `daily`。<br />您最多可指定 30 个字符。有效字符为 `a-z`、`A-Z`、`0-9`、下划线 (`_`)、短划线 (`-`) 以及点号 (`.`)。此标签不区分大小写。无论输入标签时使用的大小写如何，RMAN 始终以大写形式存储标签。<br />标签不一定是唯一的，因此多个备份可以使用相同的标签。如果未指定标签，则 RMAN 会使用 `TAG{{YYYYMMDDTHHMMSS}}` 格式自动分配默认标签，其中 {{YYYY}} 表示年份、{{MM}} 表示月份、{{DD}} 表示某天，{{HH}} 表示小时（采用 24 小时格式）、{{MM}} 表示分钟、{{SS}} 表示秒。日期和时间表示 RMAN 开始备份的时间。例如，备份的默认标签 `TAG20190927T214517` 表示备份开始于 2019 年 09 月 27 日 21:45:17。<br />以下 RDS for Oracle 数据库引擎版本支持 `p_tag` 参数：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.AWR.html) | 
| `report_type` | `VARCHAR2` | `HTML` | 否 | 报告的格式。有效值为 `TEXT` 和 `HTML`。 | 
| `dbid` | `NUMBER` | — | 否 | Oracle 的有效数据库标识符 (DBID)，显示在 `DBA_HIST_DATABASE_INSTANCE` 中。如果未指定此参数，RDS 将使用 `V$DATABASE.DBID` 视图中显示的当前 DBID。 | 

使用 rdsadmin\_diagnostic\_util 软件包管理 ASH 时，通常使用以下参数。


| 参数 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
| `begin_time` | `DATE` | — | 是 | ASH 分析的开始时间。 | 
| `end_time` | `DATE` | — | 是 | ASH 分析的结束时间。 | 
| `slot_width` | `NUMBER` | `0` | 否 | ASH 报告的“Top Activity (热门活动)”部分中使用的槽的持续时间（以秒为单位）。如果未指定此参数，则 `begin_time` 和 `end_time` 之间的时间间隔不超过 10 个槽。 | 
| `sid` | `NUMBER` | Null | 否 | 会话 ID。 | 
| `sql_id` | `VARCHAR2` | Null | 否 | SQL ID。 | 
| `wait_class` | `VARCHAR2` | Null | 否 | 等待类名称。 | 
| `service_hash` | `NUMBER` | Null | 否 | 服务名称哈希。 | 
| `module_name` | `VARCHAR2` | Null | 否 | 模块名称。 | 
| `action_name` | `VARCHAR2` | Null | 否 | 操作名称。 | 
| `client_id` | `VARCHAR2` | Null | 否 | 数据库会话的特定于应用程序的 ID。 | 
| `plsql_entry` | `VARCHAR2` | Null | 否 | PL/SQL 入口点。 | 

## 生成 AWR 报告
<a name="Appendix.Oracle.CommonDBATasks.GenAWRReport"></a>

要生成 AWR 报告，请使用 `rdsadmin.rdsadmin_diagnostic_util.awr_report` 过程。

以下示例生成快照范围 101–106 的 AWR 报告。输出文本文件名为 `awrrpt_101_106.txt`。您可以通过AWS 管理控制台访问此报告。

```
EXEC rdsadmin.rdsadmin_diagnostic_util.awr_report(101,106,'TEXT');
```

以下示例生成快照范围 63–65 的 HTML 报告。输出 HTML 文件名为 `awrrpt_63_65.html`。该过程将报告写入名为 `AWR_RPT_DUMP` 的非默认数据库目录。

```
EXEC rdsadmin.rdsadmin_diagnostic_util.awr_report(63,65,'HTML','AWR_RPT_DUMP');
```

## 将 AWR 数据提取到转储文件
<a name="Appendix.Oracle.CommonDBATasks.ExtractAWR"></a>

要将 AWR 数据提取到转储文件中，请使用 `rdsadmin.rdsadmin_diagnostic_util.awr_extract` 过程。只能在 PDB 级别使用此功能。

以下示例提取范围 101–106 中的快照。输出转储文件名为 `awrextract_101_106.dmp`。您可以通过控制台访问此文件。

```
EXEC rdsadmin.rdsadmin_diagnostic_util.awr_extract(101,106);
```

以下示例提取范围在 63–65 中的快照。输出转储文件名为 `awrextract_63_65.dmp`。该文件存储在名为 `AWR_RPT_DUMP` 的非默认数据库目录中。

```
EXEC rdsadmin.rdsadmin_diagnostic_util.awr_extract(63,65,'AWR_RPT_DUMP');
```

## 生成 ADDM 报告
<a name="Appendix.Oracle.CommonDBATasks.ADDM"></a>

要生成 ADDM 报告，请使用 `rdsadmin.rdsadmin_diagnostic_util.addm_report` 过程。

以下示例生成快照范围 101–106 的 ADDM 报告。输出文本文件名为 `addmrpt_101_106.txt`。您可以通过控制台访问报告。

```
EXEC rdsadmin.rdsadmin_diagnostic_util.addm_report(101,106);
```

以下示例生成快照范围 63–65 的 ADDM 报告。输出文本文件名为 `addmrpt_63_65.txt`。该文件存储在名为 `ADDM_RPT_DUMP` 的非默认数据库目录中。

```
EXEC rdsadmin.rdsadmin_diagnostic_util.addm_report(63,65,'ADDM_RPT_DUMP');
```

## 生成 ASH 报告
<a name="Appendix.Oracle.CommonDBATasks.ASH"></a>

要生成 ASH 报告，请使用 `rdsadmin.rdsadmin_diagnostic_util.ash_report` 过程。

以下示例生成一个 ASH 报告，其中包含当前时间 14 分钟前的数据。输出文件的名称使用格式 `ashrpt{{begin_time}}{{end_time}}.txt`，其中 `{{begin_time}}` 和 `{{end_time}}` 使用格式 `YYYYMMDDHH24MISS`。您可以通过控制台访问文件。

```
BEGIN
    rdsadmin.rdsadmin_diagnostic_util.ash_report(
        begin_time     =>     SYSDATE-14/1440,
        end_time       =>     SYSDATE,
        report_type    =>     'TEXT');
END;
/
```

以下示例生成一个 ASH 报告，其中包括从 2019 年 11 月 18 日下午 6 点 07 分到 2019 年 11 月 18 日下午 6 点 15 分的数据。输出 HTML 报告名为 `ashrpt_20190918180700_20190918181500.html`。该报告存储在名为 `AWR_RPT_DUMP` 的非默认数据库目录中。

```
BEGIN
    rdsadmin.rdsadmin_diagnostic_util.ash_report(
        begin_time     =>    TO_DATE('2019-09-18 18:07:00', 'YYYY-MM-DD HH24:MI:SS'),
        end_time       =>    TO_DATE('2019-09-18 18:15:00', 'YYYY-MM-DD HH24:MI:SS'),
        report_type    =>    'html',
        dump_directory =>    'AWR_RPT_DUMP');
END;
/
```

## 从控制台或 CLI 访问 AWR 报告
<a name="Appendix.Oracle.CommonDBATasks.AWRConsole"></a>

要访问 AWR 报告或导出转储文件，您可以使用 AWS 管理控制台 或 AWS CLI。有关更多信息，请参阅 [下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)。