混合式緩衝集區

適用於:SQL Server 2019 (15.x) 和更新版本

混合式緩衝集區可讓緩衝集區物件參考位於持續性記憶體 (PMEM) 裝置上資料庫檔案中的資料頁,而不必從磁碟中擷取資料頁面的複本,並在揮發性 DRAM 中快取這些複本。 此功能是在 SQL Server 2019 (15.x) 中引進,並在 SQL Server 2022 (16.x) 中進一步增強。

Diagram showing the buffer pool, with and without the hybrid buffer pool enabled.

持續性記憶體 (PMEM) 裝置為位元組可定址,且如果使用直接存取 (DAX) 持續性記憶體感知檔案系統 (例如 XFS、EXT4 或 NTFS),則可以使用 OS 中一般檔案系統 API 來存取檔案系統上的檔案。 或者,SQL Server 也可以針對 PMEM 裝置上檔案的記憶體對應,執行所謂的「載入和儲存」作業。 這可讓 PMEM 感知應用程式 (例如 SQL Server) 存取裝置上的檔案,而不需要周遊傳統的儲存體堆疊。

混合式緩衝集區會使用此功能,針對記憶體對應檔案執行載入和儲存作業,以將 PMEM 裝置同時用作緩衝集區的快取,以及資料庫檔案的儲存位置。 這會造成獨特的情況,就是邏輯讀取和實體讀取基本上變成相同的作業。 持續性記憶體裝置可透過記憶體匯流排來存取,如同一般的揮發性 DRAM。

根據預設,只會在混合式緩衝集區的 PMEM 模組上快取清除資料頁面。 針對要修改並標示為中途的頁面,必須將其從 PMEM 裝置複製到 DRAM 緩衝集區、進行修改,然後最後將已修改的頁面複本從 DRAM 寫回 PMEM 模組,此時可以再次將其標示為清除。 此程序使用一般背景作業進行,例如檢查點或延遲寫入器,就像 PMEM 模組是標準區塊裝置一樣。

Windows 和 Linux 都提供混合式緩衝集區功能。 PMEM 裝置必須使用支援 DAX (DirectAccess) 的檔案系統。 XFS、EXT4 和 NTFS 檔案系統全都支援 DAX 延伸模組,其可讓您直接從使用者空間存取檔案系統。 SQL Server 將偵測任何資料庫資料檔案是否位於適當設定的 PMEM 磁碟裝置上,並在資料庫啟動時自動執行資料庫檔案的記憶體對應,或每當附加、還原或建立資料庫時就執行此動作。

如需詳細資訊,請參閱

啟用混合式緩衝集區

SQL Server 2019 (15.x) 引進動態資料語言 (DDL) 以控制混合式緩衝集區。

下例針對 SQL Server 執行個體啟用混合式緩衝集區:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = ON;

根據預設,混合式緩衝集區在執行個體範圍上停用。 為了讓設定變更生效,必須重新啟動 SQL Server 執行個體。 需要重新啟動以方便配置足夠的雜湊頁,將伺服器上的總 PMEM 容量納入考量。

下例針對特定資料庫啟用混合式緩衝集區。

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = ON;

根據預設,混合式緩衝集區在資料庫範圍上啟用。

停用混合式緩衝集區

下列範例會停用執行個體層級的混合式緩衝集區:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED HYBRID_BUFFER_POOL = OFF;

根據預設,混合式緩衝集區在執行個體層級上停用。 為了讓這項變更生效,必須重新啟動執行個體。 重新啟動可以確保為緩衝集區配置足夠的雜湊頁,因為現在需要將伺服器上的 PMEM 容量納入考量。

下例針對特定資料庫停用混合式緩衝集區。

ALTER DATABASE <databaseName> SET MEMORY_OPTIMIZED = OFF;

根據預設,混合式緩衝集區會在資料庫範圍啟用,並在伺服器範圍停用。

檢視混合式緩衝集區設定

顯示執行階段值

下列範例會傳回執行個體的目前混合式緩衝集區設定狀態。

SELECT * FROM
sys.server_memory_optimized_hybrid_buffer_pool_configuration;

下列範例列出混合式緩衝集區的資料庫及資料庫層級設定 (is_memory_optimized_enabled)。

您也可以掛接或格式化未啟用 DAX 的 PMEM 模組,並將其視為一般區塊裝置 (也就是說,透過核心執行 I/O)。 以這種方式設定時,SQL Server 可能不會使用 PMEM 模組來執行位元組可定址作業 (也就是說,所有呼叫都會使用核心空間驅動程式)。

SELECT name, is_memory_optimized_enabled FROM sys.databases;

具有直接寫入的混合式緩衝集區

具有「直接寫入」行為的混合式緩衝集區可減少在已修改資料或索引頁面 (位於 PMEM 裝置) 上必須執行的 memcpy 命令數目。 做法是使用耐久保存的記錄緩衝區做為修改頁面的方法,而不需要將其複製到其中一個 DRAM 緩衝集區。 相反地,直接修改資料庫檔案 (位於 PMEM 裝置) 中的頁面,而不需要在 DRAM 緩衝集區中快取,且稍後會以非同步方式排清至磁碟。 此行為仍會遵循預寫記錄 (WAL) 語意,因為保存的交易記錄緩衝區中的記錄已寫入或強化至耐久媒體。 對於以此方式一起使用混合式緩衝集區和保存的記錄緩衝區的交易式工作負載,觀察到其效能大幅提升。

若要啟用直接寫入模式,請針對資料庫啟用混合式緩衝集區和保存的記錄緩衝區,並啟用啟動追蹤旗標 809

混合式緩衝集區的最佳做法

  • 在 Windows 上格式化 PMEM 裝置時,請使用 NTFS 可提供的最大配置單位大小 (Windows Server 2019 和更新版本為 2 MB),並確定裝置已針對 DAX (直接存取) 格式化。

  • 在 Windows 上啟用鎖定記憶體中的分頁原則。

  • 檔案大小應該是 2 MB 的倍數 (模數 2 MB 應該等於零)。

  • 如果混合式緩衝集區的伺服器範圍設定為停用,則任何使用者資料庫都不會使用此功能。

  • 在混合式緩衝集區的伺服器範圍設定已啟用的情況下,您可以使用資料庫範圍設定來停用個別使用者資料庫的功能。

  • 從 2019 SQL Server 2019 (15.x) CU 3 開始 (請參閱 KB4538118),讀取快取預設為已啟用,這是在混合式緩衝集區中追蹤最常用頁面的程序,然後自動升級至 DRAM 緩衝集區以改善效能。

  • 從 SQL Server 2022 (16.x) CU 1 開始,當混合式緩衝集區與保存的記錄緩衝區結合時,「直接寫入」是預設行為。 這應該可改善幾乎所有工作負載的效能,但一定會有迴歸的機會,而且應在套用之前徹底測試 CU。 如果您由於此行為變更而遇到迴歸,則可以使用啟動追蹤旗標 898 還原為先前的行為。

  • 從 2022 SQL Server 2022 (16.x) CU 1 開始,啟動時 SQL Server 將會忽略追蹤旗標 809。 追蹤旗標 809 和追蹤旗標 898僅適用於 Windows,而不適用於 Linux 上的 SQL Server。 只有在經過認證的 Microsoft Server 專業人員引導您使用追蹤旗標時才使用。