理解Page Free Space (PFS) 页

简介:

PFS在数据文件里是第2页(页号1,页号从0开始),接在文件头(file header,页号0)后。GAM与SGAM是用来跟踪区分配情况,而PFS页是用来跟踪页分配级别(page level allocation)。当分配页时,数据库引擎使用GAM与SGAM来确定有可用页的区。一旦数据库引擎找到有可用页的区,它使用PFS页来确定在那个区里未分配的页,页里可用空间量是多少。可用空间只对页存储LOB值(例如text/image, varchar(max), nvarchar(max), varbinary(max), row overflow data)或堆数据页时跟踪。默认情况下,LOB数据保存在独立的页,只通过在数据页保留一个指向独立页的指针。在有可用空闲的页里数据才可以被保存。对于索引页来说,数据应该和索引顺序一样保存,所以没有插入记录指针的说法。也就没有必要在索引里跟踪可用空间。

GAM和SGAM都有位图,但是PFS页只有字节图。在PFS页区间它为每页保留1位。一个PFS页可以保存8088页的可用空间使用信息。

在每字节的每一位代表信息如下:

  • 第0-2位:在页里有多少可用空间
    • 0x00:空的,未使用
    • 0x01:1%-50%被占用
    • 0x02:51%-80%被占用
    • 0x03:81%-95%被占用
    • 0x04:96%-100%被占用
  • 第3位(0x08):页里是否有1条或多条鬼影记录(ghost records)
  • 第4位(0x10):当前页是IAM页么?
  • 第5位(0x20):当前页是混合页么?
  • 第6位(0x40):当前页是已分配么?
  • 第7位:未使用

 我们来看一个具体的例子:新建一个数据库,并使用DBCC PAGE命令查看PFS页的信息:

复制代码
1 CREATE DATABASE PFSdb
2 GO
3 USE PFSdb
4 GO
5 DBCC TRACEON(3604)
6 GO
7 DBCC PAGE(PFSdb,1,1,3)
复制代码

........

可以看到,自180页到287页空间没分配了。

我们往表里插入点数据,再用DBCC PAGE查看下PFS页的信息:

1 SELECT * INTO SalesOrderHeaderTest FROM AdventureWorks2008R2.Sales.SalesOrderHeader
2 DBCC TRACEON(3604)
3 GO
4 DBCC PAGE(PFSdb,1,1,3)

......

可以看到从288页到1311页有新页添加。

我们现在把表drop掉,再看看PFS页的信息:

......

可以看到刚才被分配的页现在变成未分配了,但是空间还是100%被占用。这是因为在页没有被重新分配前,PFS字节没有被完全重设。在重新分配时,数据库引擎只重设分配状态位,这可以让数据库引擎在回滚重新分配时,通过重设分配状态位即可。


本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/4487891.html,如需转载请自行联系原作者

相关文章
|
存储 缓存 关系型数据库
【介绍一下Page页的结构】
【介绍一下Page页的结构】
|
存储 缓存 算法
我们还需要Page Cache么?
作者:齐江 杨艇艇 马涛
1110 0
|
缓存 Linux 存储
从free到page cache
Free 我们经常用free查看服务器的内存使用情况,而free中的输出却有些让人困惑,如下:           图1-1 先看看各个数字的意义以及如何计算得到: free命令输出的第二行(Mem):这行分别显示了物理内存的总量(total)、已使用的 (used)、空闲的(free)、共享的(shared)、buffer(buffer大小)、 cache(cache的大小)的内存。
898 0
|
前端开发 定位技术 Ruby
|
存储 关系型数据库
innodb page重组空间压缩函数(btr_page_reorganize_low)注释
我的学习记录原创!禁止转载 当innodb一个page碎片页过多会触发重组,这个重组过程在内存中完成,函数主要如下: 点击(此处)折叠或打开 bool btr_page_r...
1113 0
|
Linux API 存储
内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages【转】
转自:http://www.cnblogs.com/yfz0/p/5829443.html 在内核模块中申请分配内存需要使用内核中的专用API:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages;当然,设备驱动程序也不例外;对于提供了MMU功能的处理器而...
2915 0
HugePages 大内存页
HugePages  大内存页                                                                                                ...
757 0