

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

# 数据库实例监控
<a name="db-instance-monitoring"></a>

[https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html)是 Amazon RDS 的基本构建块。它是在云中运行的独立数据库环境。对于 MySQL 和 MariaDB 数据库，数据库实例是 my [sqld](https://dev.mysql.com/doc/refman/8.0/en/mysqld.html) 程序，也称为 MySQL 服务器，它包括多个线程和组件，例如 SQL 解析器、查询优化器、 thread/connection 处理程序、系统和状态变量以及一个或多个可插拔存储引擎。每个存储引擎都旨在支持专门的使用案例。默认且推荐使用的存储引擎是 [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html)，它是一个事务性的通用型关系数据库引擎，符合原子性、一致性、隔离性、持久性（ACID）模型。InnoDB 具有[内存结构](https://dev.mysql.com/doc/refman/8.0/en/innodb-in-memory-structures.html)（缓冲池、更改缓冲区、自适应哈希索引、日志缓冲区）以及[磁盘结构](https://dev.mysql.com/doc/refman/8.0/en/innodb-on-disk-structures.html)（表空间、表、索引、撤消日志、重做日志、双写缓冲区文件）。为了确保您的数据库严格遵循 ACID 模型，[InnoDB 存储引擎实施了许多功能](https://dev.mysql.com/doc/refman/8.0/en/mysql-acid.html)来保护您的数据，包括事务、提交、回滚、崩溃恢复、行级别锁定和多版本并发控制（MVCC）。

数据库实例的所有这些内部组件协同工作，有助于将数据的可用性、完整性和安全性维持在预期且令人满意的性能水平。根据您的工作负载，每个组件和功能都可能对 CPU、内存、网络和存储子系统带来相应的资源需求。对特定资源的需求激增超过该资源的预调配容量或软件限制（由配置参数或软件设计决定）时，数据库实例可能会出现性能下降或完全不可用和损坏的情况。因此，必须测量和监控这些内部组件，将其与定义的基准值进行比较，并在监控值偏离预期值时生成提醒。

如前所述，您可以使用不同的[工具](monitoring-tools.md)来监控 MySQL 和 MariaDB 实例。我们建议您使用 Amazon RDS Performance Insight CloudWatch s 和工具进行监控和警报，因为这些工具已与 Amazon RDS 集成，可以收集高分辨率指标，近乎实时地呈现最新的性能信息，并生成警报。

无论您首选哪种监控工具，我们都建议您在 MySQL 和 MariaDB 数据库实例中[开启性能架构](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.EnableMySQL.html)。[性能架构](https://dev.mysql.com/doc/refman/8.0/en/performance-schema.html)是一项可选功能，用于在低级别监控 MySQL 服务器（数据库实例）的运行，旨在最大限度地减轻对数据库整体性能的影响。您可以使用 `performance_schema` 参数管理此功能。虽然此参数是可选的，但您必须使用它来收集高分辨率（每秒一次）的每个 SQL 指标、活跃会话指标、等待事件和其他详细的低级别监控信息，这些信息由 Amazon RDS 性能详情收集。

**Sections**
+ [数据库实例的性能详情指标](db-instance-performance-insights.md)
+ [CloudWatch 数据库实例的指标](db-instance-cloudwatch-metrics.md)
+ [将 Performance Insights CloudWatch](publishing-performance-insights-to-cloudwatch.md)

# 数据库实例的性能详情指标
<a name="db-instance-performance-insights"></a>

性能详情会监控不同类型的指标，如以下各部分所述。

## 数据库负载
<a name="dbload"></a>

数据库负载（`DBLoad`）是性能详情中的一项关键指标，用于衡量数据库中的活动水平。它每秒收集一次，并自动发布到 Amazon CloudWatch。它以平均活跃会话数（AAS）表示数据库实例的活动，即同时运行 SQL 查询的会话数。`DBLoad` 指标与其他时间序列指标不同，因为它可以使用以下五个维度中的任何一个来解释：等待、SQL、主机、用户和数据库。这些维度是 `DBLoad` 指标的子类别。您可以将其用作*切片依据*类别，以表示数据库负载的不同特征。有关我们如何计算数据库负载的详细说明，请参阅 Amazon RDS 文档中的[数据库负载](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html)。

以下屏幕插图显示了性能详情工具。

![\[性能详情工具中的数据库负载\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/database-load.png)


## Dimensions
<a name="dimensions"></a>
+ *等待事件*是数据库会话等待资源或其他操作完成才能继续处理的情况。如果您运行诸如`SELECT * FROM big_table`和之类的 SQL 语句，如果此表比分配的 InnoDB 缓冲池大得多，则您的会话很可能会`wait/io/file/innodb/innodb_data_file`等待等待事件，这些事件是由对数据文件的物理 I/O 操作引起的。等待事件是数据库监控的一个重要维度，因为它们可以指示可能的性能瓶颈。等待事件指示您在会话内运行的 SQL 语句等待时间最长的资源和操作。例如，当数据库活动频繁且事务数量庞大时，会发生 `wait/synch/mutex/innodb/trx_sys_mutex` 事件；当线程获取 InnoDB 缓冲池的锁以访问内存中的页面时，会发生 `wait/synch/mutex/innodb/buf_pool_mutex` 事件。有关所有 MySQL 和 MariaDB 等待事件的信息，请参阅 MySQL 文档中的 [Wait Event Summary Tables](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-wait-summary-tables.html)。要了解如何解释工具名称，请参阅 MySQL 文档中的 [Performance Schema Instrument Naming Conventions](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-instrument-naming.html)。
+ *SQL* 显示哪些 SQL 语句对数据库总负载贡献最大。位于 Amazon RDS 性能详情中**数据库负载**图表下方的**主要维度**表是交互式的。通过单击**按等待状态排列的负载（AAS）**列中的栏，您可以获取与 SQL 语句关联的等待事件的详细列表。当您在列表中选择 SQL 语句时，性能详情会在**数据库负载**图表中显示关联的等待事件，在 **SQL 文本**部分中显示相应的 SQL 语句文本。SQL 统计信息显示在**主要维度**表的右侧。
+ *主机*显示所连接客户端的主机名 此维度可帮助您确定哪些客户端主机正在向数据库发送大部分负载。
+ *用户*按登录数据库的用户对数据库负载进行分组。
+ *数据库*按客户端所连接的数据库的名称对数据库负载进行分组。

## 计数器指标
<a name="counter-metrics"></a>

计数器指标是累积指标，其值只能在数据库实例重启时增加或重置为零。计数器指标的值不能减少到之前的值。这些指标代表一个单调递增的计数器。
+ [原生计数器](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL.Native)是由数据库引擎（而不是由 Amazon RDS）定义的指标。例如：
  + `SQL.Innodb_rows_inserted` 表示插入到 InnoDB 表中的行数。
  + `SQL.Select_scan` 表示完成对第一个表的完整扫描的联接数。
  + `Cache.Innodb_buffer_pool_reads` 表示 InnoDB 引擎无法从缓冲池中检索而必须直接从磁盘读取的逻辑读取次数。
  + `Cache.Innodb_buffer_pool_read_requests` 表示逻辑读取请求的数。

  有关所有原生指标的定义，请参阅 MySQL 文档中的[服务器状态变量](https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html)。
+ [非原生计数器](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL.NonNative)由 Amazon RDS 定义。您可以使用特定的查询来获取这些指标，也可以通过在计算中使用两个或多个原生指标来推导这些指标。非原生计数器指标可以表示延迟、比率或命中率。例如：
  + `Cache.innoDB_buffer_pool_hits` 表示 InnoDB 在不利用磁盘的情况下可以从缓冲池中检索的读取操作数。它是根据原生计数器指标计算得出的，如下所示：

    ```
    db.Cache.Innodb_buffer_pool_read_requests - db.Cache.Innodb_buffer_pool_reads
    ```
  + `IO.innoDB_datafile_writes_to_disk` 表示 InnoDB 数据文件向磁盘写入操作的次数。它只捕获对数据文件的操作，而不是双重写入或重做日志记录写入操作。按如下方式计算：

    ```
    db.IO.Innodb_data_writes - db.IO.Innodb_log_writes - db.IO.Innodb_dblwr_writes
    ```

您可以在性能详情控制面板中直接可视化数据库实例指标。选择**管理指标**，选择**数据库指标**选项卡，然后选择感兴趣的指标，如下图所示。

![\[在性能详情中选择数据库实例指标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/selecting-metrics.png)


选择**更新图表**按钮，以显示您选择的指标，如下图所示。

![\[在性能详情中查看数据库实例指标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/selecting-metrics-results.png)


## SQL 统计数据
<a name="sql-stats"></a>

性能详情会收集与 SQL 查询相关的性能指标，包括查询运行的每一秒以及每次 SQL 调用。通常，性能详情会在语句和摘要级别收集 [SQL 统计数据](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.AnalyzeDBLoad.AdditionalMetrics.MySQL.html)。但是，对于 MariaDB 和 MySQL 数据库实例，统计数据仅在摘要级别收集。
+ 摘要统计数据是所有具有相同模式但最终具有不同文本值的查询的复合指标。摘要用变量替换特定的文本值；例如：

  ```
  SELECT department_id, department_name FROM departments WHERE location_id = ?
  ```
+ 有些指标表示*每秒*处理的每个已解析 SQL 语句的统计数据。例如，`sql_tokenized.stats.count_star_per_sec` 表示每秒调用次数（即 SQL 语句每秒运行的次数）。
+ 性能详情还包括提供 SQL 语句*每次调用*统计数据的指标。例如，`sql_tokenized.stats.sum_timer_wait_per_call` 显示每次调用 SQL 语句的平均延迟（以毫秒为单位）。

SQL 统计数据可在“性能详情”控制面板的**主要维度**表中的**主要 SQL** 选项卡中找到。

![\[SQL 统计数据\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/sql-stats.png)


# CloudWatch 数据库实例的指标
<a name="db-instance-cloudwatch-metrics"></a>

亚马逊 CloudWatch 还包含亚马逊 RDS 自动发布的指标。位于 `AWS/RDS` 命名空间中的指标是*实例级指标*，指的是 Amazon RDS（服务）实例（即在云中运行的独立数据库环境），而不是严格意义上的 [mysqld](https://dev.mysql.com/doc/refman/8.0/en/mysqld.html) 流程中的数据库实例。因此，按照该术语的严格定义，这些[默认指标](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html)中的大多数都属于操作系统指标的类别。示例包括：`CPUUtilization`、`WriteIOPS`、`SwapUsage` 及其他。不过，有一些适用于 MariaDB 和 MySQL 的数据库实例指标：
+ `BinLogDiskUsage`：二进制日志所占的磁盘空间大小。
+ `DatabaseConnections`：连接至数据库实例的客户端网络连接数。
+ `ReplicaLag`：只读副本数据库实例滞后于源数据库实例的时间量。

# 将 Performance Insights CloudWatch
<a name="publishing-performance-insights-to-cloudwatch"></a>

Amazon RDS Performance Insights 监控大部分数据库实例指标和维度，并通过 AWS 管理控制台上的 Performance [Insights 控制面板提供这些指标](https://console.aws.amazon.com/rds/home#performance-insights-v20206:)和维度。此控制面板非常适合数据库问题排查和根本原因分析。但是，无法在性能详情中为与性能相关的指标创建告警。如果要基于 Performance Insights 指标创建警报，则这些指标必须包含在中 CloudWatch。

Performan [ce Insights 自动向发布指标 CloudWatch](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Cloudwatch.html)。您可以从 Performance Insights 中 CloudWatch 查询相同的数据，但是将指标包含在中可以轻松添加 CloudWatch 警报并将指标添加到现有 CloudWatch仪表板中。[计数器](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights_Counters.html)是操作系统和数据库性能指标，例如 `os.memory.free` 或 `db.Locks.Innodb_row_lock_time`。操作系统指标收集取决于“增强监控”设置。如果关闭“增强监控”，则每分钟收集一次操作系统指标。如果开启“增强监控”，则会收集所选时间段内的操作系统指标。有关更多信息，请参阅 Amazon RDS 文档中的[开启和关闭“增强监控”](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.Enabling.html#USER_Monitoring.OS.Enabling.Procedure)。

Performance Insights 允许您将数据库实例的[预配置或自定义指标控制面板导出](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PI_metrics_export_CW.html)到。 CloudWatch您可以将指标仪表板导出为新的仪表板，也可以将其添加到现有 CloudWatch 仪表板中。将 Performance Insights 指标 CloudWatch 控制面板导出到控制面板，可以概述与系统中各种资源相关的指标，例如 EC2 实例、亚马逊弹性文件系统 (Amazon EFS) 资源和弹性负载平衡 (ELB) 资源，以及数据库实例指标，从而统一、全面地了解系统的运行状况。

您可以使用 CloudWatch `DB_PERF_INSIGHTS`指标数学函数根据来自的 Performance Insights 指标查询和创建警报和图表 CloudWatch。要在 Performance Insights 指标上创建警报，请按照[CloudWatch 文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_alarm_database_performance_insights.html)中的说明进行操作。例如，如果您想在数据库实例中的活跃事务总数达到特定阈值时触发告警，请按照该页面上的说明进行操作，使用以下 `DB_PERF_INSIGHTS` 数学表达式，然后选择**应用**：

```
DB_PERF_INSIGHTS('RDS', 'db-BQ2TPYY7HG2GDFC7APMB3BVB3M', 'db.Transactions.active_transactions.avg')
```

其中 `db-BQ2TPYY7HG2GDFC7APMB3BVB3M` 是数据库实例的资源 ID。指定时段（例如，1 分钟）和条件（例如，大于 1000）。要完成告警的创建，请配置告警操作，添加名称和描述，然后预览和创建告警。