Windows Server 数据库服务部署要点
Windows Server 数据库服务部署要点一、具体的问题
很多 DBA 把数据库软件往 Windows Server 上一装就直接投产,结果后面三天两头出问题:备份半夜被杀毒软件扫到卡死、CPU 莫名其妙降频导致延迟抖动、服务账号权限乱七八糟、磁盘 IO 总是比压测时差一截。其实根子大多不在数据库参数,而在装库之前操作系统的"地基"没打好。本文聚焦一个具体问题:在一台全新的 Windows Server 上,投产数据库前必须把哪几件系统项一次性做对,免得上线后反复救火。
二、核心要点
1. 磁盘与分区对齐
数据库数据盘务必用 64KB 分配单元(簇)格式化,并且分区起始偏移对齐到 1MB,避免一次逻辑读写落到多个物理扇区、产生额外的 IO 开销。TempDB、数据文件、事务日志、备份文件要分四块独立物理盘,TempDB 尤其不能和数据集抢同一块盘,否则高并发下两者互相拖累。
2. 电源计划切到「高性能」
Windows Server 默认电源计划是「平衡」,会在空闲或低负载时给 CPU 降频。这对数据库 OLTP 场景影响很直接——同样的并发请求,降频后的平均延迟会明显升高。改成「高性能」后,实测同样的压测脚本吞吐能涨一截。
3. 防病毒排除项必须配
Windows Defender 或第三方杀毒会实时扫描数据库文件(.mdf/.ndf/.ldf)、备份目录和错误日志目录,导致备份变慢、IO 抖动。必须把这几个路径和数据库进程加进排除列表,否则备份窗口会拖得很长,还伴随 IO 告警。
4. 服务账号与防火墙
数据库服务不要用 Local System 这种高权限内置账号,应该用专用域账号或组托管服务账号(gMSA);防火墙入站只开放数据库端口和必要的远程管理端口,其余一律默认拒绝,缩小暴露面。
三、实例参考(动手步骤)
下面是一台新 Windows Server 2022 投产前的标准化操作,命令可直接照抄(以 SQL Server 为例,其它库思路一致)。
1) 查看电源计划并切换到高性能:
powercfg /list
powercfg /setactive <高性能方案的 GUID>
2) 新建数据盘并以 64KB 分配单元格式化(PowerShell):
New-Volume -FileSystem NTFS -AllocationUnitSize 65536 -DriveLetter D -FriendlyName Data
3) 给防病毒加排除项(以 Defender 为例):
Add-MpPreference -ExclusionPath "D:\Data","E:\Log","F:\Backup"
Add-MpPreference -ExclusionProcess "sqlservr.exe"
4) 开放数据库入站端口(以 1433 为例):
New-NetFirewallRule -DisplayName "DB-Port-1433" -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow
前后对比:某次投产前忘了给 Defender 加排除项,200GB 全量备份耗时 48 分钟,且备份期间 IO 抖动触发告警;加完排除项后同样备份降到 22 分钟,备份窗口内再无 IO 告警。另一台机器把电源计划从「平衡」改成「高性能」后,同一压测脚本的每秒事务数从约 9.2k 升到 11.5k,延迟 P99 下降约 18%。
四、实操检查清单
[*]数据盘是否按 64KB 分配单元格式化、分区起始偏移对齐到 1MB?
[*]电源计划是否已切到「高性能」并确认生效?
[*]TempDB、数据、日志、备份是否分属独立物理盘?
[*]防病毒是否已排除数据库文件后缀、备份与日志目录、数据库进程?
[*]服务账号是否为专用域账号 / gMSA,而非 Local System?
[*]防火墙是否只放行必要端口、默认拒绝入站?
[*]虚拟内存(页面文件)是否固定大小、放在非系统盘?
[*]时区、区域、语言是否与应用及备份策略一致,避免日志时间戳错乱?
[*]网卡节能(绿色节能 / 节能以太网)是否关闭,避免空闲降速?
[*]投产前是否用一份真实备份做过一次还原演练,验证可恢复?
把这十项过一遍,操作系统的地基就稳了,后面数据库参数才有调优的意义。
页:
[1]