oldest xmin is far in the past :: BUT xmin is not available in system

From: bhargav kamineni <kbn98406(at)gmail(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: oldest xmin is far in the past :: BUT xmin is not available in system
Date: 2022-04-19 05:44:40
Message-ID: CAE=Y5eB0Szc_Fz5te6KaAQtay3XBvwSO=ruv5G0HYyHK_a3n6Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Team,

It seems vacuum is behaving somewhat weird on postgres database , observing
below HINTS on the vacuum logs

WARNING: oldest xmin is far in the past

HINT: Close open transactions soon to avoid wraparound problems.

You might also need to commit or roll back old prepared transactions, or
drop stale replication slots.

Below is the auto-vacuum status on the bloated tables:

=> SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum

FROM pg_stat_all_tables

ORDER BY n_dead_tup

/ (n_live_tup

* current_setting('autovacuum_vacuum_scale_factor')::float8

+ current_setting('autovacuum_vacuum_threshold')::float8)

DESC

LIMIT 10;

schemaname | relname | n_live_tup | n_dead_tup |
last_autovacuum

------------+---------------------+------------+------------+-------------------------------

pg_catalog | pg_statistic | 136 | 37563 | 2022-04-18
04:00:21.045089+00

public | test1 | 209405206 | 126752908 | 2022-04-18
03:59:43.013758+00

public | test2 | 513770985 | 49258312 | 2022-04-18
04:00:23.24043+00

public | test3 | 90853150 | 4090146 | 2022-04-18
04:00:25.868147+00

pg_catalog | pg_shdepend | 153 | 29 | 2022-04-08
12:16:02.816631+00

pg_catalog | pg_index | 73 | 18 |

pg_toast | pg_toast_2619 | 16 | 12 | 2022-03-13
23:01:54.334003+00

pg_catalog | pg_class | 425 | 19 | 2022-03-01
13:15:57.534378+00

pg_catalog | pg_proc | 2457 | 48 |

pg_toast | pg_toast_2618 | 252 | 10 |

i tried to vacuum the the first table pg_statistic , Below is the log

postgres=> VACUUM (VERBOSE) pg_statistic;

WARNING: oldest xmin is far in the past

HINT: Close open transactions soon to avoid wraparound problems.

You might also need to commit or roll back old prepared transactions, or
drop stale replication slots.

INFO: aggressively vacuuming "pg_catalog.pg_statistic"

INFO: "pg_statistic": found 0 removable, 37699 nonremovable row versions
in 6331 out of 6351 pages

DETAIL: 37563 dead row versions cannot be removed yet, oldest xmin:
648320155

There were 3340 unused item identifiers.

Skipped 0 pages due to buffer pins, 20 frozen pages.

0 pages are entirely empty.

CPU: user: 0.01 s, system: 0.00 s, elapsed: 0.01 s.

WARNING: oldest xmin is far in the past

HINT: Close open transactions soon to avoid wraparound problems.

You might also need to commit or roll back old prepared transactions, or
drop stale replication slots.

INFO: aggressively vacuuming "pg_toast.pg_toast_2619"

INFO: "pg_toast_2619": found 0 removable, 16 nonremovable row versions in
3 out of 11 pages

DETAIL: 12 dead row versions cannot be removed yet, oldest xmin: 648320155

There were 11 unused item identifiers.

Skipped 0 pages due to buffer pins, 8 frozen pages.

0 pages are entirely empty.

CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s.

VACUUM

Table is getting vacuumed but not able to remove the dead tuples
because of *oldest
xmin: 648320155* , but the mentioned xim is not associated with long
running quries or stale replication slots or prepared transactions.

*Long running:*

postgres=> SELECT now()-query_start,pid, datname, usename, state,
backend_xmin

FROM pg_stat_activity

WHERE backend_xmin IS NOT NULL

ORDER BY age(backend_xmin) DESC;

?column? | pid | datname | usename | state |
backend_xmin

-----------------+-------+-------------------+---------+--------+--------------

00:00:29.910155 | 539 | postgres | | active | 832858371

00:00:23.766305 | 1211 | postgres | | active | 832858509

00:00:00.756961 | 2151 | postgres | | active | 832859484

00:00:00.060784 | 30833 | postgres | root | active | 832859508

00:00:00.004473 | 29270 | postgres | root | active | 832859508

00:00:00.009809 | 29271 | postgres | root | active | 832859508

00:00:00.015169 | 27145 | postgres | root | active | 832859508

00:00:00 | 1450 | postgres | postgres | active | 832859508

00:00:00.010672 | 544 | postgres | root | active | 832859508

00:00:00.034516 | 19940 | postgres | root | active | 832859508

(10 rows)

*stale replication slots:*

postgres=> SELECT slot_name, slot_type, database, xmin

FROM pg_replication_slots

ORDER BY age(xmin) DESC;

slot_name | slot_type | database | xmin

-----------+-----------+----------+------

(0 rows)

*Prepared transaction's :*

postgres=> SELECT gid, prepared, owner, database, transaction AS xmin

postgres-> FROM pg_prepared_xacts

postgres-> ORDER BY age(transaction) DESC;

gid | prepared | owner | database | xmin

-----+----------+-------+----------+------

(0 rows)

Checked for long running queries on replica side , but haven't found any

postgres=> show hot_standby_feedback ;

hot_standby_feedback

----------------------

on

(1 row)

postgres=> SELECT pid, age(current_timestamp, xact_start),usename
,state,left(query,100)

FROM pg_stat_activity

WHERE state <> 'idle' and pid<>pg_backend_pid();

;

pid | age | usename | state | left

-----+-----+---------+-------+------

(0 rows)

postgres=> select pg_is_in_recovery();

pg_is_in_recovery

-------------------

t

(1 row)

Regards,

BK

Responses

Browse pgsql-general by date

  From Date Subject
Next Message David G. Johnston 2022-04-19 06:06:11 Re: oldest xmin is far in the past :: BUT xmin is not available in system
Previous Message Ram Pratap Maurya 2022-04-19 04:41:44 RE: Huge archive log generate in Postgresql-13