Re: IO related waits - Mailing list pgsql-general

From veem v
Subject Re: IO related waits
Date
Msg-id CAB+=1TVWsX5KAJyxcamvfDXr0Buj7_1kjFBFBMBdc5epi8of=A@mail.gmail.com
Whole thread Raw
In response to Re: IO related waits  (Greg Sabino Mullane <htamfids@gmail.com>)
List pgsql-general


On Thu, 19 Sept 2024 at 17:54, Greg Sabino Mullane <htamfids@gmail.com> wrote:
On Thu, Sep 19, 2024 at 5:17 AM veem v <veema0000@gmail.com> wrote:
2024-09-18 17:05:56 UTC:100.72.10.66(54582):USER1@TRANDB:[14537]:DETAIL:  Process 14537 waits for ShareLock on transaction 220975629; blocked by process 14548.

You need to find out exactly what commands, and in what order, all these processes are doing. Deadlocks can be avoided by rearranging your application logic.
 
2024-09-18 17:05:56 UTC:100.72.22.33(54582):USER1@TRANDB:[14537]:ERROR:  current transaction is aborted, commands ignored until end of transaction block
2024-09-18 17:05:56 UTC:100.72.22.33(54582):USER1@TRANDB:[14537]:STATEMENT:  INSERT INTO TRANDB.EXCEP_TAB (...)
2024-09-18 17:05:56 UTC:100.72.22.33(54582):USER1@TRANDB:[14537]:ERROR:  current transaction is aborted, commands ignored until end of transaction block
2024-09-18 17:05:56 UTC:100.72.22.33(54582):USER1@TRANDB:[14537]:STATEMENT:  
2024-09-18 17:05:56 UTC:100.72.22.33(36096):USER1@TRANDB:[14551]:ERROR:  current transaction is aborted, commands ignored until end of transaction block

Fix your application. It should be checking that each command completed and not just blindly pushing on to the next statement while ignoring the error.

This is really difficult to diagnose from afar with only snippets of logs and half-complete descriptions of your business logic. Pull everyone involved into a room with a whiteboard, and produce a document describing exactly what your application does, and how it is doing it. Switch from reactive to proactive.



Thank you Greg.

I was thinking there might be some oddity or difference in the behaviour here in postgres as compared to others, because I have seen deadlock due to UPDATES but never seen deadlocks with INSERT queries before in other databases (though here we have "insert on conflict do nothing"). But I am now thinking , here we have foreign keys and primary keys exist and if the same PK gets inserted from multiple sessions then one will wait if the other has not been committed and that might be creating a situation of locking first and subsequently deadlock. 

But also we are doing batch inserts from multiple sessions but each session will first insert into the parent and then into the child table for those related to PK and FK and it should not overlap across sessions. So I will check if there is a loophole there.

Also another thing which we encountered here , if the session gets errors out with any error(may be deadlock etc) , it's not executing any further transactions and erroring out with "current transaction aborted, command ignored until end of transaction block". And it seems it will need explicit "rollback" and will not be the default rollback, which I was expecting it to do.

Regards
Veem

pgsql-general by date:

Previous
From: Greg Sabino Mullane
Date:
Subject: Re: IO related waits
Next
From: Lok P
Date:
Subject: Re: How batch processing works