SQL Server文件和文件组

在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,也只是几个文件而已。
数据库最常用的存储文件是数据文件日志文件
数据文件用于存储数据,由一个主数据文件.mdf和若干个辅助数据文件.ndf构成;日志文件用于存储事物日志,由.ldf文件构成。

数据文件(日志文件不存在文件组)的组合,称作文件组(File Group)。

数据库不能直接设置存储数据的数据文件,而是通过文件组来指定,即SQL Server通过管理逻辑上的文件组的方式来管理文件(文件是实际存储数据的物理实体,文件组是逻辑对象)。

一个数据库有一个或多个文件组,主文件组(Primary File Group)是系统自动创建的,用户可以根据需要添加文件组。每一个文件组管理一个或多个文件,其中主文件组中包含主数据文件(master data file)(主数据文件必须在主文件组中;主文件组中也可以包含辅助文件),扩展名是.mdf,这个文件是系统默认生成的,并且在数据库中是唯一的;辅助文件的扩展名是.ndf,是用户根据需要添加的。

使用文件组管理文件的好处

  1. 使逻辑文件和物理文件相分离
    在实际开发数据库的过程中,通常情况下,用户需要关注文件组,而不用关心文件的物理存储,即使DBA改变文件的物理存储,用户也不会察觉到,也不会影响数据库去执行查询。
  2. 分散硬盘IO负载,提高数据的读取速度
  • 对于单分区表,数据只能存到一个文件组中。如果把文件组内的数据文件分布在不同的物理硬盘上,那么SQL Server能同时从不同的物理硬盘上读写数据,把IO负载分散到不同的硬盘上。
  • 对于多分区表,每个分区使用一个文件组,把不同的数据子集存储在不同的磁盘上,SQL Server在读写某一个分组的数据时,能够调用不同的硬盘IO。
    这两种方式,其本质上,都是使每个硬盘均摊系统负载,提高IO性能

PS.

  • 创建分区表(不太明白…)时,不同的分区可以使用相同的文件组,也可以使用不同的文件组。因此,在设计文件组时,应尽量把包含的文件包含在不同的硬盘上,以实现物理IO的最大分散化。
  • 在创建文件时,服务器CPU核的数量,决定最大的并发IO度,应该根据CPU 核的数量创建多个文件。通常情况下,文件的数量和CPU核的数量一致,是最优化的设计。
  • 还有,应该根据硬盘的性能来创建文件组,日志文件存储到性能最好的硬盘上,而查询延迟要求高的数据,也需要存储到性能最好的硬盘上。
  • 不是所有的数据都是同等重要的,应该根据业务需求和查询延迟,对数据分级,因此,在设计文件组时,应该把级别高的数据分散,而把那些基本用不到的数据存储到性能差的,用于存储归档数据的硬盘上,以实现服务器性能的合理配置。
  • SQL SERVER会根据每个文件设置的初始大小和增长量会自动分配新加入的空间。假设在同一文件组中的文件A设置的大小为文件B的两倍,新增一个数据占用三页(Page),则按比例将2页分配到文件A中、1页分配到文件B中。从这一点可以看出如果将多个文件分配到单个文件组中,SQL Server是按照每个文件的配置来自动向这些文件中写入数据的,用户无法指定新插入表的数据应该放在哪个数据库文件。如果想要控制插入表的数据存放在特定的数据库文件,必须要使用分区表和多文件组机制,将一张表按照特定的数据规则划分为多个分区,每个分区使用一个特定的文件组,每个文件组使用不同的数据库文件。如何做呢?对于用户来说,可以/对创建的对象/产生的数据文件/指定其存储到的文件组位置/的/只有三种数据对象:索引大对象(LOB)。使用文件组可以隔离用户和文件,使得用户针对文件组来建立表和索引,而不是实际磁盘中的文件。当文件移动或修改时,由于用户建立的表和索引是建立在文件组上的,并不依赖具体文件,这大大加强了可管理性。

让产生的数据文件分散在不同的文件组的具体做法

1 .创建时——在on子句中指定文件组使得数据存储在该文件组包含的文件中:

CREATE TABLE [dbo].[student](
...
) ON [PRIMARY]

2 .创建索引时——在on子句指定文件组选项使得该表的索引结构存储在文件组包含的文件中:

CREATE NONCLUSTERED INDEX [idx_student_stuname] 
ON [dbo].[student]( [stuname] ASC ) 
ON [PRIMARY]

3 .创建分区时——在TO子句中指定文件组使得每一个分区存储到文件组中:

REATE PARTITION SCHEME scheme_name
AS PARTITION function_name 
TO ([fg_name1], <....>, [fp_nameN])

在这里插入图片描述

创建文件和文件组

  1. 在创建数据库时增加文件和文件组
  2. 向现有的数据库添加文件和文件组
    在这里插入图片描述
    在这里插入图片描述

数据文件大小增长导致的问题

  • 当数据文件爆满,没有空间存储数据时,此时执行insert命令,这会导致数据文件的增长。如果filegrowth选项设置的过大,会导致SQL Server耗费较长时间来实现文件的增长,在数据文件增长时,该文件是不能访问的,因此,即使用户仅插入一条数据,也要等待很长时间才能完成查询,对用户来说,体验不友好。
  • 数据文件增长是非常耗费系统资源和影响性能,如果设置SQL Server 自动增长,可能会导致系统性能不够稳定,所以,应该预测可能的空间使用需求,并提前做好规划。尽量避免空间用尽而使得SQL Server不得不自动增长的现象发生。同时也要确保每一次自动增长都能够在可接受的时间内完成,及时满足客户端应用的需求。

使用多个文件的优点与缺点

通常情况下,小型的数据库并不需要创建多个文件来分布数据。但是随着数据的增长,使用单个文件的弊端就开始显现。

优:

  • 使用多个文件分布数据到多个硬盘中可以极大的提高IO性能.
  • 多个文件对于数据略多的数据库来说,备份和恢复都会轻松很多。

劣:

  • 使用多文件需要占用更多的磁盘空间。这是因为每个文件中都有自己的一套B树组织方式,和自己的增长空间。当然了,还有一套自己的碎片。但是在大多数情况下,多占点磁盘空间带来的弊端要远远小于多文件带来的好处。

文件组的主次如何区分?分别用于存放何种类型的文件?
在这里插入图片描述
文件的主次之分?分别存放何种数据?
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值