每页的开头是一个96B的页头,用于存储有关页的系统信息。包括页码、页类型、页的可用空间,以及拥有该页
在正常数据页上,数据行紧接着页的标头按顺序放置。页的末尾是行偏移量表,对于页中的每一行,每个行偏移表都包含一个条目。
------------------此处插入宋大神的注解------------------------
除了页头占用的空间和行偏移矩阵占用的空间,中间剩下的空间就是给数据行使用的。一个数据行中还存在其他的信息用于表示该行数据,具体的结构是这样的:状态位A1字节状态位B1字节定长数据类型的长度2字节定长数据的内容具体定长数据字节列数2字节NULL位图列数/8个字节变长列的个数2字节变长列的偏移矩阵变长列个数*2个字节变长列的数据具体变长数据字节这些最少占据1 1 2 2 1=7
-------------------------------------------------------------------
在SQLServer中,行不能跨页,属于同一行的所有字段的数据都要放在同一个页面里。页的最大数据量是B(8KB)。
SQLServer开始的版本中,提供了varchar(max)、nvarchar(max)、varbinary(max)这样的数据类型。
如果总长超过了8KB,SQLServer就会把这些字段的数据分开,单独存放在一种叫Row-Overflow(行溢出)的页面里。
•混合区,最多可由8个对象共享。区中8页的每页可由不同的对象所有。但是一页总是只能属于一个对象。
这个命令能直接从GAM和SGAM这样的系统分配页面上面读取区分配信息,直接算出数据库文件里有多少区已被分配。
DBCCSHOWCONTIG(慎用,SQLServer之后可以使用sys.dm_db_index_physical_stats)
如果一个日志文件经历了多次小的自动增长,里面的虚拟日志单元数目会比正常的日志文件多很多。
当逻辑日志的末端到达物理日志文件的末端时,新的日志记录将回绕到物理日志文件的始端,继续向后写。
Tempdb系统数据库是一个全局资源,可供连接到SQLServer实例的所有用户使用,在SQLServer中,用于保存下列各项:
•用于创建或重新生成索引等操作(如果指定了SORT_IN_TEMPDB)的中间排序结果,
•由使用快照隔离级别或已提交读隔离级别(基于行版本控制)的数据库中的数据修改事务生成的行版本。
•由数据修改事务为实现联机索引操作、多个活动的结果集(MARS)以及AFTER触发器等功能而生成的行版本。
Tempdb空间使用的一大特点,是只有一部分对象,例如用户创建的临时表、table变量等,
可以用sys.allocation_units和sys.partitions这样的管理视图来管理。
sys.dm_db_file_space_usage这张视图能反映tempdb在几个大类里的空间使用分布。
是用户对象(user_object_reserved_page_count),还是系统对象(internal_object_reserved_page_count)
,还是版本存储区(version_store_reserved_page_count)。