为 Windows 上的 SQL Server 配置永久性内存 (PMEM)
本文介绍如何为 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,以模拟所需的扇区模式语义。 尽管通常建议将 BTT 与 NTFS 配合使用,但在使用大型页面时(例如要满足 DAX 的需求),不建议使用 BTT。
Get-PmemUnusedRegion | New-PmemDisk -Atomicity None
格式化 NTFS 卷
#Initialize PMEM Disk(s)
Get-PmemDisk | Initialize-Disk -PartitionStyle GPT
#Create New Partition(s) and Format the Volume(s) with DAX Mode
Get-PmemDisk[0] | `
New-Partition `
-UseMaximumSize `
-AssignDriveLetter `
-Offset 2097152 `
-Alignment 2097152 | `
Format-Volume `
-FileSystem NTFS `
-IsDAX:$True `
-AllocationUnitSize 2097152
文件对齐方式和偏移量
检查分区偏移量
Get-Partition | Select-Object DiskNumber, DriveLetter, IsDAX, Offset, Size, PartitionNumber | fl
使用 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
另请参阅
若需查看用于操作 PMEM 的其他 cmdlet,请参阅 PowerShell 参考文档中的 PersistentMemory。