Re: Temporary tables prevent autovacuum, leading to XID wraparound
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: "Tsunakawa, Takayuki" <tsunakawa.takay@jp.fujitsu.com>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2018-01-26T01:23:12Z
Lists: pgsql-hackers
On Thu, Jan 25, 2018 at 1:14 AM, Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com> wrote: > * I think temporary tables should not require vacuuming for XID wraparound. Furtherover, should updates/deletes to temporary tables be in-place instead of creating garbage, so that any form of vacuum is unnecessary? Other sessions do not need to read temporary tables. Temporary tables contain XIDs, so they need to be vacuumed for XID wraparound. Otherwise, queries against those tables by the session that created them could yield wrong answers. However, autovacuum can't perform that vacuuming; it would have to be done by the session. I think we should consider having backends try to remove their temporary schema on startup; then, if a temp table in a backend is old enough that it's due for vacuum for wraparound, have autovacuum kill the connection. The former is necessary to prevent sessions from being killed on account of temp tables they "inherited" from a backend that didn't exit cleanly. The in-place update idea won't work for a couple of reasons. First, a command shouldn't see the results of modifications made earlier in the same command. Second, using cursors, it's possible to have more than one distinct snapshot open against a temporary table at the same time. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Clarify comment about assignment and reset of temp namespace ID in MyProc
- 9fc9933695af 11.0 landed
- 1339fcc89617 12.0 landed
-
Make autovacuum more aggressive to remove orphaned temp tables
- 943576bddcb5 11.0 landed
- 246a6c8f7b23 12.0 landed
-
Don't count background workers against a user's connection limit.
- 13752743bf70 9.6.2 cited