官术网_书友最值得收藏!

Making use of snapshot too old

VACUUM is doing a good job and it will reclaim free space as needed. But when can VACUUM actually clean out rows and turn them into free space? The rule is this: if a row cannot be seen by anybody anymore, it can be reclaimed. In reality this means that everything that is no longer seen even by the oldest transaction can be considered to be really dead.

This also implies that really long transactions can postpone cleanup for quite some time. The logical consequence is table bloat. Tables will grow beyond proportion and performance will tend to go downhill.

Fortunately PostgreSQL 9.6 has a nice feature that allows the administrator to intelligently limit the duration of a transaction. Oracle administrators will be familiar with the snapshot too old error; since PostgreSQL 9.6, this error message is also available. But it is more of a feature than an unintended side-effect of bad configuration (which it actually is in Oracle).

To limit the lifetime of snapshots, you can make use of a setting in postgresql.conf:

old_snapshot_threshold = -1             
# 1min-60d; -1 disables; 0 is immediate

If this variable is set, transactions will fail after a certain amount of time. Note that this setting is on an instance level and it cannot be set inside a session. By limiting the size of a transaction, the risk of insanely long transactions will decrease drastically.

主站蜘蛛池模板: 乡城县| 建平县| 比如县| 灵武市| 云和县| 中牟县| 应用必备| 南澳县| 千阳县| 郎溪县| 绥德县| 大足县| 淮北市| 金塔县| 广宁县| 久治县| 班戈县| 山东| 安丘市| 于都县| 天津市| 娱乐| 高密市| 木兰县| 宝山区| 烟台市| 无锡市| 长白| 论坛| 尼勒克县| 东莞市| 石棉县| 苏尼特左旗| 思茅市| 株洲县| 普洱| 江口县| 武汉市| 太仆寺旗| 凤翔县| 河源市|