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

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

Configuring VACUUM and autovacuum

Back in the early days of PostgreSQL projects, people had to run VACUUM manually. Fortunately this is long gone. Nowadays administrators can rely on a tool called autovacuum, which is part of the PostgreSQL Server infrastructure. It automatically takes care of cleanup and works in the background. It wakes up once per minute (see autovacuum_naptime = 1 in postgresql.conf) and checks if there is work to do. If there is work, autovacuum will fork up to three worker processes (see autovacuum_max_workers in postgresql.conf).

The main question is: When does autovacuum trigger the creation of a worker process?

Actually the autovacuum process does not fork processes itself. Instead it tells the main process to do so. This is done to avoid zombie processes in the case of failure and to improve robustness.

The answer to this question can again be found in postgresql.conf:

autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.2
autovacuum_analyze_scale_factor = 0.1

The autovacuum_vacuum_scale_factor tells PostgreSQL that a table is worth vacuuming if 20% of data has been changed. The trouble is that, if a table consists of one row, one change is already 100%. It makes absolutely no sense to fork a complete process to clean up just one row. Therefore autovacuum_vacuuum_threshold says that we need 20% and that 20% must be at least 50 rows. Otherwise, VACUUM won't kick in. The same mechanism is used when it comes to optimizer stats creation. 10% and at least 50 rows are needed to justify new optimizer stats. Ideally, autovacuum creates new statistics during a normal VACUUM to avoid unnecessary trips to the table.

主站蜘蛛池模板: 略阳县| 钟祥市| 抚远县| 阳山县| 米林县| 都匀市| 凤庆县| 咸阳市| 伊宁县| 军事| 延庆县| 红桥区| 达日县| 张掖市| 尼玛县| 常宁市| 许昌市| 阜新市| 巴青县| 桐柏县| 荆门市| 辽中县| 赤水市| 资中县| 泉州市| 兰坪| 浏阳市| 当涂县| 河北区| 三亚市| 马边| 萍乡市| 大关县| 明光市| 仲巴县| 平昌县| 含山县| 盐亭县| 汉中市| 六安市| 剑河县|