RE: [EXT] pg_stat_activity.backend_xmin

From: "Dirschel, Steve" <steve(dot)dirschel(at)thomsonreuters(dot)com>
To: Rob Sargent <robjsargent(at)gmail(dot)com>
Cc: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>, "Medarametla, Pavan (TR Technology)" <pavan(dot)medarametla(at)thomsonreuters(dot)com>
Subject: RE: [EXT] pg_stat_activity.backend_xmin
Date: 2022-09-21 16:22:43
Message-ID: DM6PR03MB4332604541D21887E44142A3FA4F9@DM6PR03MB4332.namprd03.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

>> On Sep 21, 2022, at 9:32 AM, Dirschel, Steve <steve(dot)dirschel(at)thomsonreuters(dot)com> wrote:
>>
>> 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
>
>What stack is the application using? Anything like Spring or Hibernate involved?

Java is the stack. Thanks

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Zheng Li 2022-09-21 16:55:35 Re: Support logical replication of DDLs
Previous Message JITEN KUMAR SHAH 2022-09-21 15:55:49 Re: 10.22 Windows binaries download? (zip "invalid" on Enterprisedb)