SQL Server :理解Page Free Space (PFS) 页
原文:SQL Server :理解Page Free Space (PFS) 页
我们已经讨论了GAM与SGAM页,数据页(Data Page) ,现在我们来看下页面自由空间页(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页的信息:
CREATE DATABASE PFSdb
GO
USE PFSdb
GO
DBCC TRACEON(3604)
GO
DBCC PAGE(PFSdb,1,1,3)

........

可以看到,自180页到287页空间没分配了。
我们往表里插入点数据,再用DBCC PAGE查看下PFS页的信息:
SELECT * INTO SalesOrderHeaderTest FROM AdventureWorks2008R2.Sales.SalesOrderHeader
DBCC TRACEON(3604)
GO
DBCC PAGE(PFSdb,1,1,3)

......

可以看到从288页到1311页有新页添加。
我们现在把表drop掉,再看看PFS页的信息:

......

可以看到刚才被分配的页现在变成未分配了,但是空间还是100%被占用。这是因为在页没有被重新分配前,PFS字节没有被完全重设。在重新分配时,数据库引擎只重设分配状态位,这可以让数据库引擎在回滚重新分配时,通过重设分配状态位即可。
SQL Server :理解Page Free Space (PFS) 页的更多相关文章
- SQL Server 存储(4/8):理解Page Free Space (PFS) 页
我们已经讨论了GAM与SGAM页,数据页(Data Page) ,现在我们来看下页面自由空间页(Page Free Space (PFS) ). PFS在数据文件里是第2页(页号1,页号从0开始),接 ...
- SQL Server :理解GAM和SGAM页
原文:SQL Server :理解GAM和SGAM页 我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时 ...
- SQL Server 存储(1/8):理解数据页结构
我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或写入所有数据页.页有不同的类型,像数据页,GA ...
- SQL Server 存储(3/8):理解GAM和SGAM页
我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时,页会分配给它用来存储数据.GAM(Global Al ...
- SQL Server :理解DCM页
原文:SQL Server :理解DCM页 我们已经讨论了各种不同的页,包括数据页.GAM与SGAM页.PFS页,还有IAM页.今天我们来看下差异变更页(Differential Change Map ...
- SQL Server :理解数据页结构
原文:SQL Server :理解数据页结构 我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或 ...
- SQL Server存储(6/8) :理解DCM页
我们已经讨论了各种不同的页,包括数据页.GAM与SGAM页.PFS页,还有IAM页.今天我们来看下差异变更页(Differential Change Map:DCM ),还有差异备份(differen ...
- SQL Server页类型汇总+疑问
该文章整理自:http://www.sqlnotes.info/2011/10/31/page-type/ SQL Server中包含多种不同类型的页,来满足数据存储的需求.不管是什么类型的页,它们的 ...
- SQL SERVER大话存储结构(1)_数据页类型及页面指令分析
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持! SQLServer的数据页大 ...
随机推荐
- Photon的使用
这几个月给公司一个正在做的半吊子游戏加pvp功能,一个人居然要2个多月弄个 PVP 类似 Dota 对战的游戏.我手里有套现成搭建服务端架构都没敢用起来,这服务器还是太初步了,只是验证了 Boost ...
- 链栈之C++实现
链栈是借用单链表实现的栈.其不同于顺序栈之处在于: 1.链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限.而顺序栈则是 静态分配内存的. 2.链栈动态分配内存的特性使得它一般无需考虑栈溢 ...
- Swift - 分段选择控件(UISegmentedControl)的用法
1,选择控件的创建,并监听控件选择值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class ViewController: UIVie ...
- 阅读代码分析工具Understand 2.0试用
Understand 2.0是一款源码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实能够大大提高代码阅读效率. 因为Understand功能十分强大,本文不可能详尽地介绍它的全部功能,所 ...
- Program1-1
package com.algo; import java.util.Random; import java.util.Scanner; public class P1_1 { static int ...
- POJ3071-Football(概率DP+滚动数组)
Football Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2769 Accepted: 1413 Descript ...
- 【矩阵乘】【NOI 2012】【cogs963】随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对照 时间限制:1 s 内存限制:128 MB **[问题描写叙述] 栋栋近期迷 ...
- ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码
我怎么有二维码没有联系,最近遇到一个问题,,如何推断条码扫描到一维代码或者二维代码,辛苦了一个下午下班后自己,加上网上跟踪信息. 总结出两种方式能够解决该问题(推荐採用另外一种方式): 1.改动源代码 ...
- C#使用Redis集群缓存
C#使用Redis集群缓存 本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层. 一.背景 系统考虑到高并发的使用场景.对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决.对于系 ...
- Android开发周报:反编译对抗研究、动手制作智能镜子
新闻 <Android Wear落地中国 谷歌增强安卓生态控制力> :9月8日,由摩托罗拉推出的智能手表Moto 360二代作为国内发售的第一款搭载官方Android Wear的设备,正式 ...