本文說明如何在 Windows 上設定 SQL Server 2016 (13.x) 和更新版本的持續記憶體 (PMEM)。
概述
SQL Server 2019 (15.x) 具有數個依賴持續性記憶體的記憶體內部資料庫功能。 本文件涵蓋在 Windows 上設定 SQL Server 持續性記憶體所需的步驟。
注意
引入了 啟示 一詞,傳達使用持久性記憶體感知檔案系統的概念。 NTFS 檔案系統的直接存取(DAX)擴充功能可讓您將記憶體映射檔案從核心空間映射到使用者空間。 當檔案被映射到用戶空間時,應用程式可以直接對映射到記憶體的檔案發出載入/儲存指令,從而完全繞過核心的 I/O 堆疊。 這被視為「覺察型」檔案存取方法。 從 Windows Server 2022 起,Windows 和 Linux 平臺上都提供這項 啟蒙 功能。
設定裝置
建立 PMEM 裝置的命名空間
在 Windows 中,使用 ipmctl 公用程式來設定 PMEM 磁碟(稱為 Linux 中的命名空間)。 您可以在這裏 找到 Intel® Optane™ 特定指示。 不同 Windows 版本上支援的 PMEM 硬體詳細數據位於 瞭解及部署持續性記憶體。 PMEM 磁碟應該交錯使用於 PMEM NVDIMM 之間,並且可以提供不同類型的用戶空間存取,以訪問裝置上的記憶體區域。 如需 Windows 中交錯集的詳細資訊,請參閱 瞭解和部署持續性記憶體。
PMEM 磁碟
使用 PowerShell 檢查 PMEM 磁碟
#Get information about all physical disks
Get-PhysicalDisk
#Review logical configuration of PMEM disks
Get-PmemDisk
#Get information about PMEM devices
Get-PmemPhysicalDevice
#Get information about unused PMEM regions
Get-PmemUnusedRegion
BTT 和 DAX
根據預設,New-PmemDisk 會使用所需的 FSDax 模式。 原子性設為預設 None,而不是 BlockTranslationTable。 從支持的觀點來看,必須啟用交易日誌的 BTT,以模擬期望的扇區模式語義。 雖然通常建議搭配 NTFS 使用 BTT ,但使用大型頁面時不建議使用 BTT,例如 DAX 的必要頁面。
Get-PmemUnusedRegion | New-PmemDisk -Atomicity None
格式化 NTFS 磁碟區
#Initialize PMEM disks
Get-PmemDisk | Initialize-Disk -PartitionStyle GPT
#Create new partitions and format the volumes with DAX Mode
$partition = @{ UseMaximumSize = $true; AssignDriveLetter = $true; Offset = 2097152; Alignment = 2097152 }
$volume = @{ FileSystem = 'NTFS'; IsDAX = $true; AllocationUnitSize = 2097152 }
Get-PmemDisk[0] | New-Partition @partition | Format-Volume @volume
檔案對齊和位移
檢查分割區偏移
Get-Partition | Select-Object DiskNumber, DriveLetter, IsDAX, Offset, Size, PartitionNumber | Format-List
使用 fsutil檢查特定檔案的檔案對齊方式。 我們的檔案大小必須是 2 MB 的倍數。
fsutil dax queryFileAlignment A:\AdventureWorks2022_A.mdf
更換 PMEM
重新布建 PMEM 磁碟
每當更換 PMEM 模組時,都必須重新佈建。
注意
拿掉 PMEM 磁碟會導致該磁碟上的數據遺失。
# Remove all PMEM disks
Get-PmemDisk | Remove-PmemDisk -Confirm:$false
清除 PMEM 模組
若要永久清除 PMEM 模組中的數據,請使用 Initialize-PmemPhysicalDevice PowerShell Cmdlet。
# Reinitialize all PMEM disks
Get-PmemPhysicalDevice | Initialize-PmemPhysicalDevice -Confirm:$false