如何針對我的 RDS for SQL Server 執行個體上的高 CPU 使用率進行疑難排解?

2 分的閱讀內容
0

我在 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 資料庫執行個體上遇到高 CPU 使用率。如何針對高 CPU 使用率進行疑難排解和解決?

簡短描述

CPU 使用率增加的常見原因包括下列各項:

  • 使用者啟動的繁重工作負載、多個並行查詢或長時間執行的交易
  • 針對工作負載使用佈建不足的執行個體類別
  • 過期的統計資料和索引分散化或遺失的索引
  • 有改善範圍的查詢
  • 封鎖和鎖死
  • 平行處理
  • 頻繁編譯和重新編譯
  • 參數嗅探
  • 執行緒耗盡

若要識別您的 Amazon RDS for SQL Server 執行個體中的 CPU 使用率來源,請使用下列工具:

  • Amazon RDS 的 Amazon CloudWatch 指標
  • 增強型監控
  • Performance Insights
  • SQL Server 原生工具

識別來源之後,您可以分析並最佳化工作負載,以降低 CPU 使用率。

解決方案

Amazon RDS 的 Amazon CloudWatch 指標

您可以使用 CloudWatch 指標來識別長時間的 CPU 模式。比較 WriteIOPS、ReadIOPS、ReadThroughput 和 WriteThroughput 以及 CPU 使用率的圖表,以找出工作負載造成高 CPU 的時間。如需詳細資訊,請參閱 Amazon RDS 的 Amazon CloudWatch 指標

如果您使用 t2 或 t3 執行個體類別的執行個體,請檢查執行個體是否佈建不足。如果您發現 CPU 積分餘額持續下降,且 CPU 積分使用率持續增加,則 CPU 核心不足以滿足您的工作負載。

識別時間範圍之後,您可以檢閱與資料庫執行個體相關聯的增強型監控資料。您可以設定增強型監控,以 1、5、10、15、30 或 60 秒的間隔收集資料。這樣做可讓您以比 CloudWatch 更精細的等級收集資料。

增強型監控

如果您已設定增強型監控,則可以使用它來監控資料庫執行個體上執行的作業系統。若要使用增強型監控來檢查 CPU 使用率,請執行下列動作:

  1. RDS 主控台中,選取 Databases (資料庫),然後選擇您的資料庫。
  2. Monitoring (監控) 標籤上,從Monitoring (監控) 下拉式功能表中選取 OS process list (作業系統程序清單)。確認高 CPU 是否由作業系統、RDS 處理序、SQL Server 處理序或 SQL 代理程式處理序所造成。您也可以檢查 CPU 的百分比和這些處理序使用的記憶體百分比。
  3. Enhanced monitoring (增強型監控) 下拉式清單中選取指標,以檢查效能監控資料。這些指標包括 CPU 閒置、核心和使用者。這些指標會告訴您 CPU 是否花費大部分時間在閒置狀態、執行核心或執行使用者處理序。
  4. 選取 Manage Graphs (管理圖形) 以檢視其他指標。然後,您可以選取與 I/O 和磁碟輸送量相關的指標。這些指標包括「讀取/秒」、「寫入/秒」、「讀取 Kb/秒」和「寫入 Kb/秒」。您也可以檢視記憶體相關參數,包括可用記憶體、SQL Server 記憶體和總記憶體。這些指標很有幫助,因為如果您的 CPU 花費大量時間等待資源,您可能會看到高 CPU 使用率。

如需詳細資訊,請參閲在 RDS 主控台中檢視作業系統指標

Performance Insights

您可以使用 Amazon RDS Performance Insights 來識別負責資料庫負載的查詢。若要完成此操作,

  1. 請勾選與您想要分析之時間範圍對應的 SQL 標籤
  2. 識別執行時間最長的查詢。
  3. 檢查資源密集型查詢,以及在此期間觀察到的等待事件。以下是與高 CPU 使用率相關聯的等待事件:
    **SOS_SCHEDULER_YIELD:**此等待表示工作者讓其他人先執行。等待時間較低的高等待計數通常表示有 CPU 限制的查詢。這裡的高等待時間可能是由於讓步問題引起的。如果您在這裡看到很長的等待時間,則必須進一步檢閱工作負載。
    如果 SOS_SCHEDULER_YIELD 是普遍的等待類型,則可能表示 CPU 壓力是問題所在。檢閱工作負載類型並執行其他調整。
    **CXPACKET 和 CXCONSUMER:**平行處理相關的等待事件通常不是考量。但是,如果等待事件頻繁且會影響效能,請檢閱查詢並針對平行處理的成本閾值設定適當的值。請確定 SQL Server 在參數群組中選擇成本較低的平行處理參數。
    您也可以根據您的使用案例,在查詢或執行個體層級將 MAXDOP (最大程度平行處理) 增加為 1。
    **ThreadPool:**此等待事件表示執行緒耗盡。如果您的執行個體類別能夠處理它,請增加最大工作者執行緒參數。ThreadPool 等待可能是由於使用過多執行緒而發生。由於封鎖、高工作負載或大量平行查詢,而使用過多執行緒。或者,此等待可能是因為最大工作者執行緒參數設定錯誤所造成。
  4. 檢查資料庫指標是否有批次請求、SQL 編譯和 SQL 重新編譯。檢查查詢是否編譯多次,表示即興查詢。同時檢查查詢是否針對指定批次頻繁重新編譯,表示在查詢程式碼中使用 with recompile。這兩者都會導致高 CPU 使用率。

SQL Server 原生工具

**CPU 特定查詢疑難排解:**如需詳細資訊,請參閱 Microsoft 文件網站上的針對 SQL Server 中的高 CPU 使用率問題進行疑難排解。專注於 CPU 密集型查詢、更新統計資料、遺失索引和參數嗅探。

檢查執行計劃是否有效能不佳的查詢並執行其他調整。 如需詳細資訊,請參閱 Microsoft 文件網站上的顯示實際執行計畫

使用查詢和擴充事件針對過多鎖定、封鎖和鎖死相關的問題進行疑難排解。 如需詳細資訊,請參閱 Microsoft 文件網站上的了解和解決 SQL Server 封鎖問題

**注意:**在 RDS for SQL Server 中設定擴充事件時,您無法使用一般方法來儲存 XEL 檔案。如需有關如何設定擴充事件的指示,請參閱在 Amazon RDS for SQL Server 中設定擴充事件

您可以使用 SQL Server 報告取得 SQL Server 中原生可用的效能報告。 使用這些報告來微調您的工作負載。如需詳細資訊,請參閱 Microsoft 文件網站上的效能儀表板


AWS 官方
AWS 官方已更新 1 年前