为 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 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