如何對 RDS for SQL Server 執行個體中可用記憶體不足的問題進行疑難排解?
我想對 Amazon Relational Database (Amazon RDS) for SQL Server 執行個體中可用記憶體不足的問題進行疑難排解。
解決方法
監控執行個體的記憶體使用量
若要監控記憶體使用量,您可以使用 Amazon CloudWatch 指標或增強型監控。
使用 CloudWatch 指標
若要識別記憶體不足的情況,請使用 Amazon Aurora 和 RDS 主控台監控 FreeableMemory CloudWatch 指標。
若要在可用記憶體不足時識別工作負載的增加,請監控以下指標:
- DatabaseConnections
- CPUUtilization
- ReadIOPS
- ReadThroughput
- WriteIOPS
- WriteThroughput
如需上述指標的資訊,請參閱 Amazon RDS 的 Amazon CloudWatch 執行個體層級指標。
啟用增強型監控
若要監控 Microsoft SQL Server 的作業系統 (OS) 指標,請使用增強型監控。開啟增強型監控後,您可以將指標收集間隔設定為 1、5、10、15、30 或 60 秒。預設的精度為 60 秒,但最佳實務是將精度設為 1 或 5 秒。
您也可以使用增強型監控來建立 CloudWatch 警示,以監控 Amazon RDS for SQL Server 資料庫執行個體的記憶體使用情況。
限制 Amazon RDS 執行個體所使用的記憶體
確定執行個體的 max_server_memory 值,然後將 max_server_memory 設定為不會導致系統整體記憶體壓力的值。
確定 max_server_memory 值
使用下列計算來決定執行個體的 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 RAM 的伺服器,會保留 4 GB。
-
如果伺服器上的 RAM 超過 16 GB,則會每 4 GB RAM 保留 1 GB,最多為 16 GB。對於大於 16 GB 的 RAM,每 8 GB 保留 1 GB。
例如,如果伺服器有 64 GB 的 RAM,則 max_server_memory 的計算如下:
- 1 GB 用於作業系統
- 最高 16 GB RAM: 16/4 = 4 GB
- 剩餘 RAM 大於 16 GB: (64-16)/8 = 6 GB
- (1 GB 用於作業系統 + memory_basis_amount_of_RAM_on_the_server) = 1 + 4 + 6 = 11 GB
- max_server_memory: 64 - 11 = 53 GB
設定 max_server_memory
若要變更 max_server_memory,請使用自訂參數群組來設定值。提供最大伺服器記憶體 (MB) 中 max_server_memory 的值。由於 max_server_memory 是動態參數,所以您不需要重新啟動即可使變更生效。
**注意:**設定 max_server_memory 後,您必須持續監控 FreeableMemory,以確定是否增加或減少分配的記憶體。
檢查您是否在資料庫執行個體上使用 SSIS、SSAS 或 SSRS 選項
檢查您的 RDS 選項群組,以確定您是否在資料庫執行個體上使用 SQL Server Integration Services (SSIS)、SQL Server Analysis Services (SSAS) 或 SQL Server Reporting Services (SSRS) 選項。此選項使用的記憶體位於 max_server_memory 設定之外,並增加了執行個體上的記憶體佔用空間。如果您沒有使用這些選項,請修改選項群組以將其移除。
**注意:**如果您在執行個體上使用 SSIS、SSAS 或 SSRS,則必須調整 max_server_memory 以配合選項。
例如,如果您使用 SSRS,請將 SSRS 最大記憶體值設定為資料庫執行個體總記憶體的 10%。例如,對於具有 64 GiB 記憶體的執行個體,10% 約為 6.4 GiB。因此,將 max_server_memory 值調整為約 46 GiB (64 - 11 - 6.4 = 46 GiB)。
檢查資料庫連線
每個與執行個體建立的資料庫連線,都需要在緩衝集區之外分配一些記憶體,以供工作執行緒使用。因此,DatabaseConnections 爆量可能會導致可用記憶體下降。
使用 Performance Insights 監控資料庫執行個體
您可以使用 Performance Insights 來分析資料庫效能,並識別導致執行個體速度變慢的潛在瓶頸。使用 Performance Insights 儀表板監控資料庫負載、等待、查詢、主機和使用者。
對資料庫執行個體執行定期維護
定期執行索引維護並保持統計資料更新。高度碎片化的索引會增加 I/O 活動並導致記憶體使用量增加。此外,過時的統計資料可能會導致基數估計不準確,並導致資料庫選擇次優的查詢計劃。如需詳細資訊,請參閱 Microsoft 網站上的最佳化索引維護,以提高查詢效能並減少資源消耗。另請參閱 Microsoft 網站上的更新統計資料 (Transact-SQL)。
**注意:**最佳實務是在非尖峰時段或維護時段執行索引和統計資料維護。
監控 PLE 和 BCHR
若要識別記憶體壓力,請監控頁面預期壽命 (PLE) 和緩衝區快取命中率 (BCHR)。為了獲得最佳效能,請檢查 PLE 和 BCHR 的值是否已盡力提高。如果 PLE 和 BCHR 的值在一段時間內持續較低,請調整存取資料的查詢,或增加執行個體類別以提供更多記憶體。
若要使用 Performance Insights 監控指標,請完成以下步驟:
- 開啟 Aurora 和 RDS 主控台。
- 在導覽窗格中,選擇 Performance Insights。
- 使用 Filter a DB instance (篩選資料庫執行個體) 搜尋欄位,選取要監控的執行個體。
- 設定您想要查看指標的時間範圍。
- 在 Metrics dashboard (指標儀表板) 中,選取 Custom dashboard - SQL Server database (自訂儀表板-SQL Server 資料庫),然後選擇 Add first widget (新增第一個小工具)。
- 在 Filter metrics by name, category or ID (依名稱、類別或 ID 篩選指標) 搜尋欄位中,搜尋 Page Life Expectancy (頁面預期壽命),然後加以選取。
- 選擇 Add Widget (新增小工具)。
- 重複步驟 6 和步驟 7,在自訂儀表板選取 Buffer Cache Hit Ratio (緩衝快取命中比率)。
如需 PLE 和 BCHR 的詳細資訊,請參閱 Microsoft 網站上的緩衝區管理器效能物件。
當執行個體存在記憶體壓力且 PLE 和 BCHR 較低時,PAGEIOLATCH 等待時間會增加。Microsoft SQL Server 正在等待將頁面從磁碟載入到記憶體。當查詢的記憶體請求因記憶體不足而失敗時,您可能也會看到 RESOURCE_SEMAPHORE 等待。此時,CPU 使用量會增加,因為資料頁面在記憶體中快取的時間不夠長。發生這種情況時,Microsoft SQL Server 必須重複存取磁碟上的資料。
為您的工作負載選擇正確的執行個體大小
執行個體上的記憶體數量取決於執行個體類型。請確定您選取具有足夠資源的執行個體類別,以便資料庫執行個體具有足夠的資源來處理工作負載。當執行個體的資源較少時,您會遇到效能問題。執行個體過大會浪費資源。
例如,db.r5.8xlarge 執行個體類別提供 32 個 vCPU 和 256 GiB 記憶體。當您使用 db.r5.8xlarge 佈建 Amazon RDS 執行個體時,下列資源會共用執行個體類別上的所有 256 GiB 記憶體:
- 作業系統
- Amazon RDS 程序
- 資料庫引擎
- 工作執行緒
- 商業智慧套件應用程式,例如 SSIS、SSAS 和 SSRS。
如需 Microsoft SQL Server 如何使用記憶體的詳細資訊,請參閱 Microsoft 網站上的記憶體管理架構指南。
確定資源使用基準
若要確定執行個體上資源使用情況的基準,請監控諸如 FreeableMemory、頁面預期壽命和緩衝區快取命中率等指標。如果執行個體上的資料量顯著增加,請增加 max_server_memory 值。請確定根據資料量變化比例增加 max_server_memory 值,以保持執行個體的相同效能水準。
**注意:**若要識別使用 SQL Server 內部使用記憶體的元件,您可以使用 SQL Server 工具,例如報表和 DMV。
若要使用 SQL Server Management Studio (SSMS) 檢視 SQL Server 記憶體使用情況,請完成下列步驟:
- 開啟 SSMS,然後連線到您的 Amazon RDS for SQL Server 執行個體。
- 在 Object Explorer (物件總管) 中,以滑鼠右鍵按一下 Amazon RDS 執行個體端點名稱。
- 選擇 Reports (報告)、Standard Reports (標準報告)、Memory Consumption (記憶體消耗)。
若要下載 SSMS,請參閱 Microsoft 網站上的下載 SQL Server Management Studio (SSMS)。
您也可以查詢 sys.dm_os_memory_clerks 來識別 SQL Server 內部使用最大記憶體的元件。如需詳細資訊,請參閱 Microsoft 網站上的 sys.dm_os_memory_clerks (Transact-SQL) 和 SQL Server 引擎的內部記憶體使用情況。
相關內容
已提問 3 年前
已提問 3 年前
