Azure Lsv3虚拟机本地NVME盘能否用于SQL TempDB及自动初始化?
Azure存储优化型VM NVMe临时磁盘的自动挂载与使用场景
问题背景
我使用的存储优化型VM附带1.8TB NVMe临时磁盘,这类磁盘在VM停止/解除分配时会丢失数据。目前遇到两个核心问题:
- 每次VM重启后,该NVMe磁盘需要手动初始化、格式化并分配驱动器号,无法像另一块SSD临时磁盘那样重置后保持可用状态。我希望用它缓解100多个数据库竞争TempDB空间的压力,但需要在
SqlServer.exe启动前完成自动挂载操作。 - 除了TempDB场景外,想了解这类NVMe临时磁盘还有哪些实用的使用场景。
我曾做过测试:启动时手动初始化磁盘、创建NTFS文件系统并写入小文件,同时在SSD临时磁盘做相同操作;停止VM并调整为等效Lasv3机型后重启,发现SSD临时磁盘正常可用,但NVMe磁盘需要重新初始化。
解决方案:NVMe磁盘自动初始化与挂载(SQL Server启动前完成)
要在SQL Server启动前完成NVMe磁盘的初始化、格式化和挂载,可通过以下步骤实现:
1. 编写PowerShell自动操作脚本
检测未初始化的NVMe磁盘并完成全流程操作,示例脚本如下:
# 筛选未初始化的1.8TB级NVMe磁盘 $targetDisk = Get-Disk | Where-Object { $_.OperationalStatus -eq 'Offline' -and $_.MediaType -eq 'SSD' -and [math]::Round($_.Size / 1TB, 1) -eq 1.8 } if ($targetDisk) { # 初始化磁盘为GPT格式 Initialize-Disk -Number $targetDisk.Number -PartitionStyle GPT -Confirm:$false # 创建分区并分配驱动器号 $newPartition = New-Partition -DiskNumber $targetDisk.Number -UseMaximumSize -AssignDriveLetter -Confirm:$false # 格式化为NTFS文件系统 Format-Volume -DriveLetter $newPartition.DriveLetter -FileSystem NTFS -NewFileSystemLabel "NVMeTemp" -Confirm:$false }
2. 配置任务计划确保SQL Server启动前执行脚本
- 将脚本保存为
Initialize-NVMeDisk.ps1,放在VM本地持久化磁盘(如C:\Scripts目录)。 - 创建Windows任务计划:
- 触发器设置为「系统启动时」。
- 操作设置为运行命令:
powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\Initialize-NVMeDisk.ps1。 - 任务权限选择「本地系统账户」,取消勾选「只有在计算机使用交流电源时才启动此任务」。
- 将SQL Server服务的启动类型改为「自动(延迟启动)」,或在任务计划中设置「任务完成后启动SQL Server服务」,确保磁盘操作优先完成。
NVMe临时磁盘的其他使用场景
- 应用缓存层:为Redis本地缓存、应用临时数据缓存提供存储,利用NVMe低延迟特性加速高频读写操作。
- 临时计算存储:用于大数据批量处理、ETL临时数据存储等一次性计算任务,任务完成后无需保留数据。
- 日志临时存储:将应用调试日志、中间运行日志写入NVMe磁盘,避免占用持久化磁盘IO,日志定期自动清理。
- CI/CD构建缓存:存储构建依赖包、编译中间文件,加速DevOps构建流程,构建完成后可直接丢弃缓存。
内容的提问来源于stack exchange,提问作者Mitz
相关产品推荐
相关产品推荐

