如何解决我的 Amazon RDS for Oracle 数据库高 CPU 利用率的问题?

4 分钟阅读
0

我的 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 利用率的峰值时段,请执行以下操作:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择数据库
  3. 选择要监控的数据库。
  4. 选择监控选项卡。
  5. 监控下拉列表中选择增强监控
  6. 如果实例是多可用区部署,在增强监控视图下选择可查看主实例的操作系统指标。选择辅助可查看备用副本的指标。
  7. 选择日期和开始时间。
  8. 在右上角选择持续时间。您可以选择 5 分钟15 分钟30 分钟1 小时

CPU 总数图表指明 CPU 利用率升高的时段。

1 分钟负载平均值5 分钟负载平均值15 分钟负载平均值图表分别显示在过去一分钟、过去五分钟和过去 15 分钟内请求 CPU 时间的进程数。如果平均负载大于 vCPU 的数量,则表明实例可能遇到 CPU 限制。

要查看操作系统进程,请从监控下拉列表中选择操作系统进程列表。然后,按 CPU% 值对列表进行排序,以确定 CPU 使用率最高的进程。

示例:

名称VIRTRESCPU%MEM%VMLIMIT
oracleORCL [27074]ᵗ6.07 GiB1007.24 MB44.7212.78无限制
oracleORCL [27076]ᵗ6.07 GiB1010.02 MB44.6412.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 利用率峰值时的工作负载,请执行以下操作以打开其他图表:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择数据库
  3. 选择要监控的数据库。
  4. 选择监控选项卡。
  5. 监控下拉列表中选择增强监控
  6. 增强监控视图下,选择管理图表
  7. 选择要查看的图表。
  8. 选择保存

您可以选择查看的图表示例:

内存

  • 可用
  • 已缓存
  • 已缓冲
  • 总计
  • 活跃
  • 碎片

**注意:**指标的相关指标是从 /proc/meminfo 文件中检索的。

交换

  • 交换
  • 可用

磁盘 I/O 和物理设备 I/O

  • 读取 IO/秒
  • 写入 IO/秒
  • 平均队列大小
  • 等待

CPU

  • 用户
  • 总计
  • 系统
  • 等待
  • 空闲
  • 很好

有关可用指标的列表,请参阅增强监控概述

有关增强监控的详细信息,请参阅使用增强监控来监控操作系统指标

有关增强监控费用的信息,请参阅增强监控的费用

性能详情指标

使用 Amazon RDS 性能详情控制面板,您可以可视化数据库负载,并按等待、SQL 语句、主机或用户对其进行筛选。

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择性能详情
  3. 选择您要监控的数据库实例。
  4. 对于查看过去,选择您所选的持续时间。
  5. 数据库负载图中,查看出现 CPU 使用率峰值的时间。
  6. 选择热门等待项目选项卡。
    请注意峰值时段内的热门等待项目。
  7. 选择热门 SQL 选项卡。
    查看和优化导致峰值的 SQL 语句。

有关性能详情费用的信息,请参阅性能详情定价

Oracle Statspack

Statspack 是一种性能报告工具,可提供数据库在特定时段内的性能指标。

要使用 Statspack 查看实例的 CPU 利用率,请执行以下操作:

  1. 为遇到问题的时段生成 statspack 报告
  2. 查看并优化导致高 CPU 负载的查询。
  3. 查看热门等待项目。

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 企业版。

1.    生成高 CPU 负载时段的 ASH 报告

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’);

相关信息

Amazon RDS 中的监控指标概览

使用自动工作负载存储库 (AWR) 生成性能报告

生成 ADDM 报告

生成 ASH 报告

如何查看运行 Oracle 的 Amazon RDS 数据库实例的性能统计数据?