postgresql

How to increase the max connections in postgres?


I am using Postgres DB for my product. While doing the batch insert using slick 3, I am getting an error message:

org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.

My batch insert operation will be more than thousands of records. Max connection for my postgres is 100.

How to increase the max connections?


Solution

  • Just increasing max_connections is bad idea. You need to increase shared_buffers and kernel.shmmax as well.


    Considerations

    max_connections determines the maximum number of concurrent connections to the database server. The default is typically 100 connections.

    Before increasing your connection count you might need to scale up your deployment. But before that, you should consider whether you really need an increased connection limit.

    Each PostgreSQL connection consumes RAM for managing the connection or the client using it. The more connections you have, the more RAM you will be using that could instead be used to run the database.

    A well-written app typically doesn't need a large number of connections. If you have an app that does need a large number of connections then consider using a tool such as pg_bouncer which can pool connections for you. As each connection consumes RAM, you should be looking to minimize their use.


    How to increase max connections

    1. Increase max_connection and shared_buffers

    in /var/lib/pgsql/{version_number}/data/postgresql.conf

    change

    max_connections = 100
    shared_buffers = 24MB
    

    to

    max_connections = 300
    shared_buffers = 80MB
    

    The shared_buffers configuration parameter determines how much memory is dedicated to PostgreSQL to use for caching data.

    2. Change kernel.shmmax

    You would need to increase kernel max segment size to be slightly larger than the shared_buffers.

    In file /etc/sysctl.conf set the parameter as shown below. It will take effect when postgresql reboots (The following line makes the kernel max to 96Mb)

    kernel.shmmax=100663296
    

    References

    Postgres Max Connections And Shared Buffers

    Tuning Your PostgreSQL Server