一:文件组理论概述:
Microsoft SQL Server2000
使用一组操作系统文件映射数据库。数据库中的所有数据和对象(如表、存储过程、触发器和视图)都存储在下列操作系统文件中:
· ★主要
该文件包含数据库的启动信息,并用于存储数据。每个数据库都有一个主要数据文件。
· ★次要
这些文件含有不能置于主要数据文件中的所有数据。如果主文件可以包含数据库中的所有数据,那么数据库就不需要次要数据文件。有些数据库可能足够大故需要多个次要数据文件,或使用位于不同磁盘驱动器上的辅助文件将数据扩展到多个磁盘。
· ★事务日志
这些文件包含用于恢复数据库的日志信息。每个数据库都必须至少有一个日志文件。
文件组允许对文件进行分组,以便于管理和数据的分配/放置。例如,可以分别在三个硬盘驱动器上创建三个文件(Data1.ndf、Data2.ndf 和
Data3.ndf),并将这三个文件指派到文件组 fgroup1 中。然后,可以明确地在文件组 fgroup1
上创建一个表。对表中数据的查询将分散到三个磁盘上,因而性能得以提高。在
RAID(独立磁盘冗余阵列)条带集上创建单个文件也可以获得相同的性能改善。然而,文件和文件组使您得以在新磁盘上轻易地添加新文件。另外,如果数据库超过单个
Microsoft Windows NT®
文件的最大大小,则可以使用次要数据文件允许数据库继续增长。包含主文件的文件组为主文件组。在创建数据库时,主文件组包含主要数据文件和任何其它未放入另一个文件组中的文件。所有系统表都分配在主文件组中。如果主文件组空间耗尽,那么将不能向系统表添加新目录信息。只要在下列情况下,主文件组才会填满:关闭了自动增长选项,或者含有主文件组中文件的所有磁盘空间耗尽。如果发生这种情况,要么重新打开自动增长,要么将其它文件从磁盘上移走以释放更多的空间。
用户定义的文件组是指在首次创建或以后更改数据库时,用户明确创建的任何文件组。如果用户定义的文件组填满,那么只有明确地分配到该文件组的用户表会受到影响。在任何时候,有且仅有一个文件组被指定为
DEFAULT
文件组。创建数据库中的对象时,如果没有指定其所属的文件组,那么就将这些对象指派到默认文件组。默认文件组必须足够大,以容纳未分配到用户定义文件组中的所有对象。在初始情况下,主文件组是默认文件组。
· ★数据库文件组
出于分配和管理目的,可以将数据库文件分成不同的文件组。一些系统可以通过控制在特定磁盘驱动器上放置的数据和索引来提高自身的性能。文件组可以对此进程提供帮助。系统管理员可以为每个磁盘驱动器创建文件组,然后将特定的表、索引、或表中的
text、ntext 或 image 数据指派给特定的文件组。
没有一个文件可以是一个以上文件组的成员。表、索引、以及 text、ntext 和 image
数据可以与文件组相关联,在这种情况下,它们的所有页都将分配在那个文件组中。
日志文件不能作为文件组的一部分。日志空间与数据空间分开管理。
文件组中的文件不自动增长,除非文件组中的文件全都没有可用空间。
有两种类型的文件组:
· 1.主要文件组
主文件组包含主要数据文件和任何没有明确指派给其它文件组的其它文件。系统表的所有页均分配在主文件组中。
· 2.用户定义文件组
用户定义文件组是在 CREATE DATABASE 或 ALTER DATABASE 语句中,使用 FILEGROUP 关键字指定的文件组。
下面是在 SQL Server 2000 默认实例上创建的数据库的逻辑文件名和物理文件名示例:
(图略)
在每个文件中,第一页是包含文件特性信息的文件的页首页。在文件开始处的其它几页也包含系统信息(如分配映射表)。系统页存储在主要数据文件和第一个日志文件中,其中有一个是包含数据库属性信息的数据库引导页。
SQL Server 2000
文件可以从它们最初指定的大小自动增长。定义文件时可以指定增量。每次填充文件时,均按这个增量值增加它的大小。如果在文件组中有多个文件,这些文件在全部填满之前不自动增长。填满后,这些文件使用循环算法进行增长。
还可以指定每个文件的最大大小。如果没有指定最大大小,文件可以一直增长到用完磁盘上的所有可用空间。如果 SQL Server
作为数据库嵌入应用程序,而该应用程序的用户无法迅速与系统管理员联系,此功能在这种情况下特别有用。用户可以让文件按需要自动增长,以减轻监视数据库中的可用空间量和手工分配额外空间的管理负担。
每个数据库中都有一个文件组作为默认文件组运行。当 SQL Server
给创建时没有为其指定文件组的表或索引分配页时,将从默认文件组中进行分配。一次只能有一个文件组作为默认文件组。db_owner
固定数据库角色成员可以将默认文件组从一个文件组切换到另一个。如果没有指定默认文件组,则主文件组是默认文件组。
SQL Server 2000 在没有文件组时也能有效地工作,因此许多系统不需要指定用户定义文件组。在这种情况下,所有文件都包含在主文件组中,而且 SQL
Server 2000 可以在数据库内的任何位置分配数据。文件组不是在多个驱动器之间分配 I/O 的唯一方法。
db_owner 固定数据库角色成员可以备份和还原个别的文件或文件组,而不用备份或还原整个数据库。
二:文件和文件组的设计规则
文件和文件组的设计规则包括:
· 文件或文件组不能由一个以上的数据库使用。例如,文件 sales.mdf 和 sales.ndf 包含 sales
数据库中的数据和对象,任何其它数据库都不能使用这两个文件。
· 文件只能是一个文件组的成员。
· 数据和事务日志信息不能属于同一文件或文件组。
· 事务日志文件不能属于任何文件组。
三:在文件组上放置表
Microsoft® SQL Server™
使您得以在数据库内的特定文件组上创建表或索引,而不用在数据库内的所有文件组上创建。通过在特定的磁盘或
RAID(独立磁盘冗余阵列)设备上创建文件组,可以控制将数据库内的表和索引物理定位在什么位置。在特定磁盘上放置表和索引是为了:
·★ 提高查询性能。
·★ 并行查询。
可在特定的文件组上而不是默认文件组上创建表。如果文件组由在不同物理磁盘中展开的多个文件组成,而且每个磁盘都有自己的磁盘控制器,则对表中数据的查询将在这些磁盘中展开,从而提高查询性能。通过在
RAID(独立磁盘冗余阵列)等级 0、1 或 5 设备上创建单个文件可以达到同样的效果。
如果计算机具有多个处理器,Microsoft SQL Server 2000
可以对数据执行并行扫描。如果表的文件组包含多个文件,可对单个表执行多个并行扫描。每当对表进行有序访问时,都创建单独的线程以并行读取每个文件。例如,对在由四个文件组成的文件组上创建的表进行完全扫描时,将使用四个单独的线程并行读取数据。由于使用单独的线程并行扫描每个文件,因此在每个文件组中创建更多的文件有助于提高性能。同样,当查询联接位于不同文件组上的表时,可以并行读取每个表以提高查询性能。
另外,可以在不包含基表的文件组上创建表内 text、ntext 或 image 列。
如果文件太多因而有太多的并行线程,导致磁盘 I/O 子系统内出现瓶颈堵塞,则会最终出现一个饱和点。可以使用 Windows NT®
性能监视器监视 PhysicalDisk 对象和 Disk Queue Length 计数器来识别这些瓶颈堵塞。如果 Disk Queue Length
计数器大于三,应考虑减少文件数。
尽量将数据在尽可能多的物理驱动器上展开,有利于提高使用多个文件进行并行数据访问时的吞吐量。若要将数据在所有磁盘中均匀展开,请先设置基于硬件的磁盘条带化,再使用文件组将数据在多个硬件条带集中展开(如需要)。
四:医药GSP软件文件组的创建具体操作方法:
先执行 dbcc checkdb : 看看 各个表的记录 ,将海量(50000条记录以上)记录表 记下来,拉清单;
(1):进货表:
向数据库中添加由两个文件组成的文件组
先在 d: 建立文件夹 :webhetaic_file_group
e: 建立文件夹 :webhetaic_file_group
f:建立文件夹 :webhetaic_file_group
1。先创建文件组和3个文件:(下略)