SQLServer2005的文件和文件组
1、主要数据文件
在SQLServer中,每个数据库都有一个主数据文件它存储数据库中所有的数据和对象例如“表”“索引”存储过程和视图等都放在主文件中创建数据库时新数据库包含了从Model数据库复制的系统对象,存储在主文件中这些系统对象包括数据库的启动信息。记载数据库对象及其它文件位置信息的系统表SQLServer中主要数据文件存储时默认扩展名为.mdf可省略 但使用扩展名有利于文件的识别。
2、事务日志文件
一个单元的工作称为一个事务,该单元的工作要么全部完成要么全部不完成。为保证数据库操作的一致性和完整性SQLServer2005通过事务日志文件来完成事务处理功能。SQLServer遵守先写日志再执行数据库修改的数据库系统出于性能上的考虑,它将用户的改动存入缓存中这些改变会立即写入事务日志但不会立即写入数据文件,事务日志会通过一个标记点来确定某个事物是否已将缓存中的数据写入数据文件。当SQLServer重启后,它会查看日志中最新的标记点,并将这个标记点后面的事物记录抹去,因为这些事物记录并没有真正地将缓存数据写入数据文件。这可以防止那些中断的交易修改数据文件另一方面,通过事务日志文件,可以完成数据库的修复与重建,日志文件用来记录数据库中已发生的所有修改和已执行的修改事务,并将结果保存到独立的文件中,对于每一次数据库更新的过程事务日志文件都有非常全面的记录。因此如果出现数据库系统崩溃,数据库管理员DBA可以根据这些记录将数据库恢复到更新前的状态以避免数据的丢失。每个数据库必须至少有一个日志文件,也可以根据情况使用多个日志文件的默认文件扩展名是.1df建立数据库SQLServer会默认自动建立一个数据库的日志文件,用户也可以添加日志文件。
3、次要数据文件
次要数据文件相对于主要数据文件而存在,对主要数据文件进行补充和扩展当数据库足够大超过了单个Windows文件的最大值,主文件无法包含数据库中所有的数据时,可以使用次要数据文件这样数据库就能继续增长。次要数据文件含有主要数据文件中不能容纳的所有数据另一方面,使用多个次要数据文件可提高磁盘的利用率。通过将多个次要数据文件分散到不同磁盘驱动器上减少磁盘驱动器的负载,提高文件的读写速度多个文件对于数据略多的数据库来说备份和恢复都会很方便,次要数据文件是可选的由用户定义并存储用户数据有些数据库可能没有次要数据文件而有些数据库则有多个次要数据文件。次要数据文件的默认文件扩展名是.ndf使用多个次要文件需要占用更多的磁盘空间这是因为每个文件中都有自己的一套B树组织方式和自己的增长空间还会产生相应的碎片,但是在大多数情况下,多占点磁盘空间带来的副作用远远小于多文件带来的好处。
4、SQLServer2005的文件组
4.1文件和文件组的关系
在SQLServer中,通过文件组这个逻辑对象可将分布在多个逻辑分区的文件集合起来以便于管理数据分配和放置及实现数据负载平衡。如图1所示:逻辑数据库由一个或者多个文件组构成,文件组管理着磁盘上的文件而文件中存放着SQLServer的实际数据。
例如 可以分别在3个硬盘驱动器上创建3个文件A.ndfB.ndf和 C.ndf 并将文件 A B指派到文件组 A中 文件C指派给文件组B然后可以明确地在文件组A上创建一个表,对表中数据的查询将分散到3个磁盘上从而使得数据库性能得以提高。
4.2 文件组在实践应用中的优势
1 可改善数据库性能系统管理员可为每个磁盘驱动器创建文件组然后将特定的表、索引或表中的textnt-ext或image数据指派给特定的文件组。同一组内的不同文件分布在不同的硬盘中这样极大地提高了系统IO性能。例如:如果计算机上有4个磁盘,那么可以创建一个由3个数据文件和一个日志文件组成的数据库,每个磁盘上放置一个文件,在对数据进行访问时4个读、写磁头可以同时并行访问数据这样可以加快数据库操作的速度。
2 实现备份和还原策略
通过使用文件组数据库的备份和还原可分别进行,当用户对使用了文件组的数据库进行备份时能够只还原损坏的文件,而不用还原数据库的其余部分从而加快了恢复速度。例如:如果一个数据库由几个分别位于不同的物理磁盘上的文件组成,当其中一个磁盘发生故障时只需还原发生故障的磁盘上的文件而不必将整个数据库文件都还原。
3 隔离用户和文件增强数据库的管理使用文件组可以隔离用户和文件,使得用户针对文件组来建立表和索引,而不是对实际磁盘中的文件进行操作,当文件移动或修改时由于用户建立的表和索引建立在文件组上并不依赖具体文件这大大加强了可管理性。
4.3 文件组分类 SQLServer有两种类型的文件组 主文件组和用户定义文件组
1 主文件组
主文件组包含主要数据文件和任何没有明确指派给其它文件组的文件,所有系统表都被分配在主文件组中,主要数据文件必须置于主文件组中。
2 用户定义文件组
用户定义文件组是指在用户首次创建数据库或以后修改数据库时,明确创建的任何文件组SQLServer2005在没有文件组时也能有效地工作因此许多系统不需要指定用户定义文件组,在这种情况下,所有文件都包含在主文件组中。
3 默认文件组
如果在数据库中创建对象时,没有指定对象所属的文件组对象将被分配给默认文件组。不管何时只能将一个文件组指定为默认文件组默认文件组的空间必须足够大能够容纳未分配给其它文件组的所有新对象。
4.4文件和文件组填充策略
在文件组未填满时,它将对组内的所有文件使用按比例填充策略在数据写入文件组时SQLServer数据库引擎会按文件的可用空间比例将数据写入文件组中的每个文件,而不是将所有数据都写入第一个文件直至变满然后再写入下一个文件,在文件组被填满时假设数据库设置为自动增长的情况下,文件组采用循环扩展文件容量的方式来填充。例如:某个文件组由3个文件组成,它们都设置为自动增长,当文件组中所有文件的空间都已用完时,首先扩展第一个文件只有当第一个文件填满后才扩展第二个文件,当第二个文件填满无法再向文件组中写入更多数据时才扩展第三个文件,依此类推。
4.5文件和文件组的设计规则
一个文件或文件组只能存在于一个数据库中,不能被其它数据库使用 一个文件只能存在于一个文件组中,不能成为其它组的成员不能为事务日志文件创建文件组。
4.6使用文件组提高数据库性能
1 如果数据库中有多个文件,可为次要文件创建文件组,并设置为默认文件组,主文件放入主文件组中使其只包含系统表和对象。
2 为使系统性能最大化,可先将多个文件放在不同的磁盘上再将这些文件置入文件组中,通过文件组对不同磁盘上文件进行操作避免了不同文件争夺资源的现象。
3 将在同一联接查询时使用的不同表置于不同的文件组中,也可使数据库性能得以改善。4 将事务日志文件和数据文件分开存放在不同的磁盘上。