Mapcache folks,

This is a technical question about the Mapcache connection pool and how 
postgreql dimensions are implemented.

I have a big mapcache WMS with several hundred layers defined.  Most of them 
have a postgresql dimension that reports back a list of available timestamps 
for these layers.  When we are under load, I end up with a couple thousand 
database connections all coming from Mapcache.  They're only lightweight 
dimension queries... it's just a LOT of connections hanging open.  I'm looking 
for the upper bound on the number of these connections.

Looking at the Mapcache source code...  I see a hard coded max_list_size  = 10 
in connection_pool.c.   I assume that means any one mapcache process/thread is 
allowed to keep up to ten network connections open at one time.

dimension_pg.c  seems to get its connections from this pool. Other connections 
use this pool though, right?   Like the source URLs?

So if I have Mapcache running as an Apache module, and if Apache can launch up 
to 256 threads...  I could be on the hook for up to 2560 connections sitting 
open (until the threads die off / time out.)  Is my understanding correct?

It also looks like dimension_pg uses prepared statements on the db server.  
That would probably break a connection pooler like PgBouncer.  So my options 
for managing the number of postgresql connections are: 

1.  Setting an obscene max_connections limit in postgresql.conf, allowing my 
mapcache role to consume a lot of them.
2.  Reducing the number of Apache threads in mpm_event   (At the risk of 
impacting general Apache performance)
3.  Using the fastcgi version of Mapcache, and limiting the number of mapcache 
fcgi processes
4.  Reducing max_list_size in connection_pool.c, which might impact performance.

Am I on the right track here?

-Tim

_______________________________________________
MapServer-users mailing list
MapServer-users@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to