如何解决我的 Amazon RDS for Oracle 数据库高 CPU 利用率的问题?
我的 Amazon Relational Database Service (Amazon RDS) for Oracle 数据库实例的 CPU 利用率很高。
简短描述
如果您的 RDS for Oracle 数据库 CPU 使用率较高,可以使用以下工具的组合来确定原因:
- Amazon CloudWatch 指标
- 增强监控指标
- 性能详情指标
- Oracle Statspack
- 自动工作负载存储库 (AWR)
- 自动数据库诊断监视器 (ADDM)
- 活动会话历史记录 (ASH)
- Oracle SQLT
解决方法
在诊断与 CPU 利用率高相关的问题时,确定问题发生的时段。
CloudWatch 指标
Amazon RDS 会每分钟为每个活动的数据库向 CloudWatch 发送一次指标。查看以下适用于 Amazon RDS 的 CloudWatch 指标,以确定较长时段内的 CPU 模式:
- CPUUtilization
- CPUCreditUsage(如果您使用的是 T2 或 T3 实例)
- CPUCreditBalance(如果您使用的是 T2 或 T3 实例)
此外,请查看以下指标,以检查工作负载是否发生了变化,以及是否超出任何阈值。以下因素可能导致 CPU 利用率峰值。
- DatabaseConnections
- DiskQueueDepth
- FreeableMemory
- ReadIOPS
- ReadLatency
- WriteIOPS
- WriteLatency
有关详细信息,请参阅使用 Amazon CloudWatch 监控 Amazon RDS 指标和查看实例状态和建议。
增强监控指标
增强监控为运行数据库实例的操作系统提供实时指标。CloudWatch 从虚拟机监控程序获取 CPU 利用率指标,而增强监控则从数据库实例上的代理获取这些指标。增强监控指标比 CloudWatch 指标更精细。增强监控指标将在 CloudWatch 日志中存储 30 天。
您可以定义指标的收集间隔,从 1 秒到 1 分钟不等。最佳实践是将关键业务应用程序的精细程度设置为 1 秒或 5 秒。在此精细程度下,指标可以提供有关应用程序负载的更准确的信息,以用于分析性能问题。
要查看 CPU 利用率的峰值时段,请执行以下操作:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择数据库。
- 选择要监控的数据库。
- 选择监控选项卡。
- 从监控下拉列表中选择增强监控。
- 如果实例是多可用区部署,在增强监控视图下选择主可查看主实例的操作系统指标。选择辅助可查看备用副本的指标。
- 选择日期和开始时间。
- 在右上角选择持续时间。您可以选择 5 分钟、15 分钟、30 分钟或 1 小时。
CPU 总数图表指明 CPU 利用率升高的时段。
1 分钟负载平均值、5 分钟负载平均值和 15 分钟负载平均值图表分别显示在过去一分钟、过去五分钟和过去 15 分钟内请求 CPU 时间的进程数。如果平均负载大于 vCPU 的数量,则表明实例可能遇到 CPU 限制。
要查看操作系统进程,请从监控下拉列表中选择操作系统进程列表。然后,按 CPU% 值对列表进行排序,以确定 CPU 使用率最高的进程。
示例:
名称 | VIRT | RES | CPU% | MEM% | VMLIMIT |
oracleORCL [27074]ᵗ | 6.07 GiB | 1007.24 MB | 44.72 | 12.78 | 无限制 |
oracleORCL [27076]ᵗ | 6.07 GiB | 1010.02 MB | 44.64 | 12.82 | 无限制 |
有关上述示例中各列的详细信息,请参阅查看 RDS 控制台中的操作系统指标。
确定 CPU 利用率最高的进程后,可以运行以下查询,以便将进程 ID 映射到数据库上的会话:
SET LINESIZE 120; SET PAGES 200; COL OSUSER FOR a20; COL USERNAME FOR a20; COL MACHINE FOR a20; SELECT a.sid, a.serial#, a.osuser, a.username, a.machine, a.sql_id, c.sql_text FROM v$session a, v$process b, v$sql c WHERE a.paddr=b.addr AND b.spid=&spid AND a.sql_id=c.sql_id(+);
默认情况下,所有增强监控图表均不在增强监控控制面板上显示。要查看 CPU 利用率峰值时的工作负载,请执行以下操作以打开其他图表:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择数据库。
- 选择要监控的数据库。
- 选择监控选项卡。
- 从监控下拉列表中选择增强监控。
- 在增强监控视图下,选择管理图表。
- 选择要查看的图表。
- 选择保存。
您可以选择查看的图表示例:
内存
- 可用
- 已缓存
- 已缓冲
- 总计
- 脏
- 活跃
- 碎片
**注意:**指标的相关指标是从 /proc/meminfo 文件中检索的。
交换
- 交换
- 可用
磁盘 I/O 和物理设备 I/O
- 读取 IO/秒
- 写入 IO/秒
- 平均队列大小
- 等待
CPU
- 用户
- 总计
- 系统
- 等待
- 空闲
- 很好
有关可用指标的列表,请参阅增强监控概述。
有关增强监控的详细信息,请参阅使用增强监控来监控操作系统指标。
有关增强监控费用的信息,请参阅增强监控的费用。
性能详情指标
使用 Amazon RDS 性能详情控制面板,您可以可视化数据库负载,并按等待、SQL 语句、主机或用户对其进行筛选。
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择性能详情。
- 选择您要监控的数据库实例。
- 对于查看过去,选择您所选的持续时间。
- 在数据库负载图中,查看出现 CPU 使用率峰值的时间。
- 选择热门等待项目选项卡。
请注意峰值时段内的热门等待项目。 - 选择热门 SQL 选项卡。
查看和优化导致峰值的 SQL 语句。
有关性能详情费用的信息,请参阅性能详情定价。
Oracle Statspack
Statspack 是一种性能报告工具,可提供数据库在特定时段内的性能指标。
要使用 Statspack 查看实例的 CPU 利用率,请执行以下操作:
- 为遇到问题的时段生成 statspack 报告。
- 查看并优化导致高 CPU 负载的查询。
- 查看热门等待项目。
Statspack 报告的摘录示例:
-> Total DB CPU (s): 3,345 -> Captured SQL accounts for 91.3% of Total DB CPU -> SQL reported below exceeded 1.0% of Total DB CPU CPU CPU per Elapsed Old Time (s) Executions Exec (s) %Total Time (s) Buffer Gets Hash Value ---------- ------------ ---------- ------ ---------- --------------- ---------- 3043.36 598,100 0.01 91.0 3356.81 994,096,212 219593194 Module: JDBC Thin Client SELECT tt.ORDER_TOTAL, tt.SALES_REP_ID, tt.ORDER_DATE, customers.CUST_FIRST_NAME, customers.CUST_LAST_NAME FROM (SELECT orders.ORDER_TOTAL, orders.SALES_REP_ID, orders.ORDER_DATE, orders.customer_id, rank() Over (ORDER BY orders.O
有关详细信息,请参阅 Oracle 文档中有关 Oracle Statspack 的内容。
AWR
AWR(位于 Oracle 网站上)是一个 Oracle 性能报告工具,可提供特定时段内的性能指标。
**注意:**AWR 需要诊断包许可证方可使用,并且仅适用于 Oracle 企业版。
要使用 AWR 确定高 CPU 负载的原因,请执行以下操作:
1. 运行类似于以下内容的查询,以确定高 CPU 负载时段的开始和结束快照 ID:
SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
2. 生成 AWR 报告。
3. 下载 AWR 报告。
4. 查看并优化 AWR 报告的按 CPU 时间排序的 SQL 部分中列出的查询。
5. 查看热门等待项目。
Oracle 12c 及更高版本的 AWR 报告中包含了 ADDM 和 ASH 报告。
注意: 如果为四个以上的连续快照 ID 生成 AWR 报告,则不包括所有 ADDM 和 ASH 报告。要生成这些额外的报告,请按照以下部分中的说明操作。
ADDM
ADDM 是一种诊断工具,用于分析 AWR 数据、识别性能瓶颈并提供建议。
**注意:**ADDM 需要诊断包许可证方可使用,并且仅适用于 Oracle 企业版。
1. 运行类似于以下内容的查询,以确定高 CPU 负载时段的开始和结束快照 ID:
SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
2. 生成 ADDM 报告。
3. 下载 ADDM 报告。
4. 查看 ADDM 报告中的建议。
ASH
ASH(位于 Oracle 网站上)是一种可收集活动会话信息的诊断工具。要使用 ASH 来解决暂时的性能问题,请执行以下操作:
**注意:**ASH 需要诊断包许可证方可使用,并且仅适用于 Oracle 企业版。
2. 下载 ASH 报告。
3. 查看包含热门事件的热门 SQL 部分。
有关解释 AWR、ADDM 和 ASH 报告的信息,请参阅 Oracle 支持文档中的 Oracle 支持文档 ID 常见问题: 自动工作负载存储库 (AWR) 报告(文档 ID 1599440.1)。
Oracle SQLT
Amazon RDS 通过使用 SQLT 选项来支持 Oracle SQLTXPLAIN (SQLT)。SQLT 是一种工具,用于诊断性能不佳的 SQL 语句。
要为特定 SQL 语句生成报告,请参阅 Oracle SQLT。
如果您在使用 SQLT 时收到以下错误:
Error: ORA-20106: SQLT parameter connect_identifier must be set when running SQLT from a remote client.
在运行提取之前,运行以下命令之一:
EXEC sqltxadmin.sqlt$a.set_sess_param(‘connect_identifier’, ‘@SID’); EXEC sqltxadmin.sqlt$a.set_param(‘connect_identifier’, ‘@example-hostname:example-port/example-sid’);
相关信息

相关内容
- AWS 官方已更新 5 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前