如何對 RDS for SQL Server 執行個體可用記憶體不足的問題進行疑難排解?

3 分的閱讀內容
0

如何對 Amazon Relational Database (Amazon RDS) for SQL Server 執行個體中可用記憶體不足的問題進行疑難排解?

簡短描述

可用記憶體嚴重不足會造成執行個體發生未預期的停機。因此,務必要監控執行個體上的記憶體用量並採取補救措施。

可用記憶體 是 RDS 執行個體上可用的記憶體 (RAM) 容量。Amazon RDS 執行個體上可用的記憶體總量取決於執行個體類別。例如,執行個體類別 db.r5.8xlarge 提供 32 個 vCPU 和 256 GiB 記憶體。如果您使用 db.r5.8xlarge 執行個體類別佈建 RDS 執行個體,執行個體類別 (256 GiB) 上的記憶體總量會由下列項目共用:

  • 作業系統
  • Amazon RDS 流程
  • 資料庫引擎
  • 工作者執行緒
  • 商業智慧套件 (SSIS、SSAS、SSRS) 應用程式等。

如需 SQL Server 如何使用記憶體的詳細資訊,請參閱 Microsoft 文件網站上的記憶體管理架構指南

解決方案

監控執行個體的記憶體用量

Amazon CloudWatch 指標

監控 Amazon CloudWatch 指標FreeableMemory,以識別記憶體不足的發生。除了 FreeableMemory,您還可以監控下列項目,以識別可用記憶體不足時的工作負載增加情況:

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

增強型監控

增強型監控可以使用不同的精細度開啟,例如 1、5、10、15、30 或 60 秒,以監控 Microsoft SQL Server 的作業系統指標。最佳實務是將精細度設為 1 或 5 秒 (預設值為 60 秒)。您可以使用增強型監控建立 CloudWatch 警示以監控 Amazon RDS for SQL Server 資料庫執行個體的記憶體消耗情況

對可用記憶體不足的問題進行疑難排解

若要對可用記憶體不足的問題進行疑難排解,請執行下列操作:

限制 RDS 執行個體使用的記憶體

max server memory (伺服器記憶體最大值) 設定為不會造成全系統記憶體壓力的值,以限制 RDS 執行個體使用的記憶體。您可以使用下列公式判斷執行個體的 max server memory (伺服器記憶體最大值):

max_server_memory = total_RAM – (作業系統 1 GB + memory_basis_amount_of_RAM_on_the_server)

Total_RAM 等於執行個體類別的記憶體,其中 memory_basis_amount_of_RAM_on_the_server 如下列決定:

  • 如果伺服器上的 RAM 介於 4 GB 到 16 GB: 每 4 GB 的 RAM 保留 1 GB。例如,有 16 GB 的伺服器,請保留 4 GB。
  • 如果伺服器上的 RAM 超過 16 GB: 每 4 GB 的 RAM 保留 1 GB,最多 16 GB;超過 16 GB 後,每 8 GB 的 RAM 保留 1 GB。

例如,如果伺服器有 64 GB 的 RAM,則計算方式如下:

  • 作業系統需要 1 GB
  • 最多 16 GB RAM:16/4 = 4 GB
  • 剩下超過 16 GB 的 RAM:(64-16) /8 = 6
  • 要保留的 RAM 總量:1 + 4 + 6 = 11 GB
  • max_server_memory:64 – 11 = 53 GB

備註:

  • 如果您在執行個體上使用 SSIS、SSAS 或 SSRS,則必須調整 max_server_memory 以容納這些元件。
    **範例:**您想要搭配 RDS 執行個體使用 SSRS。將 SSRS Max memory (最大記憶體) 值設定為 10% (佔資料庫執行個體記憶體總量的百分比)。在具有 64 GiB 記憶體的執行個體上,這個值大約是 6.4 GiB。max_server_memory 的值應為大約 46 GiB (64-11-6.4)。
  • 在初始設定 max_server_memory 之後,必須持續監控 FreeableMemory,以決定是否要增加或減少配置的記憶體。

若要變更 max_server_memory,請使用自訂參數群組來規劃值。max_server_memory 的值必須以 MB 為單位。

**備註:**參數 max_server_memory 是一個動態參數。因此不需要重新啟動,就能使變更生效。

檢查資料庫連線

每個與執行個體建立的資料庫連線,都需要在工作者執行緒的緩衝集區外部配置一些記憶體。因此,DatabaseConnections 出現尖峰可能會造成可用記憶體下降。

確認資料庫執行個體是否使用 SSIS、SSAS 或 SSRS 元件

使用 Amazon RDS for SQL Server 選項群組,識別資料庫執行個體上是否有使用 SSIS、SSAS 或 SSRS 元件。這些元件使用的記憶體位於 max_server_memory 設定之外。如果您不使用這些功能,請修改選項群組加以移除。移除這些功能可減少執行個體上的記憶體佔用量。

使用 Performance Insights 監控資料庫執行個體

您可以使用 Performance Insight 監控資料庫執行個體,進行資料庫效能分析。您可以使用 Performance Insights 儀表板來監控資料庫負載、等待、查詢、主機、使用者等。監控這些項目可協助您識別會拖慢執行個體速度的潛在瓶頸。

對資料庫執行個體執行定期維護

定期執行索引維護,並讓統計資料維持更新狀態。索引高度分散可能會造成 I/O 活動增加,耗用更多記憶體。過時的統計資料同樣可能會造成基數估計不準確,因而選取不理想的查詢規劃。

**備註:**最佳實務是在非高峰時段或維護時段內執行索引與統計資料維護。

監控頁面預期壽命和緩衝區快取命中率

頁面預期壽命 (PLE) 代表頁面在緩衝集區中停留的秒數 (不含參照)。

緩衝區快取命中率 (BCHR) 是緩衝集區中資料頁面所滿足的頁面請求百分比。

監控 PLE 和 BCHR 可識別記憶體壓力。若要使用 Performance Insights 監控這些指標,請執行下列操作:

  1. 開啟 Amazon RDS 主控台
  2. 選取 Performance Insights
  3. 選取您要監控的 RDS for SQL Server 執行個體。
  4. 設定您要檢閱其指標的時間範圍,然後選取 Manage Metrics (管理指標)。
  5. 選取 Database Metrics (資料庫指標)、Page Life Expectancy、Buffer Cache Hit Ratio (頁面預期壽命、緩衝區快取命中率)。

為了實現最佳性能,這些指標的值應該盡可能高。您可以使用 Performance Insights 來監控這些指標。您可能會看到這些指標的值在一段時間內一直很低。如果發生這種情況,請調整存取資料的查詢或增加執行個體類別,以提供更多記憶體。

當執行個體有記憶體壓力,以及低 PLE 和 BCHR 時,PAGEOLATCH 等待會增加。這表示 SQL Server 等待頁面從磁碟擷取並載入記憶體。此外,由於記憶體緊縮而造成無法接受查詢的記憶體請求時,可能會出現 RESOURCE_SEMAPHORE 的等待。這會造成 CPU 使用率增加,因為資料頁面在記憶體中的快取時間不夠長。發生這種情況時,SQL Server 必須反覆存取磁碟,才能存取造成效能問題的資料。

識別使用最多資源的查詢

使用 Performance Insight,擷取利用最多資源的查詢並加以調整,以獲得更好的效能。

為您的工作負載選取正確的執行個體大小

執行個體的記憶體數量取決於執行個體類型。請務必選取具有足夠資源的執行個體類別,以讓資料庫執行個體擁有足夠的資源來處理工作負載。資源較少的執行個體會遭遇效能問題,而過大的執行個體則會浪費資源。

設定資源用量基準

監控 FreeableMemory、Page Life Expectancy、Buffer Cache Hit Ratio (FreeableMemory、頁面預期壽命、緩衝區快取命中率) 等指標,以設定執行個體的資源用量基準。如果執行個體上的資料量大幅增加,請增加 max_server_memory 的值。請務必按照資料量變更的比例增加 max_server_memory 的值,以在執行個體上維持相同水準的效能。

備註:您可以使用 Reports 和 DMVs 等 SQL Server 原生工具來識別使用 SQL Server 內部記憶體的元件。使用 SQL Server Management Studio (SSMS) 可以檢閱 SQL Server 的記憶體用量:

  1. 開啟 SQL Server Management Studio (SSMS),然後連線到 RDS for SQL Server 執行個體。
  2. 在 Object Explorer 中,以滑鼠右鍵按一下 RDS 執行個體端點的名稱。
  3. 選取 Reports (報告)、Standard Reports (標準報告)、Memory Consumption (記憶體耗用量)。

此外,您也可以查詢 sys.dm_os_memory_clerks DMV,以識別 SQL Server 中使用最多記憶體的元件


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