[prev in list] [next in list] [prev in thread] [next in thread]
List: postgresql-general
Subject: RE: [EXT] Re: pg_stat_activity.backend_xmin
From: "Dirschel, Steve" <steve.dirschel () thomsonreuters ! com>
Date: 2022-09-21 15:32:47
Message-ID: DM6PR03MB4332F78D8B98D802279600C5FA4F9 () DM6PR03MB4332 ! namprd03 ! prod ! outlook ! com
[Download RAW message or body]
On Wed, 2022-09-21 at 14:11 +0000, Dirschel, Steve wrote:
> > We are troubleshooting an issue where autovacuum is not cleaning up a table.
> > The application using this database runs with autocommit turned off.
> > We can see in pg_stat_activity lots of sessions “idle in transaction”
> > even though those sessions have not executed any DML- they have
> > executed selects but no DML. The database’s isolation level is set to read \
> > committed.
> "backend_xmin" is set when the session has an active snapshot. Such a snapshot is \
> held for the whole duration of a transaction in the REPEATABLE READ isolation \
> level, but there are cases where you can see that in READ COMMITTED isolation level \
> > as well:
> - if there is a long running query
>
> - if there is a cursor open
>
> Perhaps you could ask your developers if they have long running read-only \
> transactions with cursors.
> Yours,
> Laurenz Albe
Thanks for the reply Laurenz. For an application session in this "state" \
pg_stat_activity shows the state of "idle in transaction" and backend_xmin is \
populated. The query shows the last select query it ran. It is not currently \
executing a query. And dev has said they are not using a cursor for the query. So \
it does not appear they have long running read-only transactions with cursors.
Outside that scenario can you think of any others where a session:
1. Login to the database
2. Set autocommit off
3. Run select query, query completes, session does nothing after that query \
completes. 4. transaction isolation level is read committed
That session sitting there idle in transaction has backend_xmin populated. When I \
run that test backend_xmin does not get populated unless I set my transaction \
isolation level to repeatable read. We have enabled statement logging so we can see \
if their sessions are changing that transaction isolation level behind the scenes \
that they are not aware of but so far we have not seen that type of command logged.
Regards
Steve
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic