動態記憶體管理

「Microsoft SQL Server Database Engine」的預設記憶體管理行為是以不造成系統發生記憶體短缺為前提,儘可能地取得所需的記憶體。「Database Engine」會使用 Microsoft Windows 的「記憶體通知 API」來達成。

SQL Server 的虛擬位址空間可分成兩個相異的區域:緩衝集區與其餘的空間。如果已啟用 AWE 機制,緩衝即區可能是位於 AWE 對應記憶體中,能為資料庫頁面提供額外的空間。

緩衝即區可做為 SQL Server 的主要記憶體配置來源。如 COM 物件會存在於 SQL Server 處理序內,且不會留意到 SQL Server 記憶體管理機能的外部元件,需使用緩衝集區所佔用之虛擬位址空間以外的記憶體。

SQL Server 啟動後,會根據系統上的參數量 (如實體記憶體量)、伺服器執行緒數量和許多的啟動參數,計算緩衝集區的虛擬位址空間的大小。SQL Server 會替緩衝集區將計算出的處理虛擬位址空間量保留下來,但它只會取得 (認可) 目前負載所需的實體記憶體量。

該執行個體接著會繼續視需要取得記憶體,來支援工作負載。當有更多使用者連接和執行查詢時,SQL Server 會依需要取得其他實體記憶體。SQL Server 執行個體會持續取得實體記憶體,直到達到它的 max server memory 配置目標,或直到 Windows 指出已無可用記憶體;當 Windows 有高於 min server memory 設定的記憶體數時,才會釋出記憶體,而且會指出發生可用記憶體短缺的狀況。

當其他應用程式開始在執行 SQL Server執行個體的電腦上執行時,它們會消耗記憶體,並使可用實體記憶體的數量掉到 SQL Server 目標以下。SQL Server 執行個體會調整它的記憶體耗用量。如果另一個應用程式已停止、並且有更多記憶體可以使用,那麼 SQL Server 的執行個體會增加其記憶體配置的大小。SQL Server 每秒可以釋放與取得數個 MB 的記憶體,讓它可以快速地調整記憶體配置的變化。