

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Performance Insights 进行监控
<a name="performance-insights"></a>

Performance Insights 添加到现有的 Amazon DocumentDB 监控功能中，以展示您的集群性能并帮助您分析影响集群性能的任何问题。利用 Performance Insights 控制面板，您可以可视化数据库负载并按等待状态、查询语句、主机或应用来筛选负载。

**注意**  
Performance Insights 仅适用于亚马逊 DocumentDB 3.6、4.0、5.0 和 8.0 基于实例的集群。

**它有何用处？**
+ 可视化数据库性能：可视化负载以确定负载在数据库上的时间和位置
+ 确定导致数据库负载的原因：确定哪些查询、主机和应用程序导致了实例上的负载
+ 确定数据库何时出现负载 ：放大 Performance Insights 控制面板以关注特定事件，或缩小以查看更大时间跨度的趋势
+ 数据库加载警报 — 自动访问新的数据库负载指标，您可以从中 CloudWatch 监控数据库负载指标以及其他 Amazon DocumentDB 指标并对其设置警报

**Amazon DocumentDB Performance Insights 有哪些局限性？**
+  AWS GovCloud （美国东部）和 AWS GovCloud （美国西部）地区的 Performance Insights 不可用
+ Performance Insights for Amazon DocumentDB 最多可保留 7 天的性能数据
+ 长度超过 1024 字节的查询不会在性能详情中聚合

**Topics**
+ [Performance Insights 概念](performance-insights-concepts.md)
+ [启用和禁用 Performance Insights](performance-insights-enabling.md)
+ [为 Performance Insights 配置访问策略](performance-insights-policies.md)
+ [使用 Performance Insights 控制面板分析指标](performance-insights-analyzing.md)
+ [使用 Performance Insights API 检索指标](performance-insights-metrics.md)
+ [Performance Insights 的亚马逊 CloudWatch 指标](performance-insights-cloudwatch.md)
+ [Performance Insights 的计数器指标](performance-insights-counter-metrics.md)

# Performance Insights 概念
<a name="performance-insights-concepts"></a>

**Topics**
+ [平均活动会话数](#performance-insights-concepts-sessions)
+ [Dimensions](#performance-insights-concepts-dimensions)
+ [最大 vCPU](#performance-insights-concepts-maxvcpu)

## 平均活动会话数
<a name="performance-insights-concepts-sessions"></a>

数据库负载（数据库负载）衡量数据库中的活动级别。Performance Insights 的关键指标是 `DB Load`，每秒收集一次。`DBLoad` 指标的单位是 Amazon DocumentDB 实例的*平均活动会话数 (AAS)*。

*活动*会话是已将作业提交到 Amazon DocumentDB 实例并且正在等待响应的连接。例如，如果您将查询提交到 Amazon DocumentDB 实例，则数据库会话在实例处理该查询时将处于活动状态。

为了获取平均活动会话数，Performance Insights 会对同时运行查询的会话数进行采样。平均活动会话数是会话总数除以样本总数。下表显示了正在运行的查询的五个连续示例。


| 示例 | 运行查询的会话数 | AAS | 计算 | 
| --- | --- | --- | --- | 
|  1  |  2  |  2  |  2 个会话/1 个样本  | 
|  2  |  0  |  1  |  2 个会话/2 个样本  | 
|  3  |  4  |  2  |  6 个会话/3 个样本  | 
|  4  |  0  |  1.5  |  6 个会话/4 个样本  | 
|  5  |  4  |  2  |  10 个会话/5 个样本  | 

在上一示例中，1-5 时间间隔的数据库负载为 2 AAS。数据库负载的增加意味着，平均而言数据库上运行的会话更多。

## Dimensions
<a name="performance-insights-concepts-dimensions"></a>

`DB Load` 指标不同于其他时间序列指标，因为您可以将它分为称为维度的子组件。您可以将维度视为 `DB Load` 指标的不同特征的类别。诊断性能问题时，最有用的维度是**等待状态**和**主要查询**。

**等待状态**  
*等待状态* 会导致查询语句等待特定事件发生，然后才能继续运行。例如，查询语句可能会一直等到已锁定的资源得到解锁。通过结合使用 `DB Load` 和等待状态，您可以全面了解会话状态。以下是各种 Amazon DocumentDB 等待状态：


| Amazon DocumentDB 等待状态 | 等待状态描述 | 
| --- | --- | 
|  Latch  |  当会话等待分页缓冲池时，就会出现 Latch 等待状态。当系统频繁处理大型查询、集合扫描或缓冲池太小而无法处理工作集时，频繁分页和退出缓冲池的情况可能会更频繁。  | 
| CPU |  当会话在 CPU 上等待时，就会出现 CPU 等待状态。  | 
|  CollectionLock  |  当会话 CollectionLock 等待获取集合锁定时，就会出现等待状态。当对集合进行 DDL 操作时，就会发生这些事件。  | 
| DocumentLock |  当会话 DocumentLock 等待获取文档锁时，会出现等待状态。对同一文档进行大量并发写入将导致该文档的 DocumentLock等待状态增加。  | 
|  SystemLock  |  当 SystemLock 会话在系统上等待时，就会出现等待状态。当系统上频繁出现长时间运行的查询、长时间运行的事务或高并发时，可能会发生这种情况。  | 
|  IO  |  当会话等待 IO 完成时，就会出现 IO 等待状态。  | 
|  BufferLock  |  当会话 BufferLock 等待获取缓冲区中共享页面的锁时，就会出现等待状态。 BufferLock如果其他进程在请求的页面上持有打开的游标，则等待状态可能会延长。  | 
|  LowMemThrottle  |  由于 Amazon DocumentDB 实例的内存压力过大而导致会话处于 LowMemThrottle 等待状态时，就会出现等待状态。如果此状态持续很长时间，请考虑纵向扩展实例以提供额外的内存。有关更多信息，请参阅[资源管理器](https://docs.aws.amazon.com/documentdb/latest/developerguide/how-it-works.html)。  | 
|  BackgroundActivity  |  当会话正在 BackgroundActivity 等待内部系统进程时，会出现等待状态。  | 
|  其他  |  其他等待状态是内部等待状态。如果此状态持续很长时间，请考虑终止此查询。有关更多信息，请参阅[如何查找并终止长时间运行或受阻的查询？](https://docs.aws.amazon.com/documentdb/latest/developerguide/user_diagnostics.html#user_diagnostics-query_terminating.html)  | 

**主要查询**  
等待状态太显示瓶颈，主要查询则显示哪些查询对数据库负载的贡献最大。例如，当前可能正在数据库上运行许多查询，但单个查询可能会占用 99% 的数据库负载。在这种情况下，高负载可能表示查询存在问题。

## 最大 vCPU
<a name="performance-insights-concepts-maxvcpu"></a>

在控制面板中，**数据库负载**图表会收集、聚合和显示会话信息。要查看活动会话是否超过最大 CPU，请查看它们与**最大 vCPU** 线的关系。**最大 vCPU** 值由 Amazon DocumentDB 实例的 vCPU（虚拟 CPU）内核数决定。

如果数据库负载经常高于**最大 vCPU** 线并且主要等待状态为 CPU，则表示 CPU 过载。在这种情况下，您可能需要限制与实例的连接数，优化具有高 CPU 负载的任何查询，或考虑使用更大的实例类。如果始终有大量实例处于任何等待状态，则表示可能存在要解决的瓶颈或资源争用问题。即使数据库负载未越过**最大 vCPU** 线，也可能会出现此问题。

# 启用和禁用 Performance Insights
<a name="performance-insights-enabling"></a>

要使用 Performance Insights，请在数据库实例中启用它。如果需要，您可以稍后将其禁用。启用和禁用 Performance Insights 不会导致停机、重新启动或故障转移。

性能详情代理占用数据库主机上有限的 CPU 和内存。当数据库负载较高时，代理将通过降低收集数据的频率来限制性能影响。

## 在创建集群时启用 Performance Insights
<a name="performance-insights-enabling-create-instance"></a>

在控制台中，您可以在创建或修改新数据库实例时启用或禁用 Performance Insights。

### 使用 AWS 管理控制台
<a name="create-instance-console"></a>

在控制台中，您可以在创建 Amazon DocumentDB 集群时启用 Performance Insights。在创建新 Amazon DocumentDB 集群时，通过在 **Performance Insights** 部分中选择**启用 Performance Insights** 以启用 Performance Insights。

**控制台说明**

1. 有关创建集群的说明，请参阅[创建 Amazon DocumentDB 集群](https://docs.aws.amazon.com/documentdb/latest/developerguide/db-cluster-create.html)中的说明。

1. 在 Performance Insights 部分中选择**启用 Performance Insights**。  
![\[“性能详情”部分，其中已选择“启用性能详情”。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/select-performance-insights.png)
**注意**  
Performance Insights 的数据留存期将为七天。

   ** AWS KMS 密钥**-指定您的 AWS KMS 密钥。Performance Insights 使用您的 AWS KMS 密钥加密所有潜在的敏感数据。正在传输的数据和静态数据都会被加密。有关更多信息，请参阅为 Performance Insights 配置 AWS AWS KMS 策略。

## 修改实例时启用和禁用
<a name="performance-insights-enabling-modify-instance"></a>

您也可以修改数据库实例以使用控制台或 AWS CLI启用或禁用 Performance Insights。

------
#### [ Using the AWS 管理控制台 ]

**控制台说明**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 选择**集群**。

1. 选择一个数据库实例，然后选择**修改**。

1. 在 Performance Insights 部分，选择**启用 Performance Insights** 或**禁用 Performance Insights**。
**注意**  
如果选择 “**启用 Performance Insights**”，则可以指定 AWS AWS KMS 密钥。Performance Insights 使用您的 AWS KMS 密钥加密所有潜在的敏感数据。正在传输的数据和静态数据都会被加密。有关更多信息，请参阅[加密 Amazon DocumentDB 静态数据](https://docs.aws.amazon.com/documentdb/latest/developerguide/encryption-at-rest.html)。

1. 选择**继续**。

1. 对于**修改计划**，选择**立即应用**。如果您选择**在下一个计划的维护时段内应用**，则您的实例将忽略此设置并立即启用 Performance Insights。

1. 选择**修改实例**。

------
#### [ Using the AWS CLI ]

使用`create-db-instance`或`modify-db-instance` AWS AWS CLI 命令时，您可以通过指定来启用 Performance Insights`--enable-performance-insights`，也可以通过指定将其禁用`--no-enable-performance-insights`。

以下过程介绍如何使用 AWS AWS CLI为数据库实例启用或禁用 Performance Insights。



**AWS AWS CLI 指令**

调用`modify-db-instance` AWS AWS CLI 命令并提供以下值：
+ `--db-instance-identifer`：数据库实例的名称
+ `--enable-performance-insights` 以启用，或 `--no-enable-performance-insights` 以禁用

**Example**  
以下示例为 `sample-db-instance` 启用 Performance Insights：  

```
aws docdb modify-db-instance \
    --db-instance-identifier sample-db-instance \
    --enable-performance-insights
```

```
aws docdb modify-db-instance ^
    --db-instance-identifier sample-db-instance ^
    --enable-performance-insights
```

------

# 为 Performance Insights 配置访问策略
<a name="performance-insights-policies"></a>

要访问 Performance Insights，您必须拥有 AWS Identity and Access Management （IAM）的相应权限。您可以使用以下选项来授予访问权限：
+ 将 `AmazonRDSPerformanceInsightsReadOnly` 托管式策略附加到权限集或角色。
+ 创建自定义 IAM policy 并将其附加到权限集或角色。

此外，如果您在启用 Performance Insights 时指定了客户托管密钥，请确保账户中的用户对 KMS 密钥具有 `kms:Decrypt` 和 `kms:GenerateDataKey` 权限。

**注意**  
[在 encryption-at-rest AWS KMS 密钥和安全组管理方面，Amazon DocumentDB 利用了与 Amazon RDS 共享的操作技术。](https://aws.amazon.com/rds)

## 将 Amazon RDSPerformance InsightsReadOnly 政策附加到 IAM 委托人
<a name="USER_PerfInsights.access-control.IAM-principal"></a>

`AmazonRDSPerformanceInsightsReadOnly`是一项 AWS托管策略，允许访问亚马逊 DocumentDB Performance Insights API 的所有只读操作。目前，此 API 中的所有操作均为只读。如果将 `AmazonRDSPerformanceInsightsReadOnly` 附加到权限集或角色，接收人可以使用 Performance Insights 以及其他控制台功能。

## 为 Performance Insights 创建自定义 IAM policy
<a name="USER_PerfInsights.access-control.custom-policy"></a>

对于没有 `AmazonRDSPerformanceInsightsReadOnly` 策略的用户，您可以通过创建或修改用户托管 IAM policy 来授予对 Performance Insights 的访问权限。当您将策略附加到一个权限集或角色时，接收人可以使用 Performance Insights。

**创建自定义策略**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**策略**。

1. 选择 **Create policy (创建策略)**。

1. 在**创建策略**页面上，选择“JSON”选项卡。

1. 复制并粘贴以下文本，*us-east-1*替换为您 AWS 所在地区的*111122223333*名称和您的客户账号。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "rds:DescribeDBInstances",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "rds:DescribeDBClusters",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "pi:DescribeDimensionKeys",
               "Resource": "arn:aws:pi:us-east-1:111122223333:metrics/rds/*"
           },
           {
               "Effect": "Allow",
               "Action": "pi:GetDimensionKeyDetails",
               "Resource": "arn:aws:pi:us-east-1:111122223333:metrics/rds/*"
           },
           {
               "Effect": "Allow",
               "Action": "pi:GetResourceMetadata",
               "Resource": "arn:aws:pi:us-east-1:111122223333:metrics/rds/*"
           },
           {
               "Effect": "Allow",
               "Action": "pi:GetResourceMetrics",
               "Resource": "arn:aws:pi:us-east-1:111122223333:metrics/rds/*"
           },
           {
               "Effect": "Allow",
               "Action": "pi:ListAvailableResourceDimensions",
               "Resource": "arn:aws:pi:us-east-1:111122223333:metrics/rds/*"
           },
           {
               "Effect": "Allow",
               "Action": "pi:ListAvailableResourceMetrics",
               "Resource": "arn:aws:pi:us-east-1:111122223333:metrics/rds/*"
           }
       ]
   }
   ```

------

1. 选择**查看策略**。

1. 为策略提供名称并可以选择提供描述，然后选择**创建策略**。

现在，可以将策略附加到权限集或角色。以下过程假设您已经有一个可用于此目的的用户。

**将策略附加到用户**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **Users**。

1. 从列表中选择现有用户。
**重要**  
要使用 Performance Insights，请确保除了自定义策略之外，您还有权访问 Amazon DocumentDB。例如，**AmazonDocDBReadOnlyAccess**预定义策略提供对 Amazon Docdb 的只读访问权限。有关更多信息，请参阅使用策略[管理访问权限](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.html#security_iam_access-manage)。

1. 在 **Summary (摘要)** 页上，选择 **Add permissions (添加权限)**。

1. 选择**直接附加现有策略**。对于 **Search**，键入策略名称的前几个字符，如下所示。  
![\[选择一个策略\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/pi-add-permissions.png)

1. 选择策略，然后选择 **Next: Review**。

1. 选择 **Add permissions (添加权限)**。

## 为 Performan AWS KMS ce Insights 配置策略
<a name="USER_PerfInsights.access-control.cmk-policy"></a>

Performan AWS KMS key ce Insights 使用加密敏感数据。当您通过 API 或控制台启用 Performance Insights 时，您可以选择以下选项：
+ 选择默认值 AWS 托管式密钥。

  Amazon DocumentDB 使用您的新数据库实例。 AWS 托管式密钥 亚马逊 DocumentDB 会 AWS 托管式密钥 为您的 AWS 账户创建一个。您的亚马逊文档数据库 AWS 账户在每个 AWS 区域都有不同的 AWS 托管式密钥 账户。
+ 选择客户托管密钥。

  如果您指定一个客户托管密钥，则您账户中调用 Performance Insights API 的用户需要在 KMS 密钥具有 `kms:Decrypt` 和 `kms:GenerateDataKey` 权限。您可以通过 IAM policy 配置这些权限。但是，我们建议您通过 KMS 密钥策略来管理这些权限。有关更多信息，请参阅[在 AWS KMS 中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

**Example**  
以下示例密钥策略显示了如何将语句添加到 KMS 密钥策略。这些语句可以访问 Performance Insights。根据您的使用方式 AWS KMS，您可能需要更改一些限制。在将语句添加到您的策略之前，请删除所有注释。

# 使用 Performance Insights 控制面板分析指标
<a name="performance-insights-analyzing"></a>

Performance Insights 控制面板包含帮助您分析和排查性能问题的数据库性能信息。在主控制面板页面上，可以查看有关数据库负载（DB 负载）的信息。您可以按维度（例如等待状态或查询）对数据库负载进行“切片”。

**Topics**
+ [Performance Insights 控制面板概览](performance-insights-dashboard-overview.md)
+ [打开 Performance Insights 控制面板](performance-insights-dashboard-opening.md)
+ [通过等待状态分析数据库负载](performance-insights-analyzing-db-load.md)
+ [主要查询选项卡概览](performance-insights-top-queries.md)
+ [放大数据库负载图表](performance-insights-zoom-db-load.md)

# Performance Insights 控制面板概览
<a name="performance-insights-dashboard-overview"></a>

与 Performance Insights 进行交互的最简单方式即为控制面板。以下示例显示了 Amazon DocumentDB 实例的控制面板。默认情况下，Performance Insights 控制面板将显示最近一小时的数据。

![\[性能详情控制面板，其中显示了 Amazon DocumentDB 实例随时间推移的 CPU 利用率和数据库负载。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/overview-dashboard.png)


控制面板分为以下几个部分：

1. **计数器指标**：显示特定性能计数器指标的数据。

1. **数据库负载**：显示数据库负载与**最大 vCPU** 线表示的数据库实例容量的比较情况。

1.  **主要维度**：显示对数据库负载影响最大的主要维度。这些维度包括 `waits`、`queries`、`hosts`、`databases` 和 `applications`。

**Topics**
+ [计数器指标图表](#performance-insights-overview-metrics)
+ [数据库负载图表](#performance-insights-overview-db-load-chart)
+ [主要维度表](#performance-insights-overview-top-dimensions)

## 计数器指标图表
<a name="performance-insights-overview-metrics"></a>

使用计数器指标，您可以自定义 Performance Insights 控制面板来包括最多 10 个其他图表。这些图表显示了所选的数十个操作系统指标。您可将此信息与数据库负载相关联，以帮助识别和分析性能问题。

**计数器指标**图表显示了性能计数器的数据。

![\[计数器指标图表，其中显示了随时间推移的 CPU 利用率。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/counter-metrics.png)


要更改性能计数器，请选择**管理指标**。您可以选择多个 **OS 指标**，如以下屏幕截图所示。要查看任何指标的详细信息，请将鼠标悬停在相应指标名称上。

![\[性能详情控制面板指标选择界面，其中具有操作系统指标选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/overview-os-metrics.png)


## 数据库负载图表
<a name="performance-insights-overview-db-load-chart"></a>

**数据库负载**图表显示数据库负载与**最大 vCPU** 线表示的实例容量的比较情况。预设情况下，堆叠折线图将以每单位时间的平均活动会话数表示数据库负载。数据库负载按等待状态进行切片（分组）。

![\[数据库负载图表，其中显示了随时间推移的平均活动会话数，在接近末尾时出现 CPU 使用率激增。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/database-load.png)


**按维度切片的数据库负载**  
您可以选择按任何受支持维度分组的活动会话显示负载。下图显示了 Amazon DocumentDB 实例的维度。

![\[图表，其中显示了数据库负载，下拉列表中显示了各种“切片依据”选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/database-load-sliced.png)


**维度项目的数据库负载详细信息**  
要查看维度中数据库负载项目的详细信息，请将光标悬停在相应项目名称上。下图显示了查询语句的详细信息。

![\[条形图，其中显示了数据库负载，将鼠标悬停在项目名称上时会显示其他详细信息。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/database-load-details.png)


要在图例中查看任何项目在选定时间段内的详细信息，请将鼠标悬停在相应项目上。

![\[条形图，其中显示了数据库负载，将鼠标悬停在条形上时会显示其他详细信息。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/database-load-hover.png)


## 主要维度表
<a name="performance-insights-overview-top-dimensions"></a>

**主要维度表**将按不同的维度切割数据库负载。维度是数据库负载不同特征的类别或“切片依据”。如果维度为查询，则**主要查询**显示了对数据库负载影响最大的查询语句。

请选择以下任何一个维度选项卡。

![\[“排名靠前的查询维度”选项卡，其中显示了两个排名靠前的查询。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/top-dimensions.png)


下表简要说明了每个选项卡。


| 选项卡 | 说明 | 
| --- | --- | 
|  主要等待  |   数据库后端正在等待的事件  | 
|  主要查询  |  当前正在运行的查询语句  | 
|  主要主机  |  所连接客户端的主机 IP 和端口  | 
|  主要数据库  |  客户端所连接的数据库的名称  | 
|  主要应用程序  |  连接到数据库的应用程序的名称  | 

要了解如何使用**主要查询**选项卡分析查询，请参阅 [主要查询选项卡概览](performance-insights-top-queries.md)。

# 打开 Performance Insights 控制面板
<a name="performance-insights-dashboard-opening"></a>

**要在 AWS 管理控制台中查看 Performance Insights 控制面板，请使用以下步骤：**

1. 打开 Performance Insights 控制台[https://console.aws.amazon.com/docdb/](https://console.aws.amazon.com/docdb/home#performance-insights)。

1. 选择一个数据库实例。将为该 Amazon DocumentDB 实例显示 Performance Insights 控制面板。

   对于启用 Performance Insights 的 Amazon DocumentDB 实例，您还可以通过选择实例列表中的**会话**项目来访问控制面板。在**当前活动**下，**会话**项目显示在过去五分钟内平均活跃会话中的数据库负载。条形图显示负载量。当条形图为空时，实例处于空闲状态。随着负载的增加，条形图会以蓝色填充。当负载超过实例类上虚拟 CPUs (vCPUs) 的数量时，条形变为红色，表示存在潜在的瓶颈。  
![\[“集群”页面，其中显示了 Amazon DocumentDB 区域集群以及每个集群实例的 CPU 和当前活动。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/opening-clusters.png)

1. （可选）通过选择右上角的按钮来选择不同的时间间隔。例如，要将间隔更改为 1 小时，请选择 **1 小时**。  
![\[时间间隔按钮范围从五分钟到一周不等。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/opening-time.png)

   在以下屏幕截图中，数据库负载间隔为 1 小时。  
![\[条形图，其中显示了以平均活动会话数衡量的数据库负载。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/opening-db-load.png)

1. 要自动刷新数据，请启用**自动刷新**。  
![\[“自动刷新”按钮已启用，显示在各时间间隔按钮旁边。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/opening-auto-refresh.png)

   Performance Insights 控制面板自动刷新新的数据。刷新速率取决于所显示的数据量：
   + 5 分钟则每 5 秒刷新一次。
   + 1 小时则每分钟刷新一次。
   + 5 小时则每分钟刷新一次。
   + 每 5 分钟刷新 24 小时一次。
   + 每小时刷新一周一次。

# 通过等待状态分析数据库负载
<a name="performance-insights-analyzing-db-load"></a>

如果**数据库负载（DB 负载）**图表显示了一个瓶颈，您可以找出负载的来源。为此，请查看**数据库负载**图表下方的主要负载项目。选择特定项目 (如查询或应用) 以深入了解该项目并查看有关该项目的详细信息。

按等待状态和主要查询分组的数据库负载通常可以提供对性能问题的最深入了解。按等待状态分组的数据库负载显示了数据库中是否存在任何资源瓶颈或并发瓶颈。在这种情况下，“主要负载项目”表的**主要查询**选项卡显示了增大该负载的查询。

诊断性能问题的典型工作流程如下：

1. 查看**数据库负载**图表并了解是否存在数据库负载的事件越过了 **Max CPU** 线。

1. 如果有，请查看**数据库负载**图表并确定负主要责任的等待状态。

1. 通过以下方式确定导致负载的摘要查询：查看“主要负载项目”表上的**主要查询**选项卡中的哪个查询对于导致这些等待状态所起的作用最大。可通过 **按等待状态排列的负载 (AAS)** 列加以识别。

1. 在**主要查询**选项卡中选择这些摘要查询之一以展开它并查看它包含的子查询。

您还可以分别选择**热门主机**或**热门应用程序**来查看哪些主机或应用程序造成的负载最大。应用程序名称在 Amazon DocumentDB 实例的连接字符串中指定。`Unknown` 表示未指定应用程序字段。

例如，在下面的控制面板中，**CPU** 等待状态占大部分数据库负载。选择**主要查询**下的排名靠前的查询会将数据库负载图表的范围限定为重点关注选择查询贡献的最大负载。

![\[数据库负载图表，其中显示了 CPU 使用率峰值。相应的“排名靠前的查询”选项卡显示了对等待状态影响最大的查询。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/db-load-1.png)


![\[数据库负载图表，其中显示了对等待状态影响最大的查询的 CPU 使用率峰值。相应的“排名靠前的查询”选项卡显示了该查询的子查询。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/db-load-2.png)


# 主要查询选项卡概览
<a name="performance-insights-top-queries"></a>

原定设置情况下，**主要查询**选项卡将显示对数据库负载影响最大的 25 个 SQL 查询。您可以分析查询文本，帮助调整您的查询。

**Topics**
+ [查询摘要](#performance-insights-top-queries-digests)
+ [按等待状态排列的负载 (AAS)](#performance-insights-top-queries-aas)
+ [查看详细的查询信息](#performance-insights-top-queries-query-info)
+ [访问语句查询文本](#performance-insights-top-queries-accessing-text)
+ [查看和下载语句查询文本](#performance-insights-top-queries-viewing-downloading)

## 查询摘要
<a name="performance-insights-top-queries-digests"></a>

*查询摘要*是多个结构上相似但可能具有不同文本值的实际查询的组合。摘要用问号替换硬编码值。例如，查询摘要可能如下所示：

```
{"find":"customerscollection","filter":{"FirstName":"?"},"sort":{"key":{"$numberInt":"?"}},"limit":{"$numberInt":"?"}}
```

此摘要可能包含以下子查询：

```
{"find":"customerscollection","filter":{"FirstName":"Karrie"},"sort":{"key":{"$numberInt":"1"}},"limit":{"$numberInt":"3"}}
{"find":"customerscollection","filter":{"FirstName":"Met"},"sort":{"key":{"$numberInt":"1"}},"limit":{"$numberInt":"3"}}
{"find":"customerscollection","filter":{"FirstName":"Rashin"},"sort":{"key":{"$numberInt":"1"}},"limit":{"$numberInt":"3"}}
```

要查看摘要中的文字查询语句，请选择查询，然后选择加号 (`+`)。在下面的屏幕截图中，选定的查询是摘要。

![\[“排名靠前的查询”表，显示了扩展查询摘要，其中已选择一个子查询。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/top-queries-literal.png)


**注意**  
查询摘要将相似的查询语句进行分组，但不会编辑敏感信息。

## 按等待状态排列的负载 (AAS)
<a name="performance-insights-top-queries-aas"></a>

在**主要查询**中，**按等待状态排列的负载 (AAS)** 列说明了与每个主要负载项目关联的数据库负载的百分比。此列按当前在**数据库负载图表**中选择的分组方式反映该项目的负载。例如，您可以按等待状态对**数据库负载**图表进行分组。在这种情况下，系统将对 **DB Load by Waits (按等待状态排列的数据库负载)** 栏进行大小调整、分段和颜色编码，以显示该查询在导致给定等待状态方面所起的作用大小，它还会显示哪些等待状态正在影响选定的查询。

![\[条形图，其中显示了按照 CPU、IO 和锁存等待状态分组的数据库负载。相应的表显示了基于按等待状态排列的负载的排名靠前的查询。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/top-queries-aas.png)


## 查看详细的查询信息
<a name="performance-insights-top-queries-query-info"></a>

在**主要查询**表中，您可以打开一条*摘要语句*以查看其信息。信息将显示在底部窗格中。

![\[“排名靠前的查询”表，其中显示了所选的查询语句，并在下方显示了其查询信息。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/top-queries-detailed.png)


以下类型的标识符 (IDs) 与查询语句相关联：

1. **支持查询 ID**：查询 ID 的哈希值。此值仅用于在使用 Support 时引用 AWS 查询 ID。 AWS Support 无法访问您的实际查询 IDs 和查询文本。

1. **支持摘要 ID**：摘要 ID 的哈希值。此值仅用于在使用 Support 时引用摘要 ID。 AWS AWS Support 无法访问您的实际摘要 IDs 和查询文本。

## 访问语句查询文本
<a name="performance-insights-top-queries-accessing-text"></a>

原定设置情况下，**主要查询**表中的每行为每条查询语句显示 500 字节的查询文本。当摘要语句超过 500 字节时，可通过在 Performance Insights 控制面板中打开该语句来查看更多文本。在这种情况下，显示的查询的最大长度为 1 KB。如果查看完整的查询语句，也可以选择**下载**。

## 查看和下载语句查询文本
<a name="performance-insights-top-queries-viewing-downloading"></a>

在 Performance Insights 控制面板中，您可以查看或下载查询文本。

**在 Performance Insights 控制面板中查看更多查询文本**

1. 打开亚马逊 DocumentDB 控制台，网址为：[https://console.aws.amazon.com/docdb/](https://console.aws.amazon.com/docdb/)

1. 在导航窗格中，选择**性能详情**。

1. 选择一个数据库实例。将为该数据库实例显示 Performance Insights 控制面板。

   具有大于 500 字节的文本的查询语句如下图所示。  
![\[“排名靠前的查询”表已选择子查询。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/top-queries-statement.png)

1. 检查查询信息部分以查看更多的查询文本。  
![\[“查询信息”部分，其中显示了所选查询的完整文本。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/top-queries-query-text.png)

Performance Insights 控制面板可以为每个完整的查询语句最多显示 1 KB。

**注意**  
要复制或下载查询语句，请禁用弹出窗口阻止程序。

# 放大数据库负载图表
<a name="performance-insights-zoom-db-load"></a>

您可以使用 Performance Insights 用户界面的其他功能来帮助分析性能数据。

**Click-and-Drag 放大**  
在 Performance Insights 界面中，您可以选择负载图表的一小部分并放大细节。

![\[条形图，显示了数据库负载，其中一部分突出显示以供放大查看。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/pi-zoom-1.png)


要放大负载图表的一部分，请选择开始时间并拖动到所需时间段的结尾。执行该操作时，所选区域将突出显示。释放鼠标时，负载图表上的所选区域将放大，并重新计算**主要*项目***表。

![\[数据库负载条形图，其中显示了放大部分，下方是相应的“排名靠前的等待”表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/pi-zoom-2.png)


# 使用 Performance Insights API 检索指标
<a name="performance-insights-metrics"></a>

启用 Performance Insights 后，API 将提供实例性能的可见性。Ama CloudWatch zon Logs 为 AWS 服务的销售监控指标提供了权威来源。

Performance Insights 提供了按平均活动会话 (AAS) 衡量的数据库负载的特定于域的视图。对 API 使用者而言，此指标看起来像是二维时间序列数据集。数据的时间维度提供所查询时间范围的每个时间点的数据库负载数据。每个时间点将分解与所请求维度相关的整体负载，如相应时间点测量的 `Query`、`Wait-state`、`Application` 或 `Host`。

Amazon DocumentDB Performance Insights 用于监控您的 Amazon DocumentDB 数据库实例，使您可以分析数据库性能和排查数据库性能问题。查看 Performance Insights 数据的一种方法是在 AWS 管理控制台中。Performance Insights 还提供公有 API，以便您可以查询自己的数据。您可以使用 API 来执行以下操作：
+ 将数据卸载到数据库中
+ 将 Performance Insights 数据添加到现有监控控制面板
+ 构建监控工具

要使用 Performance Insights API，请在您的 Amazon DocumentDB 实例之一上启用 Performance Insights。有关启用 Performance Insights 的信息，请参阅 [启用和禁用 Performance Insights](performance-insights-enabling.md)。有关性能详情 API 的更多信息，请参阅[性能详情 API 参考](https://docs.aws.amazon.com/performance-insights/latest/APIReference/Welcome.html)。

Performance Insights API 提供以下操作。


****  

|  Performance Insights 操作  |  AWS CLI 命令  |  说明  | 
| --- | --- | --- | 
|  [https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_DescribeDimensionKeys.html](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_DescribeDimensionKeys.html)  |  [https://docs.aws.amazon.com/cli/latest/reference/pi/describe-dimension-keys.html](https://docs.aws.amazon.com/cli/latest/reference/pi/describe-dimension-keys.html)  |  对于特定的时间段，检索指标的前 N 个维度键。  | 
|  [https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_GetDimensionKeyDetails.html](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_GetDimensionKeyDetails.html)  |  [https://docs.aws.amazon.com/cli/latest/reference/pi/get-dimension-key-details.html](https://docs.aws.amazon.com/cli/latest/reference/pi/get-dimension-key-details.html)  |  检索数据库实例或数据来源的指定维度组的属性。例如，如果您指定了查询 ID，并且有维度详细信息，则 `GetDimensionKeyDetails` 将检索与此 ID 关联的维度 `db.query.statement` 的全文。此操作很有用，因为 `GetResourceMetrics` 和 `DescribeDimensionKeys` 不支持检索大型查询语句文本。  | 
| [GetResourceMetadata](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_GetResourceMetadata.html) |  [https://docs.aws.amazon.com/cli/latest/reference/pi/get-resource-metadata.html](https://docs.aws.amazon.com/cli/latest/reference/pi/get-resource-metadata.html)  |  检索不同功能的元数据。例如，元数据可以表明特定数据库实例上的某个功能已打开或关闭。  | 
|  [https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_GetResourceMetrics.html](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_GetResourceMetrics.html)  |  [https://docs.aws.amazon.com/cli/latest/reference/pi/get-resource-metrics.html](https://docs.aws.amazon.com/cli/latest/reference/pi/get-resource-metrics.html)  |  检索一组数据来源在一段时间内的 Performance Insights 指标。您可以提供特定维度组和维度，并为每个组提供聚合和筛选条件。  | 
| [ListAvailableResourceDimensions](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_ListAvailableResourceDimensions.html) |  [https://docs.aws.amazon.com/cli/latest/reference/pi/list-available-resource-dimensions.html](https://docs.aws.amazon.com/cli/latest/reference/pi/list-available-resource-dimensions.html)  |  检索特定实例上每个特定指标类型可查询的维度。  | 
| [ListAvailableResourceMetrics](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_ListAvailableResourceMetrics.html) |  [https://docs.aws.amazon.com/cli/latest/reference/pi/list-available-resource-metrics.html](https://docs.aws.amazon.com/cli/latest/reference/pi/list-available-resource-metrics.html)  |  检索指定指标类型的所有可用指标，指定数据库实例可用该指标进行查询。  | 

**Topics**
+ [AWS CLI 获取性能见解](#performance-insights-metrics-CLI)
+ [检索时间序列指标](#performance-insights-metrics-time-series)
+ [AWS CLI 性能 Insights 的示例](#performance-insights-metrics-api-examples)

## AWS CLI 获取性能见解
<a name="performance-insights-metrics-CLI"></a>

您可以使用 AWS CLI查看 Performance Insights 数据。可以通过在命令行上输入以下内容来查看 Performance Insights 的 AWS CLI 命令的帮助。

```
aws pi help
```

如果您尚未 AWS CLI 安装，请参阅*AWS CLI 用户指南*中的[安装 AWS 命令行界面](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)，了解有关安装命令行界面的信息。

## 检索时间序列指标
<a name="performance-insights-metrics-time-series"></a>

`GetResourceMetrics` 操作从 Performance Insights 数据中检索一个或多个时间序列指标。`GetResourceMetrics` 需要指标和时间段，并返回包含数据点列表的响应。

例如， AWS 管理控制台 用于`GetResourceMetrics`填充 “**计数器指标**” 图表和 “**数据库负载**” 图表，如下图所示。

![\[“Counter Metrics (计数器指标)”和“Database Load (数据库负载)”图表\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/perf-insights-api-charts.png)


`GetResourceMetrics` 返回的所有指标都是标准的时间序列指标，但 `db.load` 除外。此指标显示在 **Database Load (数据库负载)** 图表中。`db.load` 指标不同于其他时间序列指标，因为您可以将它分为称为*维度*的子组件。在上图中，按组成 `db.load` 的等待状态对 `db.load` 进行细分和分组。

**注意**  
`GetResourceMetrics` 也可以返回 `db.sampleload` 指标，但 `db.load` 指标在大多数情况下是合适的。

有关 `GetResourceMetrics` 返回的计数器指标的信息，请参阅[Performance Insights 的计数器指标](performance-insights-counter-metrics.md)。

指标支持以下计算：
+ 平均值：指标在一段时间内的平均值。在指标名称后面附加 `.avg`。
+ 最小值：指标在一段时间内的最小值。在指标名称后面附加 `.min`。
+ 最大值：指标在一段时间内的最大值。在指标名称后面附加 `.max`。
+ 总计：指标值在一段时间内的总计。在指标名称后面附加 `.sum`。
+ 样本数：在一段时间内收集指标的次数。在指标名称后面附加 `.sample_count`。

例如，假定在 300 秒（5 分钟）时段内收集指标，并且每分钟收集一次指标。各分钟的值为 1、2、3、4 和 5。在本例中，返回以下计算：
+ 平均值：3
+ 最小值：1
+ 最大值：5
+ 总计：15
+ 样本数：5

有关使用该`get-resource-metrics` AWS CLI 命令的信息，请参见[https://docs.aws.amazon.com/cli/latest/reference/pi/get-resource-metrics.html](https://docs.aws.amazon.com/cli/latest/reference/pi/get-resource-metrics.html)。

对于 `--metric-queries` 选项，请指定一个或多个要获取其结果的查询。每个查询包括必需的 `Metric` 和可选的 `GroupBy` 和 `Filter` 参数。以下是 `--metric-queries` 选项规范的示例。

```
{
   "Metric": "string",
   "GroupBy": {
     "Group": "string",
     "Dimensions": ["string", ...],
     "Limit": integer
   },
   "Filter": {"string": "string"
     ...}
```

## AWS CLI 性能 Insights 的示例
<a name="performance-insights-metrics-api-examples"></a>

以下示例说明了如何使用 Performance Insights 的。 AWS CLI 

**Topics**
+ [检索计数器指标](#performance-insights-metrics-api-examples.CounterMetrics)
+ [检索首要等待状态的数据库负载平均值](#performance-insights-metrics-api-examples.DBLoadAverage)
+ [检索主要查询的数据库负载平均值](#performance-insights-metrics-api-examples.topquery)
+ [检索按查询筛选的数据库负载平均值](#performance-insights-metrics-api-examples.DBLoadAverageByQuery)

### 检索计数器指标
<a name="performance-insights-metrics-api-examples.CounterMetrics"></a>

以下屏幕截图显示 AWS 管理控制台中的两个计数器指标图表。

![\[计数器指标图表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/performance-insights/perf-insights-api-counters-charts.png)


以下示例显示如何收集 AWS 管理控制台 用于生成两个计数器指标图表的相同数据。

对于 Linux、macOS 或 Unix：

```
aws pi get-resource-metrics \
   --service-type DOCDB \
   --identifier db-ID \
   --start-time 2022-03-13T8:00:00Z \
   --end-time   2022-03-13T9:00:00Z \
   --period-in-seconds 60 \
   --metric-queries '[{"Metric": "os.cpuUtilization.user.avg"  },
                      {"Metric": "os.cpuUtilization.idle.avg"}]'
```

对于 Windows：

```
aws pi get-resource-metrics ^
   --service-type DOCDB ^
   --identifier db-ID ^
   --start-time 2022-03-13T8:00:00Z ^
   --end-time   2022-03-13T9:00:00Z ^
   --period-in-seconds 60 ^
   --metric-queries '[{"Metric": "os.cpuUtilization.user.avg"  },
                      {"Metric": "os.cpuUtilization.idle.avg"}]'
```

还可以通过为 `--metrics-query` 选项指定文件来使命令更易于读取。以下示例为该选项使用名为 query.json 的文件。此文件具有以下内容。

```
[
    {
        "Metric": "os.cpuUtilization.user.avg"
    },
    {
        "Metric": "os.cpuUtilization.idle.avg"
    }
]
```

运行以下命令来使用此文件。

对于 Linux、macOS 或 Unix：

```
aws pi get-resource-metrics \
   --service-type DOCDB \
   --identifier db-ID \
   --start-time 2022-03-13T8:00:00Z \
   --end-time   2022-03-13T9:00:00Z \
   --period-in-seconds 60 \
   --metric-queries file://query.json
```

对于 Windows：

```
aws pi get-resource-metrics ^
   --service-type DOCDB ^
   --identifier db-ID ^
   --start-time 2022-03-13T8:00:00Z ^
   --end-time   2022-03-13T9:00:00Z ^
   --period-in-seconds 60 ^
   --metric-queries file://query.json
```

上一个示例为各选项指定了以下值：
+ `--service-type`：`DOCDB` 适用于 Amazon DocumentDB
+ `--identifier`：数据库实例的资源 ID
+ `--start-time` 和 `--end-time`：要查询的期间的 ISO 8601 `DateTime` 值，支持多种格式

它查询一小时时间范围：
+ `--period-in-seconds`：对于每分钟查询来说为 `60`
+ `--metric-queries`：两个查询的数组，每个查询只用于一个指标。

  指标名称使用点在有用的类别中分类指标，最后一个元素是函数。在示例中，对于每个查询来说，此函数是 `avg`。与 Amazon 一样 CloudWatch，支持的函数有`min``max`、`total`、和`avg`。

响应类似于以下内容。

```
{
    "AlignedStartTime": "2022-03-13T08:00:00+00:00",
    "AlignedEndTime": "2022-03-13T09:00:00+00:00",
    "Identifier": "db-NQF3TTMFQ3GTOKIMJODMC3KQQ4",
    "MetricList": [
        {
            "Key": {
                "Metric": "os.cpuUtilization.user.avg"
            },
            "DataPoints": [
                {
                    "Timestamp": "2022-03-13T08:01:00+00:00", //Minute1
                    "Value": 3.6
                },
                {
                    "Timestamp": "2022-03-13T08:02:00+00:00", //Minute2
                    "Value": 2.6
                },
                //.... 60 datapoints for the os.cpuUtilization.user.avg metric
        {
            "Key": {
                "Metric": "os.cpuUtilization.idle.avg"
            },
            "DataPoints": [
                {
                    "Timestamp": "2022-03-13T08:01:00+00:00",
                    "Value": 92.7
                },
                {
                    "Timestamp": "2022-03-13T08:02:00+00:00",
                    "Value": 93.7
                },
                //.... 60 datapoints for the os.cpuUtilization.user.avg metric 
            ]
        }
    ] //end of MetricList
} //end of response
```

响应具有 `Identifier`、`AlignedStartTime` 和 `AlignedEndTime`。但 `--period-in-seconds` 值为 `60`，开始和结束时间已与分钟对齐。如果 `--period-in-seconds` 为 `3600`，则开始和结束时间已与小时对齐。

响应中的 `MetricList` 具有许多条目，每个条目具有 `Key` 和 `DataPoints` 条目。每个 `DataPoint` 具有 `Timestamp` 和 `Value`。每个 `Datapoints` 列表具有 60 个数据点，因为查询针对一小时内的每分钟数据，具有 `Timestamp1/Minute1`、`Timestamp2/Minute2` 等，一直到 `Timestamp60/Minute60`。

因为查询用于两个不同的计数器指标，响应 `MetricList` 中有两个元素。

### 检索首要等待状态的数据库负载平均值
<a name="performance-insights-metrics-api-examples.DBLoadAverage"></a>

以下示例与 AWS 管理控制台 用于生成堆叠面积折线图的查询相同。此示例检索按前七个等待状态划分负载的最后一个小时的 `db.load.avg`。命令与 [检索计数器指标](#performance-insights-metrics-api-examples.CounterMetrics) 中的命令相同。不过，query.json 文件具有以下内容。

```
[
    {
        "Metric": "db.load.avg",
        "GroupBy": { "Group": "db.wait_state", "Limit": 7 }
    }
]
```

运行以下命令。

对于 Linux、macOS 或 Unix：

```
aws pi get-resource-metrics \
   --service-type DOCDB \
   --identifier db-ID \
   --start-time 2022-03-13T8:00:00Z \
   --end-time   2022-03-13T9:00:00Z \
   --period-in-seconds 60 \
   --metric-queries file://query.json
```

对于 Windows：

```
aws pi get-resource-metrics ^
   --service-type DOCDB ^
   --identifier db-ID ^
   --start-time 2022-03-13T8:00:00Z ^
   --end-time   2022-03-13T9:00:00Z ^
   --period-in-seconds 60 ^
   --metric-queries file://query.json
```

此示例指定指标 `db.load.avg` 和前七个等待状态的 `GroupBy`。有关此示例有效值的详细信息，请参阅 Performance *Insights API 参考[DimensionGroup](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_DimensionGroup.html)中的。*

响应类似于以下内容。

```
{
    "AlignedStartTime": "2022-04-04T06:00:00+00:00",
    "AlignedEndTime": "2022-04-04T06:15:00+00:00",
    "Identifier": "db-NQF3TTMFQ3GTOKIMJODMC3KQQ4",
    "MetricList": [
        {//A list of key/datapoints
            "Key": {
                //A Metric with no dimensions. This is the total db.load.avg
                "Metric": "db.load.avg"
            },
            "DataPoints": [
                //Each list of datapoints has the same timestamps and same number of items
                {
                    "Timestamp": "2022-04-04T06:01:00+00:00",//Minute1
                    "Value": 0.0
                },
                {
                    "Timestamp": "2022-04-04T06:02:00+00:00",//Minute2
                    "Value": 0.0
                },
                //... 60 datapoints for the total db.load.avg key
                ]
        },
        {
            "Key": {
                //Another key. This is db.load.avg broken down by CPU
                "Metric": "db.load.avg",
                "Dimensions": {
                    "db.wait_state.name": "CPU"
                }
            },
            "DataPoints": [
                {
                    "Timestamp": "2022-04-04T06:01:00+00:00",//Minute1
                    "Value": 0.0
                },
                {
                    "Timestamp": "2022-04-04T06:02:00+00:00",//Minute2
                    "Value": 0.0
                },
                //... 60 datapoints for the CPU key
            ]
        },//... In total we have 3 key/datapoints entries, 1) total, 2-3) Top Wait States
    ] //end of MetricList
} //end of response
```

在此响应中，`MetricList` 中有三个条目。有一个有关总 `db.load.avg` 的条目，还有三个条目，其中每个条目关于按前三个等待状态之一划分的 `db.load.avg`。由于具有分组维度（与第一个示例不同），所以必须具有一个用于每个指标分组的键。不能像在基本计数器指标使用案例中那样每个指标只有一个键。

### 检索主要查询的数据库负载平均值
<a name="performance-insights-metrics-api-examples.topquery"></a>

以下示例按前 10 个查询语句对 `db.wait_state` 进行分组。有两个不同的查询语句组：
+ `db.query`：完整的查询语句，例如 `{"find":"customers","filter":{"FirstName":"Jesse"},"sort":{"key":{"$numberInt":"1"}}}`
+ `db.query_tokenized`：令牌化的查询语句，例如 `{"find":"customers","filter":{"FirstName":"?"},"sort":{"key":{"$numberInt":"?"}},"limit":{"$numberInt":"?"}}`

在分析数据库性能时，将仅参数不同的查询语句视为一个逻辑项目很有用。因此，您在查询时可以使用 `db.query_tokenized`。不过，尤其在您对 `explain()` 感兴趣时，查看带参数的完整查询语句会更有用。令牌化和完整查询之间存在父-子关系，多个完整查询（子级）分组在同一令牌化查询（父级）下。

此示例中的命令类似于 [检索首要等待状态的数据库负载平均值](#performance-insights-metrics-api-examples.DBLoadAverage) 中的命令。不过，query.json 文件具有以下内容。

```
[
    {
        "Metric": "db.load.avg",
        "GroupBy": { "Group": "db.query_tokenized", "Limit": 10 }
    }
]
```

下面的示例使用了 `db.query_tokenized`。

对于 Linux、macOS 或 Unix：

```
aws pi get-resource-metrics \
   --service-type DOCDB \
   --identifier db-ID \
   --start-time 2022-03-13T8:00:00Z \
   --end-time   2022-03-13T9:00:00Z \
   --period-in-seconds 3600 \
   --metric-queries file://query.json
```

对于 Windows：

```
aws pi get-resource-metrics ^
   --service-type DOCDB ^
   --identifier db-ID ^
   --start-time 2022-03-13T8:00:00Z ^
   --end-time   2022-03-13T9:00:00Z  ^
   --period-in-seconds 3600 ^
   --metric-queries file://query.json
```

此示例查询时间超过 1 小时，其中 1 分钟 period-in-seconds。

此示例指定指标 `db.load.avg` 和前七个等待状态的 `GroupBy`。有关此示例有效值的详细信息，请参阅 Performance *Insights API 参考[DimensionGroup](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_DimensionGroup.html)中的。*

响应类似于以下内容。

```
{
    "AlignedStartTime": "2022-04-04T06:00:00+00:00",
    "AlignedEndTime": "2022-04-04T06:15:00+00:00",
    "Identifier": "db-NQF3TTMFQ3GTOKIMJODMC3KQQ4",
    "MetricList": [
        {//A list of key/datapoints
            "Key": {
                "Metric": "db.load.avg"
            },
            "DataPoints": [
                //... 60 datapoints for the total db.load.avg key
                ]
        },
               {
            "Key": {//Next key are the top tokenized queries
                "Metric": "db.load.avg",
                "Dimensions": {
                    "db.query_tokenized.db_id": "pi-1064184600",
                    "db.query_tokenized.id": "77DE8364594EXAMPLE",
                    "db.query_tokenized.statement": "{\"find\":\"customers\",\"filter\":{\"FirstName\":\"?\"},\"sort\":{\"key\":{\"$numberInt\":\"?\"}},\"limit\"
:{\"$numberInt\":\"?\"},\"$db\":\"myDB\",\"$readPreference\":{\"mode\":\"primary\"}}"
                }
            },
            "DataPoints": [
            //... 60 datapoints 
            ]
        },
        // In total 11 entries, 10 Keys of top tokenized queries, 1 total key 
    ] //End of MetricList
} //End of response
```

此响应的 `MetricList` 中具有 11 个条目（1 个总计，10 个首要令牌化查询），其中每个条目具有 24 个每小时 `DataPoints`。

对于令牌化查询，每个维度列表中具有三个条目：
+ `db.query_tokenized.statement`：令牌化的查询语句。
+ `db.query_tokenized.db_id `：Performance Insights 为您生成的合成 ID。此示例返回 `pi-1064184600` 合成 ID。
+ `db.query_tokenized.id`：Performance Insights 中的查询的 ID。

  在中 AWS 管理控制台，此 ID 被称为 Support ID。之所以这样命名，是因为 ID 是 Su AWS pport 可以检查的数据，以帮助您解决数据库问题。 AWS 非常重视数据的安全性和隐私性，几乎所有数据都使用您的数据加密存储 AWS KMS key。因此，里面没有人 AWS 可以查看这些数据。在上一个示例中，`tokenized.statement` 和 `tokenized.db_id` 都进行了加密存储。如果您的数据库出现问题，Su AWS pport 可以通过引用 Support ID 来帮助您。

在查询时，在 `Group` 中指定 `GroupBy` 可能很方便。不过，要更精细地控制返回的数据，请指定维度列表。例如，如果所需的所有内容是 `db.query_tokenized.statement`，则可将 `Dimensions` 属性添加到 query.json 文件中。

```
[
    {
        "Metric": "db.load.avg",
        "GroupBy": {
            "Group": "db.query_tokenized",
            "Dimensions":["db.query_tokenized.statement"],
            "Limit": 10
        }
    }
]
```

### 检索按查询筛选的数据库负载平均值
<a name="performance-insights-metrics-api-examples.DBLoadAverageByQuery"></a>

此示例中的相应 API 查询类似于 [检索主要查询的数据库负载平均值](#performance-insights-metrics-api-examples.topquery) 中的命令。不过，query.json 文件具有以下内容。

```
[
 {
        "Metric": "db.load.avg",
        "GroupBy": { "Group": "db.wait_state", "Limit": 5  }, 
        "Filter": { "db.query_tokenized.id": "AKIAIOSFODNN7EXAMPLE" }
    }
]
```

在此响应中，所有值均根据 query.json 文件中指定的标记化查询 AKIAIOSFODNN7示例的贡献进行过滤。键还可能遵循与没有筛选条件的查询不同的顺序，因为前五个等待状态影响了筛选的查询。

# Performance Insights 的亚马逊 CloudWatch 指标
<a name="performance-insights-cloudwatch"></a>

Performance Insights 会自动向亚马逊发布指标 CloudWatch。可以从 Performance Insights 中查询相同的数据，但是将指标包含在里面可以 CloudWatch 轻松添加 CloudWatch 警报。还可以轻松地将指标添加到现有 CloudWatch 控制面板中。


| 指标 | 说明 | 
| --- | --- | 
|  DBLoad  |  Amazon DocumentDB 的活动会话数。通常，您需要活动会话的平均数量数据。在 Performance Insights 中，作为 `db.load.avg` 查询此数据。  | 
|  DBLoadCPU  |  等待状态类型为 CPU 的活动会话的数量。在 Performance Insights 中，作为 `db.load.avg` 查询此数据，按等待状态类型 `CPU` 进行筛选。  | 
|  DBLoad非 CPU  |  等待状态类型不为 CPU 的活动会话的数量。  | 

**注意**  
 CloudWatch 仅当数据库实例有负载时，才会将这些指标发布到。

您可以使用 CloudWatch 控制台 AWS CLI、或 CloudWatch API 检查这些指标。

例如，您可以通过运行[get-metric-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html)命令来获取`DBLoad`指标的统计信息。

```
aws cloudwatch get-metric-statistics \
    --region ap-south-1 \
    --namespace AWS/DocDB \
    --metric-name DBLoad  \
    --period 360 \
    --statistics Average \
    --start-time 2022-03-14T8:00:00Z \
    --end-time 2022-03-14T9:00:00Z \
    --dimensions Name=DBInstanceIdentifier,Value=documentdbinstance
```

该示例将生成与下类似的输出。

```
{
    "Datapoints": [
        {
            "Timestamp": "2022-03-14T08:42:00Z", 
            "Average": 1.0, 
            "Unit": "None"
        }, 
        {
            "Timestamp": "2022-03-14T08:24:00Z", 
            "Average": 2.0, 
            "Unit": "None"
        }, 
        {
            "Timestamp": "2022-03-14T08:54:00Z", 
            "Average": 6.0, 
            "Unit": "None"
        }, 
        {
            "Timestamp": "2022-03-14T08:36:00Z", 
            "Average": 5.7, 
            "Unit": "None"
        }, 
        {
            "Timestamp": "2022-03-14T08:06:00Z", 
            "Average": 4.0, 
            "Unit": "None"
        }, 
        {
            "Timestamp": "2022-03-14T08:00:00Z", 
            "Average": 5.2, 
            "Unit": "None"
        }
    ], 
    "Label": "DBLoad"
}
```

您可以使用 CloudWatch 控制台中的`DB_PERF_INSIGHTS`指标数学函数来查询 Amazon DocumentDB Performance Insights 计数器指标。`DB_PERF_INSIGHTS` 函数还包括以亚分钟为间隔的 `DBLoad` 指标。您可以对这些指标设置 CloudWatch 警报。有关如何创建警报的更多详细信息，请参阅针对[AWS 数据库中的 Performance Insights 计数器指标创建警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_alarm_database_performance_insights.html)。

有关的更多信息 CloudWatch，请参阅 [Amazon 是什么 CloudWatch？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 在《*亚马逊 CloudWatch 用户指南》*中。

# Performance Insights 的计数器指标
<a name="performance-insights-counter-metrics"></a>

计数器指标是 Performance Insights 控制面板中的操作系统指标。为帮助确定和分析性能问题，您可将计数器指标与数据库负载相关联。

## Performance Insights 操作系统计数器
<a name="performance-insights-counter-metrics-counters"></a>

以下操作系统计数器可用于 Amazon DocumentDB Performance Insights。


| 计数器 | 类型 | 指标 | 
| --- | --- | --- | 
| active | memory | os.memory.active | 
| buffers | memory | os.memory.buffers | 
| cached | memory | os.memory.cached | 
| dirty | memory | os.memory.dirty | 
| free | memory | os.memory.free | 
| inactive | memory | os.memory.inactive | 
| mapped | memory | os.memory.mapped | 
| pageTables | memory | os.memory.pageTables | 
| slab | memory | os.memory.slab | 
| total | memory | os.memory.total | 
| writeback | memory | os.memory.writeback | 
| idle | cpuUtilization | os.cpuUtilization.idle | 
| system | cpuUtilization | os.cpuUtilization.system | 
| total | cpuUtilization | os.cpuUtilization.total | 
| user | cpuUtilization | os.cpuUtilization.user | 
| wait | cpuUtilization | os.cpuUtilization.wait | 
| one | loadAverageMinute | os。 loadAverageMinute.one | 
| fifteen | loadAverageMinute | os。 loadAverageMinute。十五 | 
| five | loadAverageMinute | os。 loadAverageMinute.five | 
| cached | swap | os.swap.cached | 
| free | swap | os.swap.free | 
| in | swap | os.swap.in | 
| out | swap | os.swap.out | 
| total | swap | os.swap.total | 
| rx | network | os.network.rx | 
| tx | network | os.network.tx | 
| num VCPUs | general | os.general.num VCPUs | 