在 SQL Server 2014 中引進,緩衝池擴充功能提供非揮發性隨機存取記憶體(也就是固態硬碟)延伸模組與 Database Engine 緩衝池的無縫整合,以大幅改善 I/O 輸送量。 每個 SQL Server 版本都無法使用緩衝池擴充功能。 如需詳細資訊,請參閱 SQL Server 2014 版本支援的功能。
緩衝池延伸模組的優點
SQL Server 資料庫的主要用途是為了儲存和抓取資料,因此大量磁碟 I/O 是 Database Engine 的核心特性。 因為磁碟 I/O 作業會消耗許多資源,而且需要相對較長的時間才能完成,所以 SQL Server 非常注重提高 I/O 的效率。 緩衝即區可做為 SQL Server 的主要記憶體配置來源。 緩衝區管理是達成這種效率的重要元件。 緩衝區管理元件包含兩種機制:用來存取和更新資料庫頁面的緩衝區管理員,以及緩衝池),以減少資料庫檔案 I/O。
資料與索引頁面都會從磁碟讀入緩衝集區,而修改的頁面 (也稱為中途分頁) 則會重新寫入磁碟。 伺服器和資料庫檢查點的記憶體壓力會導致緩衝區快取中使用頻繁 (使用中) 的中途分頁從快取收回並寫入機械磁碟,然後再重新讀入快取中。 這些 I/O 作業通常是以 4 到 16 KB 數據的順序進行小型隨機讀取和寫入。 小型隨機 I/O 模式會產生頻繁的搜尋、競爭機械磁碟臂、增加 I/O 延遲,並降低系統的彙總 I/O 輸送量。
解決這些 I/O 瓶頸的一般方法是加入更多 DRAM,或者加入高效能的 SAS 主軸。 雖然這些選項很有説明,但它們有顯著的缺點:DRAM 比數據儲存磁碟驅動器更昂貴,而且增加主軸會增加硬體取得的資本支出,並增加耗電量和增加元件故障機率來增加營運成本。
緩衝集區擴充功能可透過非動態儲存 (通常是 SSD) 延伸緩衝集區快取。 因為有了這個延伸模組,緩衝集區可以容納更大的資料庫工作集,強制將 RAM 與 SSD 之間的 I/O 分頁。 這樣可有效地將機械磁碟中的小型隨機 I/O 卸載到 SSD。 由於 SSD 的延遲較低而且隨機 I/O 效能更好,所以緩衝集區擴充會大幅提高 I/O 輸送量。
下列清單描述緩衝集區擴充功能的優點。
增加隨機 I/O 輸送量
減少 I/O 延遲
增加交易輸送量
透過更大的混合式緩衝集區來提升讀取效能
可以充分利用現有和將來的低成本記憶體磁碟的快取架構
概念
下列詞彙適用於緩衝集區擴充功能。
固態硬碟 (SSD) 固態硬碟會以永續性的方式將數據儲存在記憶體 (RAM) 中。 如需詳細資訊,請參閱 此定義。
在 SQL Server 中,緩衝區是記憶體中的 8 KB 頁面,大小與數據或索引頁相同。 因此,緩衝區快取也分成 8 KB 的頁面。 頁面會保留在緩衝區快取中,直到緩衝區管理員需要緩衝區來讀取更多資料為止。 只有在修改數據時,才會將數據寫回磁碟。 這些記憶體中已修改的頁面稱為中途分頁。 當頁面的狀態與磁碟上的資料庫映像一致時,即為乾淨。 在重新寫入磁碟之前,可以多次修改緩衝區快取中的資料。
緩衝池 也稱為緩衝快取。 緩衝集區是所有資料庫的快取資料頁面所共用的全域資源。 緩衝池快取的大小上限和最小大小是在啟動期間決定,或是使用 sp_configure 動態重新設定 SQL Server 實例時。 此大小會決定執行中的執行個體內隨時可在緩衝集區內快取的最大頁數。
檢查點會建立一個已知良好狀態,資料庫引擎在非預期的關機或當機後的復原期間,可以從該狀態開始應用事務歷史記錄中包含的變更。 檢查點會將中途分頁和交易記錄資訊從記憶體寫入磁碟,也會記錄有關交易記錄的資訊。 如需詳細資訊,請參閱資料庫檢查點 (SQL Server)。
緩衝池延伸模組詳細數據
SSD 儲存體是當做記憶體子系統的延伸模組來使用,而非磁碟儲存體的子系統。 也就是說,緩衝集區擴充檔案允許緩衝集區管理員使用 DRAM 和 NAND 快閃記憶體,在 SSD 支援的非揮發性隨機存取記憶體中維護較大的 lukewarm 頁面緩衝集區。 這樣會建立多層級快取階層,其中的層級 1 (L1) 為 DRAM,而層級 (L2) 為 SSD 上的緩衝集區擴充檔案。 只有乾淨的頁面會寫入 L2 快取中,如此有助於維護資料安全。 緩衝區管理員會處理 L1 與 L2 快取之間非中途頁面的移動。
下圖提供緩衝集區相較於其他 SQL Server 元件的大略架構概觀。
啟用時,緩衝集區擴充會指定 SSD 上緩衝集區快取檔案的大小和檔案路徑。 這個檔案是 SSD 上連續的儲存範圍,而且會在啟動 SQL Server 執行個體的期間以靜態方式設定。 只有當緩衝集區擴充功能停用時,才能執行檔案組態參數的更改。 當停用緩衝集區擴充時,所有相關的組態設定都會從登錄中移除。 當 SQL Server 執行個體關機後,便會刪除緩衝集區擴充檔案。
最佳做法
我們建議您依照以下的最佳作法進行。
第一次啟用緩衝池擴充功能之後,建議您重新啟動SQL Server 實例,以取得最大的效能優勢。
緩衝池擴充大小在 Enterprise 版中可以高達 max_server_memory 值的 32 倍,而在標準版中則最多為 4 倍。 我們建議物理記憶體大小(max_server_memory)與緩衝池擴充大小的比率為 1:16 或以下。 1:4 到 1:8 範圍內的較低比例可能是最佳。 如需設定 max_server_memory 選項的相關信息,請參閱 伺服器記憶體伺服器組態選項。
在生產環境中實作之前,請徹底測試緩衝集區擴充。 進入生產環境之後,請避免對檔案進行組態變更或關閉功能。 這些活動可能會對伺服器效能造成負面影響,因為停用功能時,緩衝池的大小會大幅減少。 停用時,在重新啟動 SQL Server 實例之前,不會回收用來支援此功能的記憶體。 不過,如果重新啟用此功能,則會重複使用記憶體,而不會重新啟動 實例。
傳回緩衝池擴展的相關資訊
您可以使用下列動態管理檢視顯示緩衝集區擴充的組態,並傳回有關擴充中資料頁的資訊。
SQL Server 中的緩衝區管理員物件有提供效能計數器,以便追蹤緩衝集區擴充檔案中的資料頁面。 如需詳細資訊,請參閱< 緩衝集區擴充效能計數器>。
下列 Xevents 可供使用。
| XEvent | 說明 | 參數 |
|---|---|---|
| sqlserver.buffer_pool_extension_pages_written | 會在從緩衝集區收回一個頁面或一組頁面,並將頁面寫入緩衝集區擴充檔時引發。 | 頁碼 first_page_id 第一頁位移 起始者_NUMA_節點_識別碼 |
| sqlserver.緩衝池擴展頁讀取 | 會在從緩衝集區擴充檔案將頁面讀到緩衝集區時引發。 | 頁碼 first_page_id 首頁偏移量 initiator_numa_node_id |
| sqlserver.buffer_pool_extension_pages_evicted | 會在從緩衝集區擴充檔收回頁面時引發。 | 頁碼 第一頁識別碼 第一頁偏移量 始動器Numa節點識別碼 |
| sqlserver.buffer_pool_eviction_thresholds_recalculated | 會在計算收回臨界值時引發。 | 溫暖閾值 冷門檻 頁面_繞過_驅逐 eviction_bypass_reason(繞過驅逐原因) 驅逐繞過原因說明 |
相關工作
| 工作描述 | 主題 |
| 啟用及設定緩衝集區擴充 | ALTER SERVER CONFIGURATION (Transact-SQL) |
| 修改緩衝集區擴充組態 | ALTER SERVER CONFIGURATION (Transact-SQL) |
| 檢視緩衝集區擴充組態 | sys.dm_os_buffer_pool_extension_configuration (Transact-SQL) |
| 監視緩衝集區擴充 |
sys.dm_os_buffer_descriptors (Transact-SQL) 效能計數器 |