本文内容
适用于:
SQL Server (所有受支持的版本)
至少每个SQL Server数据库都有两个操作系统文件:数据文件和日志文件。 数据文件包含数据和对象,例如表、索引、存储过程和视图。 日志文件包含恢复数据库中的所有事务所需的信息。 为了便于分配和管理,可以将数据文件集合起来,放到文件组中。
SQL Server数据库有三种类型的文件,如下表所示。
文件说明
主
包含数据库的启动信息,并指向数据库中的其他文件。 每个数据库有一个主要数据文件。 主要数据文件的建议文件扩展名是 .mdf。
辅助副本
用户定义的可选数据文件。 通过将每个文件放在不同的磁盘驱动器上,可以将数据分散到多个磁盘上。 次要数据文件的建议文件扩展名是 .ndf。
事务日志
此日志包含用于恢复数据库的信息。 每个数据库必须至少有一个日志文件。 事务日志的建议文件扩展名是 .ldf。
例如,简单数据库“Sales”包括一个包含所有数据和对象的主要文件和一个包含事务日志信息的日志文件。 可以创建一个更复杂的数据库“Orders”,其中包括一个主要文件和五个次要文件。 数据库中的数据和对象分散在所有六个文件中,而四个日志文件包含事务日志信息。
默认情况下,数据和事务日志放在同一驱动器和路径上,以处理单磁盘系统。 对于生产环境,这可能不是最佳选择。 建议将数据和日志文件放在不同的磁盘上。
逻辑和物理文件名称
SQL Server文件有两种文件名类型:
: 是用于引用所有 -SQL 语句中的物理文件的名称。 逻辑文件名必须符合 SQL Server 标识符规则,而且在数据库中的逻辑文件名中必须唯一。
: 是包括目录路径的物理文件的名称。 它必须符合操作系统文件命名规则。
有关和参数的详细信息NAME,请参阅 ALTER 文件和文件组选项 (-SQL) 。
重要
SQL Server 数据和日志文件可保存在 FAT 或 NTFS 文件系统中。 由于 NTFS 在安全方面具有优势,因此,建议在 系统上使用 NTFS 文件系统。
警告
NTFS 压缩文件系统不支持读/写数据文件组和日志文件。 仅允许只读数据库和只读次要文件组保存在 NTFS 压缩文件系统中。为了节省空间,强烈建议使用数据压缩而不是文件系统压缩。
当单个计算机上运行多个SQL Server实例时,每个实例都会收到不同的默认目录,用于保存实例中创建的数据库的文件。 有关详细信息,请参阅 SQL Server 的默认实例和命名实例的文件位置。
数据文件页
SQL Server 数据文件中的页面按顺序编号,文件的首页以零 (0) 开头。 数据库中的每个文件都有一个唯一的文件 ID 号。 若要唯一标识数据库中的页,需要同时使用文件 ID 和页码。 下例显示了包含 4-MB 主数据文件和 1-MB 次要数据文件的数据库中的页码。
文件标头页是包含有关文件属性信息的首页。 在文件开始处的其他几页也包含系统信息(例如分配映射)。 有一个存储在主数据文件和第一个日志文件中的系统页是包含数据库属性信息的数据库引导页。
文件大小
SQL Server 文件可从其最初指定的大小开始自动增长。 在定义文件时,您可以指定一个特定的增量。 每次填充文件时,其大小均按此增量来增长。 如果文件组中有多个文件,则它们在所有文件被填满之前不会自动增长。
有关页和页类型的详细信息,请参阅页和盘区体系结构指南。
每个文件还可以指定一个最大大小。 如果没有指定最大大小,文件可以一直增长到用完磁盘上的所有可用空间。 当SQL Server用作应用程序中嵌入的数据库时,此功能特别有用,用户无权访问系统管理员。 用户可以使文件根据需要自动增长,以减轻监视数据库中的可用空间和手动分配额外空间的管理负担。
有关事务日志文件管理的详细信息,请参阅。
数据库快照文件
数据库快照存储其“写入时复制”数据时所用的文件格式取决于快照是由用户创建,还是在内部使用:
文件组
例如:可以分别在三个磁盘驱动器上创建 Data1.ndf、Data2.ndf 和 Data3.ndf,然后将它们分配给文件组 。 然后,可以明确地在文件组 上创建一个表。 对表中数据的查询将分散到三个磁盘上,从而提高了性能。 通过使用在 RAID(独立磁盘冗余阵列)条带集上创建的单个文件也能获得同样的性能提高。 但是,文件和文件组使您能够轻松地在新磁盘上添加新文件。
下表列出了存储在文件组中的所有数据文件。
文件组说明
主
包含主要文件的文件组。 所有系统表都是主要文件组的一部分。
内存优化数据
内存优化文件组基于 文件组
文件流
用户定义
用户首次创建数据库或以后修改数据库时创建的任何文件组。
默认 () 文件组
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。 不管何时filestream 保存文件,只能将一个文件组指定为默认文件组。 默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。
文件组是默认文件组,除非使用 ALTER 语句进行了更改。 但系统对象和表仍然分配给 文件组,而不是新的默认文件组。
内存优化数据文件组
有关内存优化文件组的详细信息,请参阅内存优化文件组。
文件组
有关 文件组的详细信息,请参阅 和 创建启用了 的数据库。
文件和文件组示例
以下示例在 SQL Server 实例上创建了一个数据库。 该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。 主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件。 ALTER 语句将用户定义文件组指定为默认文件组。 然后通过指定用户定义文件组来创建表。 (此示例使用通用路径 c:\ Files\ SQL Server\MSSQL.1 来避免指定 SQL Server 版本。)
USE master;
GO
-- Create the database with the default data
-- filegroup, filestream filegroup and a log file. Specify the
-- growth increment and the max size for the
-- primary data file.
CREATE DATABASE MyDB
ON PRIMARY
( NAME='MyDB_Primary',
FILENAME=
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf',
SIZE=4MB,
MAXSIZE=10MB,
FILEGROWTH=1MB),
FILEGROUP MyDB_FG1
( NAME = 'MyDB_FG1_Dat1',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',
SIZE = 1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB),
( NAME = 'MyDB_FG1_Dat2',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',
SIZE = 1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM
( NAME = 'MyDB_FG_FS',
FILENAME = 'c:\Data\filestream1')
LOG ON
<p>![c filestream 保存_filestream 保存文件_filestream 保存][4]
( NAME='MyDB_log',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf',
SIZE=1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB);
GO
ALTER DATABASE MyDB
MODIFY FILEGROUP MyDB_FG1 DEFAULT;
GO
-- Create a table in the user-defined filegroup.
USE MyDB;
CREATE TABLE MyTable
( cola int PRIMARY KEY,
colb char(8) )
ON MyDB_FG1;
GO
-- Create a table in the filestream filegroup
CREATE TABLE MyFSTable
(
cola int PRIMARY KEY,
colb VARBINARY(MAX) FILESTREAM NULL
)
GO
文件和文件组填充策略
文件组对组内的所有文件都使用按比例填充策略。 将数据写入文件组时,SQL Server数据库引擎会将文件中的可用空间量与文件组中每个文件的可用空间成正比,而不是将数据写入第一个文件,直到完整为止。 然后再写入下一个文件。 例如,如果文件 f1 有 100 MB 可用空间,文件 f2 有 200 MB 可用空间,则从文件 f1 中提供一个盘区,从文件 f2 中提供两个盘区,依此类推。 这样,两个文件几乎同时填满,并且可获得简单的条带化。
例如,某个文件组由三个文件组成,它们都设置为自动增长。 当文件组中所有文件的空间都已用完时,只扩展第一个文件。 当第一个文件已满,无法再向文件组中写入更多数据时,将扩展第二个文件。 当第二个文件已满,无法再向文件组中写入更多数据时filestream 保存文件,将扩展第三个文件。 当第三个文件已满,无法再向文件组中写入更多数据时,将再次扩展第一个文件,依此类推。
文件和文件组的设计规则
下列规则适用于文件和文件组:
建议
使用文件和文件组时的建议:
有关事务日志文件管理建议的详细信息,请参阅。
相关内容
CREATE (SQL Server -SQL)
ALTER 文件和文件组选项 (-SQL)
数据库分离和附加 (SQL Server)
SQL Server 事务日志体系结构和管理指南
页和区体系结构指南
管理事务日志文件的大小
—— 评论区 ——