亚马逊AWS官方博客

将 Aurora 和 RDS 的 Performance Insights 迁移至 CloudWatch Database Insights,以获取更全面的数据库监控体验

Amazon Relational Database Service (RDS)、Amazon Aurora(MySQL 兼容版)和 Amazon Aurora(PostgreSQL 兼容版)数据库实例的 Performance Insights 仪表板已经宣布将于 2025 年 11 月 30 日终止支持(End-of-Life)。

在控制台上,您会看到以下提醒:

为确保数据库的监控体验不受影响,请于2025年11月30日前将所有使用Performance Insights付费版切换至CloudWatch Database Insights高级模式。如果您不采取任何行动,则使用Performance Insights的数据库实例将默认使用CloudWatch Database Insights 标准模式。在CloudWatch Database Insights标准模式下,数据历史记录仅会保留 7 天,并且可能无法查看执行计划和慢语句分析等信息。

启用 CloudWatch Database Insights 高级模式

在创建或修改 DB instance/Multi-AZ DB cluster 时,请在 Monitoring -> Database Insights 部分选择高级模式

  1. 数据保留期:设置数据的存储时长。
  2. Amazon KMS 密钥:用于传输中和静态数据的加密。

CloudWatch Database Insights 高级模式概览

CloudWatch Database Insights 高级模式为 Fleet 和 Instance 层面的长期趋势与性能分析提供强大支持。通过统一视图提供全面的数据库监控能力,包含以下核心功能:

  1. 关键指标与日志分析:包括数据库语句执行计划、锁分析、慢查询日志分析等,助力快速定位性能问题。
  2. 重要事件追踪:持续记录数据库关键事件。

CloudWatch Database Insights 高级模式的费用

CloudWatch Database Insights 高级模式的费用主要包含两部分:

  1. 计算资源费用:定价基于受监控数据库所使用的计算资源量。比如针对预置实例,将根据每个实例使用的 vCPU 平均数量按小时计费。
  2. 日志存储费用:基于 CloudWatch Logs 标准存储中保存的数据库日志大小计费。

详情请查阅以下链接:https://www.amazonaws.cn/en/cloudwatch/pricing/

Fleet Health

Fleet Health Dashboard 用于查看多个数据库实例健康状态。它支持通过标签(Tags)、集群(Cluster)等信息筛选所需要监控的数据库实例。该看板的核心功能包括查看 Fleet 中所有数据库实例的数据库负载告警状态;TOP 10 实例的关键指标,如数据库连接数、读写 IOPS、读写延迟等。

Instance Health

Database Instance Dashboard 用于查看单个数据库实例的健康状态,提供多维度的全面监控指标,包括:

– 关键性能指标:数据库负载、SQL 查询效率、锁分析、语句执行计划等。

– 细粒度监控维度:高频 SQL 语句、慢语句、语句分布(客户端主机和登录用户)等。

示例:使用 CloudWatch Database Insights 分析数据库阻塞

在接下来的演示中,我们将模拟一个典型的数据库语句性能问题的场景 – 语句阻塞,然后使用 CloudWatch Database Insights 来检查阻塞细节。

场景:一个长时间运行的事务(写操作)阻塞了其他语句执行。

步骤:

1. 准备测试数据表

-- 创建测试表 
CREATE TABLE test_blocking (
    id SERIAL PRIMARY KEY,
    data TEXT,
    created_at TIMESTAMP DEFAULT NOW()
);

-- 插入测试数据
INSERT INTO test_blocking (data) 
SELECT 'Record ' || n FROM generate_series(1, 100000) AS n;

2. 模拟阻塞(需要多个客户端会话)

会话 1(写操作 – 阻塞头)

-- 开启一个事务但不提交
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    -- 更新操作将获取行锁
    UPDATE test_blocking SET data = 'Blocked by long transaction' WHERE id = 1;

会话 2(写操作 – 被阻塞语句)

-- 批量数据更改
UPDATE test_blocking SET data = 'Blocked by long transaction';
-- 该语句会一直被阻塞直至会话1的事务被提交或者回滚 

接下来我们可以使用 CloudWatch Database Insights来检查查询阻塞的详细信息。锁定树(Lock trees)提供了足够的信息来排查阻塞问题。阻塞链显示了阻塞头的详细信息、被阻塞的语句。

可以自定义视图以显示更多的阻塞信息以更好的了解阻塞的信息。比如阻塞头和被阻塞语句的客户端信息(IP 地址、端口),阻塞的时间,锁等待的具体信息(锁类型,等待时间)等。

根据 Lock trees 提供的详细信息,我们可以了解到阻塞头会话来自于客户端‘pgAdmin 4’,其登录用户名是‘postgres’。该阻塞头会话处于‘空闲’状态(事务尚未提交或回滚),因为它持有独占锁(ExclusiveLock),所以来自‘pgbench’的语句被阻塞。

结束语

数据库的 Performance Insights 看板将在 2025 年 11 月 30 日停止使用,请及时切换使用 CloudWatch Database Insights 高级模式。在这篇博客中,我们介绍了 CloudWatch Database Insights 概述信息,包括定价、Fleet Health 和 Database Health 特性。我们还演示了如何使用它来排查阻塞问题。您可以查看 CloudWatch Database Insights 的官方文章,以获取提供的所有功能的详细信息。

本篇作者

宋运春

西云数据技术客户经理,负责企业级客户的架构、运维治理与优化、技术支持等工作,拥有多年丰富的解决客户实际问题的经验。