【发布时间】:2018-04-03 08:44:59
【问题描述】:
我正在探索postgres的存储机制。我知道 postgres 正在使用类似页面的结构(每个大小为 8K)来存储行。一页可以包含多行。我也知道当行不能包含在给定页面中时,TOASTing 是由 postgres 完成的。
但我不确定以下情况:-
- 当前页只剩1K空间,新建行的大小超过了1K。在那种情况下,会发生什么?是否会为该行分配新页面而旧页面将有未使用的空间?或者当另一个大小小于或等于 1K 的行被创建时,旧页面的剩余空间将被占用?
我指的是TOAST。以下段落有点不清楚:-
当要存储的行“太宽”(默认阈值为 2KB)时,TOAST 机制首先尝试压缩任何宽字段值。如果这还不足以使行小于 2KB,它会将宽字段值分解为存储在相关 TOAST 表中的块。每个原始字段值都被一个小指针替换,该指针显示在 TOAST 表中的何处可以找到此“异常”数据。 TOAST 会尝试通过这种方式将 user-table 行压缩到 2KB,但只要能达到 8KB 以下就足够了,并且可以成功存储该行。
为什么要讨论 8K 和 2K 两种尺寸?为什么 postgres 检查阈值 2K ?
提前致谢。
【问题讨论】:
标签: postgresql