PGAgent Connection Pool Leaking

From: Rob Emery <re-pgsql(at)codeweavers(dot)net>
To: pgadmin-support(at)lists(dot)postgresql(dot)org
Subject: PGAgent Connection Pool Leaking
Date: 2017-10-19 08:51:05
Message-ID: CAPCETpsVvZhgzSjterbJORXWVtf8brkG3tnS2REy9c=7e26_Kg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-support

Hiya,

We run postgresql-9.5 (9.5.5-1.pgdg80+1) on debian jessie (using the
postgres apt repo) with replication between two servers. We have pgagent
running on both the master and the slave using:
/usr/bin/pgagent -f host=pgserver dbname=postgres user=username
password=password -l 2 -s /home/robertemery/test/pgagent.log
where pgserver is a CNAME that we use to direct traffic to the current
master.

We are finding that over-time, the pgagent user ends up with hundreds of
connections into the postgresql cluster from both pgagents. If we kill and
restart the pgagent process, it returns to 1.

When we run a job the number of connections goes from 1 -> 3 then back to 1
again; however this morning (for example) one of the servers has ended up
with 2 connections for the pgagent user:

SELECT * FROM pg_stat_activity WHERE usename LIKE '%pgagent%'; looks like :

12379;"postgres";14853;22872466;"pgagent_login_role";"";"192.168.1.1";"";58223;"2017-10-18
08:20:29.481096+01";"";"2017-10-19 09:16:25.656794+01";"2017-10-19
09:16:25.657219+01";f;"idle";;;"SELECT J.jobid FROM pgagent.pga_job J
WHERE jobenabled AND jobagentid IS NULL AND jobnextrun <= now()
AND (jobhostagent = '' OR jobhostagent = 'pgsqla02') ORDER BY jobnextrun"
12379;"postgres";10184;22872466;"pgagent_login_role";"";"192.168.1.2";"";34501;"2017-10-18
15:20:53.282212+01";"";"2017-10-19 09:16:29.061761+01";"2017-10-19
09:16:29.062225+01";f;"idle";;;"SELECT J.jobid FROM pgagent.pga_job J
WHERE jobenabled AND jobagentid IS NULL AND jobnextrun <= now()
AND (jobhostagent = '' OR jobhostagent = 'pgsqla01') ORDER BY jobnextrun"
12379;"postgres";13060;22872466;"pgagent_login_role";"";"192.168.1.2";"";34518;"2017-10-19
07:20:02.680711+01";"";"2017-10-19 07:20:02.70995+01";"2017-10-19
07:20:02.723907+01";f;"idle";;;"UPDATE pgagent.pga_job SET
jobagentid=10184, joblastrun=now() WHERE jobagentid IS NULL AND jobid=2"

It looks like the UPDATE statement is the new connection that's leaking.

Looking at the pgagent log for 07:20 (we have a job that runs at 07:10,
07:20, 07:30, 07:40) I can see:

Thu Oct 19 07:19:57 2017 : DEBUG: Clearing inactive connections
Thu Oct 19 07:19:57 2017 : DEBUG: Connection stats: total - 1, free - 0,
deleted - 0
Thu Oct 19 07:19:57 2017 : DEBUG: Checking for jobs to run
Thu Oct 19 07:19:57 2017 : DEBUG: Sleeping...
Thu Oct 19 07:20:02 2017 : DEBUG: Clearing inactive connections
Thu Oct 19 07:20:02 2017 : DEBUG: Connection stats: total - 1, free - 0,
deleted - 0
Thu Oct 19 07:20:02 2017 : DEBUG: Checking for jobs to run
Thu Oct 19 07:20:02 2017 : DEBUG: Creating job thread for job 2
Thu Oct 19 07:20:02 2017 : DEBUG: Creating DB connection:
user=pgagent_login_role host=pgserver password=password dbname=postgres
Thu Oct 19 07:20:02 2017 : DEBUG: Allocating new connection to database
postgres
Thu Oct 19 07:20:02 2017 : DEBUG: Starting job: 2
Thu Oct 19 07:20:02 2017 : DEBUG: Destroying job thread for job 2
Thu Oct 19 07:20:02 2017 : DEBUG: Sleeping...
Thu Oct 19 07:20:07 2017 : DEBUG: Clearing inactive connections
Thu Oct 19 07:20:07 2017 : DEBUG: Connection stats: total - 2, free - 0,
deleted - 0
Thu Oct 19 07:20:07 2017 : DEBUG: Checking for jobs to run
Thu Oct 19 07:20:07 2017 : DEBUG: Sleeping...

which looks like it allocates a connection but never gives it up again.
From this point on DEBUG: Connection stats: total - 2, free - 0, deleted -
0 always shows 2.

Looking at the run at 07:10 it looks different:

Thu Oct 19 07:09:55 2017 : DEBUG: Clearing inactive connections
Thu Oct 19 07:09:55 2017 : DEBUG: Connection stats: total - 1, free - 0,
deleted - 0
Thu Oct 19 07:09:55 2017 : DEBUG: Checking for jobs to run
Thu Oct 19 07:09:55 2017 : DEBUG: Sleeping...
Thu Oct 19 07:10:00 2017 : DEBUG: Clearing inactive connections
Thu Oct 19 07:10:00 2017 : DEBUG: Connection stats: total - 1, free - 0,
deleted - 0
Thu Oct 19 07:10:00 2017 : DEBUG: Checking for jobs to run
Thu Oct 19 07:10:00 2017 : DEBUG: Creating job thread for job 2
Thu Oct 19 07:10:01 2017 : DEBUG: Creating DB connection:
user=pgagent_login_role host=pgserver password=password dbname=postgres
Thu Oct 19 07:10:01 2017 : DEBUG: Allocating new connection to database
postgres
Thu Oct 19 07:10:01 2017 : DEBUG: Starting job: 2
Thu Oct 19 07:10:01 2017 : DEBUG: Sleeping...
Thu Oct 19 07:10:01 2017 : DEBUG: Creating DB connection:
user=pgagent_login_role host=pgserver password=password dbname=postgres
dbname=ourdatabasename
Thu Oct 19 07:10:01 2017 : DEBUG: Allocating new connection to database
ourdatabasename
Thu Oct 19 07:10:01 2017 : DEBUG: Executing SQL step 3 (part of job 2)
Thu Oct 19 07:10:01 2017 : DEBUG: Returning connection to database
ourdatabasename
Thu Oct 19 07:10:01 2017 : DEBUG: Returning connection to database postgres
Thu Oct 19 07:10:01 2017 : DEBUG: Completed job: 2
Thu Oct 19 07:10:01 2017 : DEBUG: Destroying job thread for job 2
Thu Oct 19 07:10:06 2017 : DEBUG: Checking for jobs to run
Thu Oct 19 07:10:06 2017 : DEBUG: Sleeping...

I'm at a bit of a loss to debug this further now, it looks like a bug in
the connection pooling to me?

Many Thanks,
Rob

--
Robert Emery

--
<https://codeweavers.net>

<http://us15.campaign-archive1.com/?u=fcb361cfa194cf70551bc5169&id=f556b0bf09>
Codeweavers
October
Newsletter
<http://us15.campaign-archive1.com/?u=fcb361cfa194cf70551bc5169&id=f556b0bf09>
*l *Auto Trader extends partnership with Codeweavers
<https://codeweavers.net/company-blog/auto-trader-extends-partnership-with-codeweavers-to-power-finance-on-auto-trader-websites>

<https://codeweavers.net/automotive-vision-conference-agenda>

*What are Codeweavers doing to gear up for GDPR?
<https://codeweavers.net/company-blog/what-are-codeweavers-doing-to-gear-up-for-gdpr>*

*Phone:* 0800 021 0888 * Email: *contactus(at)codeweavers(dot)net
*Codeweavers Ltd* | Barn 4 | Dunston Business Village | Dunston | ST18 9AB
Registered in England and Wales No. 04092394 | VAT registration no. 974
9705 63

<https://www.linkedin.com/company/codeweavers-limited>
<https://vimeo.com/codeweaversltd> [image:
https://plus.google.com/b/105942302039373248738/+CodeweaversNet]
<https://plus.google.com/b/105942302039373248738/+CodeweaversNet> [image:
https://twitter.com/CodeweaversTeam] <https://twitter.com/CodeweaversTeam>

Responses

Browse pgadmin-support by date

  From Date Subject
Next Message Dave Page 2017-10-19 08:55:48 Re: PGAgent Connection Pool Leaking
Previous Message Dave Page 2017-10-19 08:19:02 Re: Significance of queries listed under server activity items