SQL Server 的文件组和文件

1.默认情况

一般创建数据库后,有两个文件,后缀分别为 .mdf(主要文件) 和 .ldf(日志文件) 默认只有一个文件组

2.添加文件组,文件组是用来放文件的(用户可以添加文件 后缀默认为 .ndf的文件)

 

3.添加文件

 

4.为什么用文件组

对于用户角度来说,需对创建的对象指定存储的文件组只有三种数据对象:表,索引和大对象(LOB)

    使用文件组可以隔离用户和文件,使得用户针对文件组来建立表和索引,而不是实际磁盘中的文件。当文件移动或修改时,由于用户建立的表和索引是建立在文件组上的,并不依赖具体文件,这大大加强了可管理性.

    还有一点是,使用文件组来管理文件可以使得同一文件组内的不同文件分布在不同的硬盘中,极大的提高了IO性能.

    SQL SERVER会根据每个文件设置的初始大小和增长量会自动分配新加入的空间,假设在同一文件组中的文件A设置的大小为文件B的两倍,新增一个数据占用三页(Page),则按比例将2页分配到文件A中,1页分配到文件B中.(必须文件和文件在同一个文件组中)

5.为什么用文件(.ndf)

可以缓解磁盘压力,将表数据分散在不同的磁盘位置,提升IO性能,特别是在有做 磁盘阵列 的服务器上

6.利弊

同时,因为每个文件中都有自己的一套B树组织方式和自己的增长空间,所以,使用多文件需要占用更多的磁盘空间。

7.示例

 

--当前数据库,查询文件组、文件
SELECT df.[name],df.physical_name,df.[size],
df.[growth],f.[name] AS [filegroup],f.[is_default]
FROM sys.database_files df
LEFT JOIN sys.filegroups f
ON df.data_space_id = f.data_space_id

 

 

 

--当前数据库,数据文件占用与剩余空间
SELECT DB_NAME() AS DbName,
name AS FileName,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files;

未添加数据之前(剩余空间)

---添加数据:

--测试数据
DECLARE @num INT=0
WHILE @num<200000
BEGIN
INSERT INTO TempA VALUES(222)
SET @num=@num+1
END

---添加后:

由此可以看出,数据被分散到同一文件组下的 两个文件中了,文件增长空间是:当前文件组下的所有文件空间都满了才会去按增长量 增长当前需要写入的文件空间

 

转载于:https://www.cnblogs.com/JsonYang/p/3796251.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值