sql-server - 8060 B 数据页 (SQL Server) 中有 8078 字节?

标签 sql-server tsql sql-server-2008 data-structures data-storage

到处都是这样写的:SQL Server 中的数据以 8K (8192 B) 页的形式写入,每个页有 8060 字节的数据,其余的都是开销(系统信息)。

不过,最近的文章 [1] 给出了代码示例,据我了解,8078 字节的数据适合一个页面。

在理解每页 8,060 B 时我错过了什么?

我在 x86 SQL Server 2008 R2 上验证了代码...

<小时/>

更新:

我是否看到了有关 [1] 后续行动的答案?我很遗憾我没有将其标记为对我有帮助并立即发表评论...我只是想在回复之前自己进行更多调查...

<小时/>

更新2:

我发布了子问题 [2]

[1]
表设计如何影响 SQL Server 性能?
http://sqlserver-training.com/how-table-design-can-impact-your-sql-server-performance/-

[2]
如何达到每行 8060 字节和每行 8000 个字节(varchar、nvarchar)的限制?
How do you get to limits of 8060 bytes per row and 8000 per (varchar, nvarchar) value?

最佳答案

长答案短,限制是每行 8060 字节,但每页 8096 字节。您链接的文章中的行的行大小约为 4000 字节,因此它们远低于每行的限制。但是,这并不能回答一个页面上可以容纳多少这样的行的问题。

请参阅联机丛书中的“估计堆的大小”:

http://msdn.microsoft.com/en-us/library/ms189124.aspx

如果您对本文中的表进行计算,您会发现第一个表的物理行大小为 4048 字节,恰好是页面 8096 限制的一半。

关于sql-server - 8060 B 数据页 (SQL Server) 中有 8078 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778721/

相关文章:

sql - 如何有效地记录数据库(表,属性定义)?

sql - 表中最接近的时间戳

sql-server - 无法建立连接,因为目标机器主动拒绝它 127.0.0.1 :2382

SQL Server - 查询短路?

sql-server - SQL Server - 将表数据转换为 xml

sql-server - 过去在 SQL Server 2008 中使用的保留字列查询不再适用于 SQL Server 2012

c# - 使用 LINQ 连接连接表中的列

sql-server - 在存在语句中使用表变量

sql-server - master 数据库中的用户定义函数不会执行

sql-server - 从大型数据集中删除重复项(>100Mio 行)