为 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