Обсуждение: [SQL] commit not completing - how to investigate?
I have a situation where the pg_stat_activity view shows that can have some processes that are idle and not completing. In some cases the statement being executed is COMMIT. How can I investigate WHY these processes are not completing. Presumably they are waiting on something, but I'm not sure how to work out what this is. Thanks Tim
Tim Dudgeon <tdudgeon.ml@gmail.com> writes: > I have a situation where the pg_stat_activity view shows that can have > some processes that are idle and not completing. In some cases the > statement being executed is COMMIT. Are you sure you're interpreting the view properly? If the session state is shown as idle, it's idle. We used to show the query field as empty in that case, but recent PG versions allow the query field to continue to show the last-completed command. regards, tom lane
Maybe I'm not interpreting it correctly. I was assuming that if the view reported a row then that row was still "happening". Yes, the state is "idle", and the command is "COMMIT". But if the COMMIT has completed then the process should finish and the row not be present? So is what you are suggesting that in my case I'm using a connection pool, and the COMMIT has completed successfully, the connection released back to the pool, but not yet closed, so that process is still running? Tim On 21/07/2017 15:14, Tom Lane wrote: > Tim Dudgeon <tdudgeon.ml@gmail.com> writes: >> I have a situation where the pg_stat_activity view shows that can have >> some processes that are idle and not completing. In some cases the >> statement being executed is COMMIT. > Are you sure you're interpreting the view properly? If the session > state is shown as idle, it's idle. We used to show the query field > as empty in that case, but recent PG versions allow the query field > to continue to show the last-completed command. > > regards, tom lane
Tim Dudgeon <tdudgeon.ml@gmail.com> writes: > Yes, the state is "idle", and the command is "COMMIT". > But if the COMMIT has completed then the process should finish and the > row not be present? Well, that's up to the connected client whether it's going to terminate the session or not. > So is what you are suggesting that in my case I'm using a connection > pool, and the COMMIT has completed successfully, the connection released > back to the pool, but not yet closed, so that process is still running? That's sort of the point of a connection pooler, to re-use database sessions rather than establishing new ones all the time. But the database doesn't know that a pooler is in use; it just sees a client connection that's not doing anything right now. regards, tom lane