No.14
关于参数old_snapshot_threshold说法正确的是()
A.
系统表不受该参数影响
B.
允许的最大值为30day
C.
超过设定值则会终止超时事务
D.
设置为0则禁止该参数功能
【答案】A
【解析】
设置在使用快照时,一个快照可以被使用而没有发生snapshot too old 错误风险的最小时间。这个参数只能在服务器启动时设置。
如果超过该阈值,旧数据将被清理掉。这可以有助于阻止长时间使用的快照造成的快照膨胀。为了阻止由于本来对该快照可见的数据被清理导致的不正确结果,当快照比这个阈值更旧并且该快照被用来读取一个该快照建立以来被修改过的页面时,将会产生一个错误。
值为-1会禁用这个特性,并且这个值是默认值。
对于生产工作有用的值可能从几个小时到几天。该设置将被转换成分钟粒度,并且小数字(例如0或者1min)被允许只是因为它们有时对于测试有用。虽然允许高达60d的设置,但是请注意很多负载情况下,很短的时间帧里就可能发生极大的膨胀或者事务ID回卷。
当这个特性被启用时,关系末尾的被清出的空间不能被释放给操作系统,因为那可能会移除用于检测snapshot too old情况所需的信息。所有分配给关系的空间还将与该关系关联在一起便于重用,
除非它们被显式地释放(例如,用VACUUM FULL)。
这个设置不会尝试保证在任何特殊情况下都会生成错误。事实上,如果(例如)可以从一个已经物化了一个结果集的游标中生成正确的结果,即便被引用表中的底层行已经被清理掉也不会生成错误。某些表不能被过早地安全清除,并且因此将不受这个设置的影响。例子包括系统目录以及任何具有哈希索引的表。对于这些表,这个设置将不能降低膨胀,也不能降低在扫描时产生 snapshot too old错误的可能性。




