如何解決 Amazon RDS for Oracle 資料庫的 CPU 使用率過高問題?
我在 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 使用率激增的時間段,請執行下列動作:
- 開啟 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 | 1,007.24 MB | 44.72 | 12.78 | 無限制 |
oracleORCL [27076]ᵗ | 6.07 GiB | 1,010.02 MB | 44.64 | 12.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 使用率峰值時的工作負載,請執行下列動作以開啟其他圖表:
- 開啟 Amazon RDS 主控台。
- 在導覽窗格中,選擇資料庫。
- 選擇您要監控的資料庫。
- 選擇監控索引標籤。
- 從監控下拉式清單中選取增強型監控。
- 在增強型監控檢視下,選擇管理圖表。
- 選取您要檢視的圖表。
- 選擇儲存。
可選擇進行檢視的圖表範例:
記憶體
- 可用
- 已快取
- 已緩衝
- 總計
- 已變更
- 作用中
- 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 陳述式、託管或使用者篩選負載。
- 開啟 Amazon RDS 主控台。
- 在導覽窗格中,選擇 Performance Insights。
- 選擇您要監控的資料庫執行個體。
- 對於檢視過去,選取所需的持續時間。
- 在資料庫負載圖表中,確認您遇到 CPU 使用率峰值的時間。
- 選擇最高等待時間索引標籤。
注意峰值期間等待時間最久的事件。 - 選擇最高 SQL 索引標籤。
檢閱並最佳化造成峰值的 SQL 陳述式。
如需 Performance Insights 費用的相關資訊,請參閱 Performance Insights 定價。
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 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 企業版中提供。
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’);
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 6 天前lg...
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前