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

  • Mastering PostgreSQL 9.6
  • Hans Jurgen Schonig
  • 239字
  • 2021-07-09 19:57:14

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.

主站蜘蛛池模板: 平湖市| 津南区| 集贤县| 修武县| 西乌| 武山县| 仁化县| 鄂伦春自治旗| 肇庆市| 巴林左旗| 连平县| 花莲市| 昌邑市| 丽江市| 肥东县| 甘洛县| 寻甸| 蛟河市| 铜陵市| 越西县| 巴塘县| 威信县| 深水埗区| 同江市| 阿克陶县| 车险| 尚义县| 苗栗县| 鹤峰县| 金乡县| 通城县| 都昌县| 县级市| 会宁县| 平舆县| 瓦房店市| 鄂温| 宜阳县| 乌审旗| 称多县| 峨眉山市|