跳至內容

如何疑難排解 Amazon RDS for Oracle 資料庫的高 CPU 使用率問題?

4 分的閱讀內容
0

我的 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體的 CPU 使用率偏高。

解決方法

診斷高 CPU 使用率相關問題時,請先找出問題出現的時間範圍。

CloudWatch 指標

Amazon RDS 會每分鐘將每個作用中資料庫的指標傳送至 Amazon CloudWatch。請查看以下Amazon RDS 的 CloudWatch 指標,找出較長期間內的 CPU 模式:

  • CPUUtilization
  • 如果您使用 T2 或 T3 執行個體,請查看 CPUCreditUsage
  • 如果您使用 T2 或 T3 執行個體,請查看 CPUCreditBalance

另外,請查看以下指標,確認工作負載是否出現變化,以及是否超過任何臨界值:

  • DatabaseConnections
  • DiskQueueDepth
  • FreeableMemory
  • ReadIOPS
  • ReadLatency
  • WriteIOPS
  • WriteLatency

**注意:**這些因素可能造成 CPU 使用率突然升高。

如需更多資訊,請參閱檢視執行個體狀態

Enhanced Monitoring 指標

Enhanced Monitoring 會針對資料庫執行個體執行所在的作業系統提供即時指標。

若要查看 CPU 使用率突然升高的時間範圍,請執行以下動作:

  1. 開啟 Amazon Aurora and RDS console (Amazon Aurora 和 RDS 主控台)。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選擇您要監控的資料庫。
  4. 選擇 Monitoring (監控) 索引標籤。
  5. Monitoring (監控) 下拉式清單中,選取 Enhanced monitoring (增強型監控)。
  6. Enhanced Monitoring (增強型監控) 檢視下,如果執行個體採用多可用區域部署,則選取 primary (主要),以查看主要執行個體的作業系統指標。若要查看待命複寫的指標,請選取 secondary (次要)。
  7. 選取日期和開始時間。
  8. 在頁面右上角,選取持續時間。您可以選取 5 minutes (5 分鐘)、15 minutes (15 分鐘)、30 minutes (30 分鐘) 或 1 hour (1 小時)。

CPU Total (CPU 總計) 圖表會顯示 CPU 使用率上升的時間範圍。

Load Avg 1 min (1 分鐘平均負載)、Load Avg 5 min (5 分鐘平均負載) 和 Load Avg 15 min (15 分鐘平均負載) 圖表會顯示要求 CPU 時間的處理程序數量。系統會根據最近一分鐘計算 CPU 時間。這些圖表也會顯示最近 5 分鐘與最近 15 分鐘的資料。如果平均負載高於 vCPU 數量,則執行個體可能遇到 CPU 瓶頸。

若要查看作業系統處理程序,請從 Monitoring (監控) 下拉式清單中選取 OS process list (作業系統處理程序清單)。接著,依 CPU% 值排序清單,找出 CPU 使用量最高的處理程序。如需更多資訊,請參閱在 Aurora 和 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(+);

依預設,Enhanced Monitoring 儀表板不會顯示所有 Enhanced Monitoring 圖表。若要開啟其他圖表,並查看 CPU 使用率突然升高時的工作負載,請完成以下步驟:

  1. 開啟 Aurora and RDS console (Aurora 和 RDS 主控台)。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選擇您要監控的資料庫。
  4. 選擇 Monitoring (監控) 索引標籤。
  5. Monitoring (監控) 下拉式清單中,選取 Enhanced monitoring (增強型監控)。
  6. Enhanced Monitoring (增強型監控) 檢視下,選擇 Manage graphs (管理圖表)。
  7. 選取您要查看的圖表。
  8. 選擇 Save (儲存)。

您可以選擇查看以下範例圖表:

記憶體

  • 可用記憶體
  • 快取記憶體
  • 緩衝記憶體
  • 總記憶體
  • 髒記憶體
  • 作用中記憶體
  • Slab 記憶體

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

交換空間

  • 交換空間
  • 可用交換空間

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

  • 讀取 IO/s
  • 寫入 IO/s
  • 平均佇列大小
  • 等待

CPU

  • CPU 使用者
  • CPU 總計
  • CPU 系統
  • CPU 等待
  • CPU 閒置
  • CPU Nice

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

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

如需 Enhanced Monitoring 成本的相關資訊,請參閱 Enhanced Monitoring 成本

Amazon RDS Performance Insights 指標

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

若要查看 Performance Insights 指標,請完成以下步驟:

  1. 開啟 Aurora and RDS console (Aurora 和 RDS 主控台)。
  2. 在導覽窗格中,選擇 Performance Insights
  3. 選擇您要監控的資料庫執行個體。
  4. 依預設,最近 1 小時的統計資料會顯示在 Performance Insights 儀表板中。針對您要分析的時間範圍,選擇 Relative (相對) 或 Absolute (絕對)。
  5. Database Load (資料庫負載) 圖表中,檢查您遇到 CPU 使用量突然升高的時間。
  6. 選擇 Top waits (最高等待) 索引標籤。
    **注意:**請檢查尖峰期間的最高等待事件。
  7. 選擇 Top SQL (最高 SQL) 索引標籤。
  8. 檢閱造成尖峰的 SQL 陳述式,並加以最佳化。

如需 Performance Insights 成本的相關資訊,請參閱 Performance Insights 定價

Statspack

Oracle 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

Automatic Workload Repository 是 Oracle 效能報告工具,可提供特定時間範圍內的效能指標。如需更多資訊,請參閱 Oracle 網站上的自動工作負載儲存庫

**注意:**AWR 需要 Diagnostic Pack License,且僅適用於 Oracle Enterprise Edition。

若要使用 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 報告包含 Automatic Database Diagnostic Monitor (ADDM) 和 Active Session History (ASH) 報告。

**注意:**如果系統針對超過四個連續快照 ID 產生 AWR 報告,該報告不會包含所有 ADDM 和 ASH 報告。

ADDM

Automatic Database Diagnostic Monitor 是診斷工具,可分析 AWR 資料、識別效能瓶頸並提供建議。

**注意:**ADDM 需要 Diagnostic Pack license,且僅適用於 Oracle Enterprise Edition。

若要使用 ADDM 分析 AWR 資料,請完成以下步驟:

  1. 若要識別高 CPU 負載時間範圍的開始與結束快照 ID,請執行此範例查詢:

    SELECT SNAP_ID, BEGIN_INTERVAL_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1;
  2. 產生 ADDM 報告

  3. 下載 ADDM 報告

  4. 檢閱 ADDM 報告中的建議。

如需 ADDM 報告的相關資訊,請參閱 Oracle 網站上的常見問題: Automatic Workload Repository (AWR) 報告 (Doc ID 1599440.1)

ASH

Active Session History 是診斷工具,可收集作用中工作階段資訊。若要使用 ASH 疑難排解暫時性效能問題,請完成以下步驟:

  1. 針對發生高 CPU 負載的時間範圍產生 ASH 報告
    **注意:**ASH 需要 Diagnostic Pack license,且僅適用於 Oracle Enterprise Edition。
  2. 下載 ASH 報告。
  3. 檢閱具有最高事件的 TOP SQL 區段。

如需 ASH 報告的相關資訊,請參閱 Oracle 網站上的分析取樣資料

Oracle SQLT

Amazon RDS 透過 SQLT 選項支援 Oracle SQLTXPLAIN (SQLT)。SQLT 是用來診斷效能不佳 SQL 陳述式的工具。

若要為特定 SQL 陳述式建立報告,請參閱 Oracle 網站上的 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) 產生效能報告

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