如何對 RDS for SQL Server 執行個體可用記憶體不足的問題進行疑難排解?
如何對 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 監控這些指標,請執行下列操作:
- 開啟 Amazon RDS 主控台。
- 選取 Performance Insights。
- 選取您要監控的 RDS for SQL Server 執行個體。
- 設定您要檢閱其指標的時間範圍,然後選取 Manage Metrics (管理指標)。
- 選取 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 的記憶體用量:
- 開啟 SQL Server Management Studio (SSMS),然後連線到 RDS for SQL Server 執行個體。
- 在 Object Explorer 中,以滑鼠右鍵按一下 RDS 執行個體端點的名稱。
- 選取 Reports (報告)、Standard Reports (標準報告)、Memory Consumption (記憶體耗用量)。
此外,您也可以查詢 sys.dm_os_memory_clerks DMV,以識別 SQL Server 中使用最多記憶體的元件。
相關內容
- 已提問 2 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前