如何监控 Amazon RDS 代理连接池并优化数据库连接?
我想监控 Amazon Relational Database Services (Amazon RDS) 代理连接池并优化我的数据库连接。
解决方法
监控 RDS 代理和目标 RDS 数据库的指标
完成以下步骤:
- 打开 Amazon CloudWatch 控制台。
- 在导航窗格中,选择 Metrics(指标),然后选择 All Metrics(所有指标)。
- 在 Browse(浏览)选项卡上,选择 RDS,然后选择 Per-Proxy Metrics(每个代理的指标)。
- 搜索以下指标:
ClientConnections 表示来自您的应用程序的传入连接数。
MaxDatabaseConnectionsAllowed 表示允 RDS 代理允许的最大数据库连接数。
DatabaseConnections 表示 RDS 代理与目标数据库建立的当前连接数。 - 在 Browse(浏览)选项卡上,选择 RDS,然后选择 DBInstanceIdentifier。
- 搜索 DatabaseConnections 指标以获取 RDS 代理与目标数据库建立的连接总数,以及与目标数据库的所有其他连接的总数。
最佳做法是以 1 分钟为粒度查看这些指标,并使用 Sum(总和)统计数据来获取有关连接使用模式的更多详细信息。
查看 RDS 代理日志事件
修改 RDS 代理以启用增强的日志记录,这样您就可以获取高级详细信息,例如开放连接数或关闭连接数。您还可以获取内部操作(如固定和借用)的详细信息。
**注意:**增强的日志记录会在 24 小时后自动关闭。
要查看 RDS 代理日志事件,请完成以下步骤:
- 打开 CloudWatch 控制台。
- 在导航窗格中,选择 Logs(日志),然后选择 Log groups(日志组)。
- 为您的代理 /aws/rds/proxy/ 选择日志组。
- 在 Log Streams(日志流)选项卡上,选择日志流以查看日志事件。
运行 CloudWatch Logs Insights 查询以检测异常
要访问 CloudWatch Logs Insights 中的查询编辑器,请完成以下步骤:
- 打开 CloudWatch 控制台。
- 在导航窗格中,选择 Logs(日志),然后选择 Logs Insights。
使用查询编辑器运行以下查询。在每个查询中,将 prx-000##### 替换为您的代理 ID。
要获取错误或警告,请运行以下查询:
fields @timestamp, @message | sort @timestamp asc | filter @logStream like 'prx-000#####' | filter @message like / ERROR: / or @message like / WARN: /
要确定客户端连接关闭的原因,请运行以下查询:
fields @message | sort @timestamp asc | filter @logStream like 'prx-000#####' | filter @message like /The client connection closed/ and @message like /CUSTOMER/ | parse 'Reason: *' as reason | stats count() as reasonCount by reason | sort by reasonCount desc | limit 20
要确定数据库连接关闭的原因,请运行以下查询:
fields @message | sort @timestamp asc | filter @logStream like 'prx-000xxxxx' | filter @message like /The database connection closed/ and @message like /CUSTOMER/ | parse 'Reason: *' as reason | stats count() as reasonCount by reason | sort by reasonCount desc | limit 20
修改 RDS 代理连接设置
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
MaxConnectionsPercent
如果您的数据库已达到最大连接设置,那么您会收到以下错误消息:
"The database connection closed.Reason: The pool reached the maximum connection setting, and a connection with different properties was required."
要解决此问题,请监控 DatabaseConnections 和 MaxDatabaseConnectionsAllowed CloudWatch 指标。如果 DatabaseConnections 即将达到 MaxDatabaseConnectionsAllowed,则限制传入流量。或者,运行 modify-db-proxy-target-group AWS CLI 命令或 ModifyDBProxyTargetGroup API 操作以增加 MaxConnectionsPercent 设置。将 MaxConnectionsPercent 设置为至少比最近监控到的最大使用量高出 30%。
MaxIdleConnectionsPercent
如果池中存在过多空闲连接,那么您会收到以下消息:
"The database connection closed.Reason: There were too many idle connections in the connection pool.A new slot in the connection pool is now available."
要解决此问题,请监控 ClientConnections 和 DatabaseConnections CloudWatch 指标。如果 ClientConnections 持续小于 DatabaseConnections,则表示目标数据库存在空闲连接。默认情况下,MaxIdleConnectionsPercent 设置为 MaxConnectionsPercent 值的 50%。要修改 MaxIdleConnectionsPercent,请运行 modify-db-proxy-target-group AWS CLI 命令或 ModifyDBProxyTargetGroup API 操作。保持较高比例的空闲数据库连接处于开放状态。对于稳定的工作负载,请使用较低的值以避免空闲资源占用。
IdleClientTimeout
如果您的数据库超过了客户端连接空闲超时时间,那么您会收到以下消息:
"The client connection closed.Reason: The idle timeout was exceeded."
要移除空闲连接,请减少 IdleClientTimeout。如果您的工作负载经常与代理建立连接,请增加 IdleClientTimeout,这样您就无需频繁建立连接。要修改 IdleClientTimeout,请运行 modify-db-proxy AWS CLI 命令或 ModifyDBProxy API 操作。
ConnectionBorrowTimeout
如果您收到超时错误,则表示 RDS 代理无法建立数据库连接。
要将 ConnectionBorrowTimeout 设置为低于连接超时的值,请运行 modify-db-proxy-target-group AWS CLI 命令或 ModifyDBProxyTargetGroup API 操作。
手动关闭开放连接
如果数据库连接的空闲时间超过 24 小时,那么您会收到以下错误消息:
"The database connection closed.Reason: The idle connection exceeded the maximum connection duration."
您无法修改 RDS 代理中空闲数据库连接的最大生命周期。最佳做法则是手动关闭应用程序不需要重用的连接。
相关信息
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 8 个月前