《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

 

《Microsoft Sql server 2008 Internals》读书笔记订阅地址:

http://www.cnblogs.com/downmoon/category/230397.html/rss

《Microsoft Sql server 2008 Internals》索引目录:

《Microsoft Sql server 2008 Internal》读书笔记--目录索引

在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是:

关于FileGroup

如果你的系统是用Raid设备直接存放data文件,则不需要再借助FileGroup,因为FileGroup会增加数据库会影响复杂性和灵活性。

如果你的磁盘空间许可,你仍然不需要使用FileGroup,只要在同一个驱动器内增加一连串的File就可以了。

如果计划在不同的驱动器使用表和索引分区Partition内容,应该使用FileGroup
关于MultiFile ,可以有两个好处:

第一,你不总是有120G的空间来存放一个文件,而3个40G的空间要好找的多。

第二、只移动一个40G的文件到另一个分区比移动一个120G的文件,要容易,也不易出错。

关于FileStream FileGroup与FileGroup的不同,

如果在创建数据时使用了FileStream参数,如下:

代码
-- The file and filegroup will grow as data is added to tables that have been created with 
--
 filestream columns:

CREATE DATABASE MYMOVIEREVIEWS 
ON
PRIMARY 
  ( NAME 
= REVIEWS_DATA,
    FILENAME 
= 'C:\DATA\REVIEWS_DATA.MDF'),
FILEGROUP MOVIEREVIEWSFSGROUP1 
CONTAINS FILESTREAM 
  ( NAME 
= REVIEWS_FS,
    FILENAME 
= 'C:\DATA\REVIEWS_FS')
LOG ON  ( NAME = REVIEWS_LOG,
    FILENAME 
= 'C:\DATA\REVIEWS_LOG.LDF');
GO

则在C:\DATA\REVIEWS_FS下会生成一个$FSLOG文件夹和一个FileStream.hdr文件,这个hdr文件就是一个FileStream 包含关文件,不能被修改和移动。在运行Alter database时,会覆盖为最新的一个。
关于FileStream编程模型实现,请参照:
使用 FileStream SQL Server 2008 中编程http://msdn.microsoft.com/zh-cn/magazine/dd695918.aspx

引擎盖下的数据库(Databases under the hood)

 一个数据库由可以持久存储用户对象如用户表和索引等的空间组成,这些空间由用户创建数据库时指定。而这些空间被指派到一个或多个操作系统文件。

 数 据库被分成了一个个的逻辑页(logical pages),每个逻辑面为8KB大小,在数据文件中,这些逻辑页由数字0-X连续存放,X由文件的大小确定,你可以通过·定义一个数据库 ID(databse ID),一个文件ID或页面数,比如3等,来指向任何一个页。当你使用Alter database来增加数据库大小时,新的空间被加到数据文件的末尾,那就意味着:新分配空间的第一页是X+1。当你使用DBCC ShrinkDatabase或DBCC ShrinkFile命令时,位于最高数字的页面先被移去,这些页位于数据文件的末尾,然后依次是低数字的页面,这保证页面的数字始终是连续的。是不是感觉有点像堆栈的操作?呵呵。

当你创建一个数据库时Create Database时,会产生一个惟一的ID,Database ID,你可以在sys.databses视图找到它。该视图返回所有数据库的名称、database_id等参数。

空间分配

 存 放数据库表和索引的空间,被托管在一个个很小的单元,我们称为“范围”(extent),每一个范围由8个连续的页面组成,共64K。为了使空间分配更加 高效,SQL Server 2008并没有完全分配范围到所有小数据量的表,SQL Server 2008有两种类型的范围(Extent)

1、标准范围(Uniform extent):

范围被一个单独的对象所拥有,范围内所有8个页面只被各自的一个对象拥有。

2、混合范围(Mixed extent):

 范围被8个页面所共享。

SQL Server对于新表或索引分配空间时默认为混合范围,当表或索引增加到8个页面时,所有内容改为标准范围。

当 一个表或索引需要更多的空间时,SQL Server将会查找已经被分配的可用空间,当表或索引的页面数还没有达到8个时,SQL Server一定找到一个可用的混合范围。如果表或索引都等于8个页面或更多时,SQL Server 必须找到一个新的自由的标准范围。

 SQL Server使用两种类型的页面来记录范围的分配和可用类型:

Global Allocation Map(GAM) pages(page 2)和Shared Global Allocation Map(SGAM)pages(page 3)

.关于GAM/SGAM更多的资料,或者想要详细了解一个数据库的空间分配情况,请参看:

 http://msdn.microsoft.com/zh-cn/library/ms175195.aspx

 此外,如果范围的总大小超过4GB,超过的部分将由IAM pages(page 4)来分配。

Page Free Space(PFS) page (page 5)

Differential Changed Map(DCM) page (page 6)

Bluk  Changed Map(BCM) page (page 7) 

数据库快照(Database Snapshot)

  数据库快照是SQl2005企业版开始提供的一项新功能,它允许你创建一个任何数据库的一个只读的实时点。事实上,你可以创建多个快照点。快照的一大好处是使用空间比原始数据库少的多。困为它只在存储了已经发生变化的页面(pages),
快照示例

关于SnapShot的更多内容,请参看
http://msdn.microsoft.com/zh-cn/library/ms175158%28SQL.90%29.aspx

需要注意的是:

1、model,master,tempdb这三个系统数据库不能创建快照。

2、快照继承源数据库的安全限制,因为它是只读的,你不能修改快照的权限许可。

3、如果你删除了源数据库的一个用户,这个用户仍然在快照中。

4、快照不能被备份和恢复,但是源数据库的备份与恢复不受快照影响。

5、快照不能被附加(attach)或分离(detach)

6、快照不支持全文检索,也不能传播源数据库的全文分类(full-text catagies)。

 下面将继续关注Tempdb数据库

posted @ 2010-01-20 16:56  邀月  阅读(1591)  评论(4编辑  收藏  举报