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

Making use of snapshot too old

VACUUM does a good job and it will reclaim free space as needed. However, 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 active 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, starting with PostgreSQL 9.6, the database 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. However, 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 age of a transaction, the risk of insanely long transactions will decrease drastically.

主站蜘蛛池模板: 永春县| 高邮市| 府谷县| 垫江县| 鄂托克旗| 江陵县| 西乡县| 石嘴山市| 泰州市| 林口县| 揭阳市| 湘潭县| 阜康市| 买车| 三穗县| 东明县| 商城县| 阳高县| 资讯 | 汤原县| 抚顺市| 开远市| 荆州市| 右玉县| 申扎县| 应城市| 呼和浩特市| 临泽县| 伊金霍洛旗| 双桥区| 湖口县| 会东县| 永登县| 顺昌县| 兴仁县| 瓦房店市| 兴宁市| 大宁县| 朔州市| 乐东| 越西县|