.ndf 数据文件是什么?什么时候分多文件
解释 .mdf 与 .ndf 文件格的区别、文件组的作用,以及大库何时该把数据文件拆到多个卷、拆几个的实用判断。
结论先行
.mdf 是主数据文件,每个库有且只有一个;.ndf 是从属数据文件(numbered data file),可以有多个,和主文件一起组成「文件组」。拆多文件的正当理由只有一个:让写入并发分散到多块磁盘(多卷/多 RAID 组)。小库拆文件纯属徒增管理负担。
三种文件角色对照
| 扩展名 | 角色 | 每库数量 |
|---|---|---|
| .mdf | 主数据文件,库定义存这里 | 恰好 1 个 |
| .ndf | 从属数据文件,按扩展区轮转写入 | 0 到多个 |
| .ldf | 事务日志文件 | 通常 1 个(最多 255 个但极少用) |
文件组是逻辑容器:一个文件组装多个 .mdf/.ndf,表、索引可指定落在某个文件组;默认组
PRIMARY里放着主文件。
什么时候该分多文件
- 看 I/O:单文件所在卷的磁盘利用率持续接近 100%,且瓶颈不在缓存而在落盘时,才考虑拆分。
- 看卷:拆出来的文件要放到不同物理卷才有意义(同卷多文件只增加句柄不增加带宽)。
- 数量经验值:常见做法是按该卷的 CPU 核心数给文件数(如 8 核配 4–8 个),具体数值视机型而定,以实测 IOPS 为准,勿套死公式。
怎么操作
-- 给 PRIMARY 文件组加一个从属文件到另一个卷
ALTER DATABASE Sales ADD FILE (NAME = N'Sales02', FILENAME = N'E:\data\Sales02.ndf', SIZE = 2GB) TO FILEGROUP PRIMARY;
通过 SSMS 管理工具条目 右键数据库 → 文件 → 添加数据文件(可勾选目标卷与大小)也能完成同样的事。新文件初始大小要预估到位——.ndf 的自动增长比主文件慢(按固定步长增长),频繁自动增长本身就是 I/O 抖动源。
SQL Server 2022 Developer 条目环境下练习拆分无成本;大库拆分规划可参考 SQL Server 产品族条目 各版本的部署建议。