relationship of backend_start, query_start, state_change

2020-04-23 Thread Si Chen
Hello,

I'm looking at my pg_stat_activity and trying to figure out what is causing
some of these processes.  I'm using this query:

SELECT pid, wait_event, state_change, backend_start, xact_start,
query_start, state_change - query_start, query from pg_stat_activity where
datname= 'my_database' and state in ('idle', 'idle in transaction', 'idle
in transaction (aborted)', 'disabled');

and what I see is the same PID which have been around for a while in the
same query (COMMIT), but the query_start and state_change are updated and
close to each other:

  pid  | wait_event | state_change  | backend_start
  | xact_start |  query_start  |?column? |
query

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

 32506 | ClientRead | 2020-04-23 09:29:05.6793-07   | 2020-04-23
01:00:19.612478-07 || 2020-04-23 09:29:05.679275-07 |
00:00:00.25 | COMMIT

 32506 | ClientRead | 2020-04-23 09:30:33.247119-07 | 2020-04-23
01:00:19.612478-07 |   | 2020-04-23
09:30:33.247109-07 | 00:00:00.1  | COMMIT

 32506 | ClientRead | 2020-04-23 09:31:31.506914-07 | 2020-04-23
01:00:19.612478-07 |   | 2020-04-23
09:31:31.506905-07 | 00:00:00.09 | COMMIT

 32506 | ClientRead | 2020-04-23 09:32:32.06656-07  | 2020-04-23
01:00:19.612478-07 || 2020-04-23 09:32:32.066552-07 |
00:00:00.08 | COMMIT

 32506 | ClientRead | 2020-04-23 09:36:51.579939-07 | 2020-04-23
01:00:19.612478-07 || 2020-04-23 09:36:51.579931-07 |
00:00:00.08 | COMMIT

So can we close this thread because it's been around since 1 AM and the
last query is always "COMMIT"?  Or should we keep it open because the
query_start keeps updating, and the state_change is basically keeping up
with query_start?

-
Si Chen
Open Source Strategies, Inc.

Our Mission: https://www.youtube.com/watch?v=Uc7lmvnuJHY


Re: Ned to understand why all the idle connections

2020-04-23 Thread Si Chen
Hello David & David,

I have a similar problem -- a lot of idle transactions.  I'm using the
PostgreSQL JDBC driver.  The connections look like this:

 pid  | wait_event | state_change  |
  backend_start | xact_start |  query_start  |
  ?column? | query

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

 32506 | ClientRead | 2020-04-23 09:29:05.6793-07   | 2020-04-23
01:00:19.612478-07 || 2020-04-23 09:29:05.679275-07 |
00:00:00.25 | COMMIT

 32506 | ClientRead | 2020-04-23 09:30:33.247119-07 | 2020-04-23
01:00:19.612478-07 |   | 2020-04-23
09:30:33.247109-07 | 00:00:00.1  | COMMIT

 32506 | ClientRead | 2020-04-23 09:31:31.506914-07 | 2020-04-23
01:00:19.612478-07 |   | 2020-04-23
09:31:31.506905-07 | 00:00:00.09 | COMMIT

 32506 | ClientRead | 2020-04-23 09:32:32.06656-07  | 2020-04-23
01:00:19.612478-07 || 2020-04-23 09:32:32.066552-07 |
00:00:00.08 | COMMIT

 32506 | ClientRead | 2020-04-23 09:36:51.579939-07 | 2020-04-23
01:00:19.612478-07 || 2020-04-23 09:36:51.579931-07 |
00:00:00.08 | COMMIT

It seems like they haven't been doing anything for a long time, but the
state_change keeps getting updated.  Is it possible that state_change is
being updated, maybe by the JDBC driver?

Do you recommend using PgBouncer with JDBC?

-
Si Chen
Open Source Strategies, Inc.

Our Mission: https://www.youtube.com/watch?v=Uc7lmvnuJHY



On Thu, Apr 23, 2020 at 11:41 AM David G. Johnston <
david.g.johns...@gmail.com> wrote:

> On Thursday, April 23, 2020, David Gauthier 
> wrote:
>
>> Hi:
>>
>> psql (9.6.7, server 11.3) on linux
>>
>> I have what appear to be a log of idle connections to my DB.  Query of
>> pg_stat_activity indicates well over half (127/206) are like this...
>>
>>
>> dvdb=# select state_change,wait_event_type,wait_event,state,backend_type
>> from pg_stat_activity where query = '';
>>  state_change  | wait_event_type | wait_event  |
>> state | backend_type
>>
>> ---+-+-+---+--
>>  2020-04-23 12:57:58.215854-04 | Client  | ClientRead  |
>> idle  | client backend
>>
>> What does this indicate?
>>
>> The vast majority of the connections are through perl/dbi.   If a
>> connection is made, and is currently not doing anything, does it appear in
>> pg_stat_activity as "idle" ?  If, in DBI, $dbh->disconnect is used whenever
>> the DB is no longer needed, will it disconnect from the DB and NOT appear
>> as an idle in pg_stat_activity ?
>>
>> If there are any other column s in pg_stat-activity you'd like to see, or
>> any other query in any of the system tables, please advise.
>>
>
> If the server has an active, authenticated, connection/process running it
> shows up here.  Yes, idle is the state used to denote the the session is
> “not doing anything”...
>
> $dbh->disconnect typically will indeed close the connection.  There can be
> exceptions if your architecture uses connection pooling.
>
> David J.
>
>


Re: Ned to understand why all the idle connections

2020-04-23 Thread Si Chen
Thanks for answering my questions.

Sorry I didn't mean to "top post"  I thought that my other email got lost
because I had sent it to lists.postgresql.org

-
Si Chen
Open Source Strategies, Inc.

Our Mission: https://www.youtube.com/watch?v=Uc7lmvnuJHY



On Thu, Apr 23, 2020 at 2:31 PM David G. Johnston <
david.g.johns...@gmail.com> wrote:

> Please don't top-post; and this is a fairly rude hijack posting given that
> you already have a thread going, from today no less, where you've basically
> asked this very same question.
>
> On Thu, Apr 23, 2020 at 2:18 PM Si Chen 
> wrote:
>
>> Hello David & David,
>>
>> I have a similar problem -- a lot of idle transactions.  I'm using the
>> PostgreSQL JDBC driver.  The connections look like this:
>>
>>  pid  | wait_event | state_change  |
>>   backend_start | xact_start |  query_start  |
>>   ?column? | query
>>
>>
>> ---++---+---++---+-+
>>
>>  32506 | ClientRead | 2020-04-23 09:29:05.6793-07   | 2020-04-23
>> 01:00:19.612478-07 || 2020-04-23 09:29:05.679275-07 |
>> 00:00:00.25 | COMMIT
>>
>>  32506 | ClientRead | 2020-04-23 09:30:33.247119-07 | 2020-04-23
>> 01:00:19.612478-07 |   | 2020-04-23
>> 09:30:33.247109-07 | 00:00:00.1  | COMMIT
>>
>>  32506 | ClientRead | 2020-04-23 09:31:31.506914-07 | 2020-04-23
>> 01:00:19.612478-07 |   | 2020-04-23
>> 09:31:31.506905-07 | 00:00:00.09 | COMMIT
>>
>>  32506 | ClientRead | 2020-04-23 09:32:32.06656-07  | 2020-04-23
>> 01:00:19.612478-07 || 2020-04-23 09:32:32.066552-07 |
>> 00:00:00.08 | COMMIT
>>
>>  32506 | ClientRead | 2020-04-23 09:36:51.579939-07 | 2020-04-23
>> 01:00:19.612478-07 || 2020-04-23 09:36:51.579931-07 |
>> 00:00:00.08 | COMMIT
>>
>> It seems like they haven't been doing anything for a long time, but the
>> state_change keeps getting updated.
>>
>
> If the state_change timestamp keeps changing then by definition they are
> doing something..
>
>
>>   Is it possible that state_change is being updated, maybe by the JDBC
>> driver?
>>
>
> Directly, no, that particular field is read-only by the user and so
> nothing is going to directly update it.  However, as soon as the session
> changes state it will change as well.
>
> The most likely answer is that your setup for JDBC includes a connection
> pool that is periodically checking to see if its session is still active.
> You should work on trying to prove or disprove that assumption.
>
> Do you recommend using PgBouncer with JDBC?
>>
>
> I try to avoid making recommendations without knowing the situation in
> which something is operating.  Given the level of expertise demonstrated
> here I would, however, advise against adding another architectural
> component to your setup until your understand completely what you are
> already working with.  If at that point you can define a problem that you
> want to solve, and pgBouncer would constitute a solution, then you could
> consider adding it.
>
> David J.
>
>