如何解決 Amazon RDS for Oracle 資料庫的 CPU 使用率過高問題?

5 分的閱讀內容
0

我在 Oracle 資料庫執行個體的 Amazon Relational Database Service (Amazon RDS) 上遇到 CPU 使用率過高的問題。

簡短描述

如果 RDS for Oracle 資料庫的 CPU 使用率很高,請組合使用下列工具以識別原因:

  • Amazon CloudWatch 指標
  • Enhanced Monitoring 指標
  • Performance Insights 指標
  • Oracle Statspack
  • Automatic Workload Repository (AWR)
  • Automatic Database Diagnostic Monitor (ADDM)
  • Active Session History (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 指標以及檢視執行個體狀態和建議

Enhanced Monitoring 指標

Enhanced Monitoring 可為執行資料庫執行個體的作業系統提供即時指標。當 CloudWatch 從 Hypervisor 處取得 CPU 使用率指標時,Enhanced Monitoring 會從資料庫執行個體上的代理程式中取得這些指標。Enhanced Monitoring 指標比 CloudWatch 指標更精細。Enhanced Monitoring 指標會在 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 GiB1,007.24 MB44.7212.78無限制
oracleORCL [27076]ᵗ6.07 GiB1,010.02 MB44.6412.82無限制

如需前述範例中欄位的詳細資訊,請參閱在 RDS 主控台中檢視 OS 指標

確定 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(+);

依預設,所有 Enhanced Monitoring 圖表不會顯示在 Enhanced Monitoring 儀表板上。若要檢視 CPU 使用率峰值時的工作負載,請執行下列動作以開啟其他圖表:

  1. 開啟 Amazon RDS 主控台
  2. 在導覽窗格中,選擇資料庫
  3. 選擇您要監控的資料庫。
  4. 選擇監控索引標籤。
  5. 監控下拉式清單中選取增強型監控
  6. 增強型監控檢視下,選擇管理圖表
  7. 選取您要檢視的圖表。
  8. 選擇儲存

可選擇進行檢視的圖表範例:

記憶體

  • 可用
  • 已快取
  • 已緩衝
  • 總計
  • 已變更
  • 作用中
  • Slab

**注意:**系統會從 /proc/meminfo 檔案擷取與指標相關的指標。

交換

  • 交換
  • 可用

磁碟 I/O 和實體裝置 I/O

  • 讀取每秒 IO
  • 寫入每秒 IO
  • 平均佇列大小
  • 等候

CPU

  • 使用者
  • 總計
  • 系統
  • 等待
  • 閒置
  • 不錯

如需可用指標的清單,請參閱 Enhanced Monitoring 概觀

如需有關 Enhanced Monitoring 的詳細資訊,請參閱使用 Enhanced Monitoring 監控作業系統指標

如需 Enhanced Monitoring 費用的相關資訊,請參閱 Enhanced Monitoring 的費用

Performance Insights 指標

您可以使用 Amazon RDS Performance Insights 儀表板,視覺化資料庫負載,並依等待、SQL 陳述式、託管或使用者篩選負載。

  1. 開啟 Amazon RDS 主控台
  2. 在導覽窗格中,選擇 Performance Insights
  3. 選擇您要監控的資料庫執行個體。
  4. 對於檢視過去,選取所需的持續時間。
  5. 資料庫負載圖表中,確認您遇到 CPU 使用率峰值的時間。
  6. 選擇最高等待時間索引標籤。
    注意峰值期間等待時間最久的事件。
  7. 選擇最高 SQL 索引標籤。
    檢閱並最佳化造成峰值的 SQL 陳述式。

如需 Performance Insights 費用的相關資訊,請參閱 Performance Insights 定價

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 Statspack 的 Oracle 說明文件。

AWR

AWR (在 Oracle 網站上) 是一款 Oracle 效能報告工具,可提供特定時間段內的效能指標。

**注意:**AWR 需要 Diagnostic Pack 授權,且僅在 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 需要 Diagnostic Pack 授權,且僅在 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 需要 Diagnostic Pack 授權,且僅在 Oracle 企業版中提供。

1.    針對 CPU 負載過高的時間段產生 ASH 報告

2.    下載 ASH 報告。

3.    檢閱具有最多事件數的前幾個 SQL 區段。

如需解譯 AWR、ADDM 和 ASH 報告的相關資訊,請參閱 Oracle 支援文件中的 Oracle 支援文件 ID 常見問題: Automatic Workload Repository (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 中的監控指標概觀

使用 Automatic Workload Repository (AWR) 產生效能報告

產生 ADDM 報告

產生 ASH 報告

如何在執行 Oracle 的 Amazon RDS 資料庫執行個體上查看效能統計資料?