跳至內容

如何對 Amazon RDS for SQL Server 執行個體 CPU 使用率過高的問題進行疑難排解?

2 分的閱讀內容
0

我的 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 資料庫執行個體的 CPU 使用率很高。

簡短描述

以下原因可能會導致 CPU 使用率增加:

  • 使用者發起的繁重工作負載、多個並行查詢或長時間執行的交易
  • 使用佈建不足的執行個體類別來處理工作負載
  • 過時的統計資料和索引碎片或缺少索引
  • 具有改進範圍的查詢
  • 阻塞和鎖死
  • 平行處理
  • 頻繁編譯和重新編譯
  • 參數嗅探
  • 執行緒耗盡

若要確定 Amazon RDS for SQL Server 執行個體 CPU 使用率過高的來源,請使用下列工具:

確定來源後,您可以分析和最佳化工作負載,以降低高 CPU 使用率。

解決方案

Amazon RDS 的 CloudWatch 指標

使用 Amazon RDS 的 CloudWatch 指標來識別長時間內的 CPU 模式。

若要尋找工作負載增加 CPU 使用率的時間,請完成下列步驟:

  1. 開啟 Amazon RDS console (Amazon RDS 主控台)。
  2. 在導覽窗格中,選擇 Databases (資料庫),然後選擇要監控的資料庫。
  3. 選擇 Monitoring (監控) 索引標籤。
  4. 選擇 Monitoring (監控) 功能表,然後選擇 CloudWatch
  5. 搜尋以下 CloudWatch 指標,然後比較圖表:
    WriteIOPs
    ReadIOPs
    ReadThroughput
    WriteThroughput
    CPUUtilization
    CPUCreditBalance
    CPUCreditUsage

**注意:**如果 CPU 點數餘額持續減少,而 CPU 點數使用量持續增加,則表示可用的 CPU 核心數不足以支援該工作負載。如果您使用 t2 或 t3 執行個體類別中的執行個體,請檢查您的執行個體是否佈建不足。

確定時間範圍後,使用 Enhanced Monitoring 來更詳細地查看與資料庫執行個體相關的資料。您可以設定 Enhanced Monitoring,以 1、5、10、15、30 或 60 秒的間隔收集資料。

Enhanced Monitoring

您可以設定 Enhanced Monitoring 來監控資料庫執行個體上執行的作業系統 (OS)。

若要使用 Enhanced Monitoring 檢查 CPU 使用率,請完成以下步驟:

  1. 開啟 Amazon RDS console (Amazon RDS 主控台)。
  2. 在導覽窗格中,選擇 Databases (資料庫),然後選擇要監控的資料庫。
  3. 選擇 Monitoring (監控) 索引標籤。
  4. 選擇 Monitoring (監控) 功能表,然後選擇 OS process list (OS 程序清單)。

確認 OS 程序、RDS 程序、SQL Server 程序或 SQL 代理程式程序是否導致 CPU 使用率過高。您也可以檢查這些程序使用的 CPU 和記憶體百分比。

使用主控台監控效能指標。在 Monitoring (監控) 索引標籤上,選擇 Monitoring (監控) 功能表,然後選擇 Manage graphs (管理圖表)。

若要確定 CPU 何時執行使用者程序、執行核心或處於閒置狀態,請選取 CPU 使用者、CPU 系統、CPU 閒置指標的圖表。然後,選取磁碟 I/O 和實體裝置 I/O 的指標。這些指標包括讀取 IO/s、寫入 IO/s、讀取 Kb/s 和寫入 Kb/s。您也可以查看與記憶體相關的參數,包括可用記憶體、SQL Server 總記憶體和總記憶體。這些指標很有用,因為如果 CPU 花費更多時間等待資源,您可能會看到較高的 CPU 使用率。

如需詳細資訊,請參閱在 RDS 主控台中檢視 OS 指標

Database Insights

使用 CloudWatch Database Insights 來對資料庫負載的主要因素,以及在一組執行個體上執行的各個 OS 程序進行疑難排解。

預設情況下,您的 Amazon RDS 資料庫已啟用 Database Insights 標準模式。若要在建立或修改資料庫執行個體時開啟標準模式,請參閱開啟 Database Insights for Amazon RDS 的標準模式

**注意:**如果您沒有使用更廣泛的權限,請務必授予 Database Insights 所需的 IAM 權限。如需詳細資訊,請參閱開始使用 CloudWatch Database Insights

如需 Amazon RDS 和執行個體類別支援的更多資訊,請參閱Amazon RDS 資料庫引擎、區域和 Database Insights 的執行個體類別支援

Performance Insights

開啟 Performance Insights 來辨識造成資料庫負載的查詢。

請完成下列步驟:

  1. 存取 Performance Insights 儀表板
  2. 選取與您要分析時間範圍相對應的常用 SQL 索引標籤。
  3. 確定花費時間最長的查詢。
  4. 檢查資源密集型查詢,以及在此期間觀察到的等待事件。以下是經常與高 CPU 使用率相關的等待事件:

SOS_SCHEDULER_YIELD 表示一個工作執行緒讓出執行權,讓其他執行緒得以執行。當等待次數較高但等待時間較短時,通常表示查詢受到 CPU 限制。當工作執行緒讓出執行權時,CPU 限制查詢的等待時間可能會增加。如果等待時間很長,那麼您必須檢閱工作負載。如果大量出現 SOS_SCHEDULER_YIELD,則表示系統正面臨 CPU 壓力問題。請檢閱工作負載的類型並執行額外的調整。

CXPACKETCXCONSUMER 是與平行處理相關的等待事件,通常無需擔心。但如果等待事件頻繁發生並影響效能,則請檢查查詢,並為平行處理的成本閾值設定適當的值。確認 SQL Server 在參數群組中選擇成本較低的平行處理參數。您也可以在查詢或執行個體層級將最大平行度 MAXDOP 增加到 1。

ThreadPool 顯示執行緒耗盡。如果您的執行個體類別可以處理,則增加最大工作執行緒參數。當由於阻塞、高工作負載或大量平行查詢而使用過多執行緒時,您可能會遇到 ThreadPool 等待的情況。此外,如果您錯誤地設定了最大工作執行緒數參數,那麼您可能會遇到 ThreadPool 等待事件。

檢查資料庫指標中的批次請求、SQL 編譯和 SQL 重新編譯。檢查經多次編譯的查詢。另請檢查是否針對指定批次頻繁重新編譯查詢。如果是,則表示查詢程式碼中使用了 WITH RECOMPILE 子句。這兩個原因都可能導致 CPU 使用率過高。

SQL Server 工具

若要使用 SQL Server 工具對 CPU 使用率過高的問題進行疑難排解,請執行下列操作: