zoukankan      html  css  js  c++  java
  • 《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数据库

    邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
    助人等于自助!  3w@live.cn
  • 相关阅读:
    h5 百度获取地址
    Vue Cli项目使用PDF.js预览pdf无法访问到viewer.html
    Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead...
    VUE ES6转ES5,(ios 10.2版本,白屏,猜想es6语法原因)
    Vue+element-ui Upload 的http-request自定义上传文件
    vuejs中如何动态拼接生成字段名
    el-cascader 使用
    hdu 3555 数位dp入门
    codeforces Registration system
    hdu 1166 敌兵布阵
  • 原文地址:https://www.cnblogs.com/downmoon/p/1652543.html
Copyright © 2011-2022 走看看