SQL Server 中数据库文件的存放方式,文件和文件组(转)

为了保证原创权益,首先声明,此文章是转自博客园宋沄剑园友的文章,纯属个人学习之用,原文章地址为:

http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.html

简介

  在SQL Server中,数据库在硬盘上的存储方式和普通文件在windows中的存储方式没有什么不同,仅仅是几个文件而已,SQL Server通过管理逻辑上的文件组的方式管理文件,理解文件和文件组的概念对更好的配置数据库来说是基本的知识

理解文件和文件组

  在SQL Server中,通过文件组这个逻辑对象对存放数据的文件进行管理。

  先看一张图:

 

我们看到的逻辑数据库由一个或者多个文件组构成,而文件组管理着磁盘上的文件,而文件中存放着SQL Server的实际数据。

为什么通过文件组来管理文件

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

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

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

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

文件的分类

  1、首先文件:这个文件是必须有的,而且只能有一个。这个文件额外存放了其他文件位置等信息,扩展名为.mdf

  2、次要文件:可以任意多个,由于不同目的存放,扩展名为.ndf

  3、日志文件:存放日志,扩展名为.ldf

在SQL Server 2008之后,还新增了文件流数据文件和全文索引文件,

上述几种文件名扩展名可以随意修改,但是我推荐使用默认的扩展名。

我们可以通过如下语句查看数据库中的文件情况:

还有一点要注意的是,如果一个表是存在物理上的多个文件时,则表的数据页的组织为N(N为具体的几个文件)个B树,而不是一个对象一个B树。

创建和使用文件组

  创建文件或是文件组可以通过在SSMS或者T-SQL语句进行,对于一个数据库来说,既可以在创建时增加文件和文件组,也可以向现有的数据库添加文件和文件组,这几种方式大同小异,下面来看一下通过SSMS向现有数据库添加文件和文件组。

首先创建文件组:

文件组创建好后就可以向现有文件组中添加文件了:

 

下面我们就可以通过语句将创建的表或者索引加入到新的文件组中了:

 

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

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

首先,使用多个文件分布数据到多个硬盘中可以极大的提高IO性能。

其次,多个文件对于数据略多的数据库来说,备份和恢复都会轻松很多,我碰见过遇到一个150G的数据库,手头取没有那么大的存储设备...

但是,在数据库世界中,每一项好处都伴随着一个坏处:

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

 

 

posted @ 2012-02-28 22:58  指尖流淌  阅读(963)  评论(0编辑  收藏  举报