Giter VIP home page Giter VIP logo

Comments (6)

WoodyWoodsta avatar WoodyWoodsta commented on July 16, 2024 1

We have both bursty and continuous clients so having an idle timeout is a default which feels the most responsible to me.

Cheap query every 10 seconds from even 1000 clients is pale in comparison to an actual workload! Thank you for your help!

from node-postgres.

brianc avatar brianc commented on July 16, 2024

Hmm...I'm not entirely clear on what you're looking for, but I'll do my best to give you some more information. You want a flag or something to check on the pool to see if the pool is able to connect to the DB? One way would be to manually instantiate and connect a client outside of the pool in some sort of startup section...wait for that client to connect, then disconnect it. Then you know the pool should be able to connect (provided you use the same connection info & the db doesn't go down between when the check connection was made & the pool was first asked to connect!). Otherwise you could do something like

async function onProcessStartup() {
  const pool = new Pool()
  await pool.query('SELECT 1;')
}

The startup handshake with postgres of creating a connection can take 10 to 100 times longer than executing a query on an already connected client, depending on your environment.

from node-postgres.

WoodyWoodsta avatar WoodyWoodsta commented on July 16, 2024

Thanks, that's useful. In the meantime we have actually gone with the select 1; approach.

What I was looking to find out is if pool.totalCount > 0 is an accurate indication that the pool is successfully connected to the DB, assuming that the DB will close connections if it is unhealthy.

from node-postgres.

brianc avatar brianc commented on July 16, 2024

Yeah pool.totalCount will definitely tell you how many clients are in the pool (both active & idle). If postgres becomes unavailable you're correct all the clients will be closed & removed from the pool immediately after they receive an error from their connection (either a network OR postgres error) while they're idle in the pool! You can still run into instances where your pool is fully drained (due to idleTimeoutMillis) & so it will be empty but your application might still be considered healthy.

from node-postgres.

WoodyWoodsta avatar WoodyWoodsta commented on July 16, 2024

You can still run into instances where your pool is fully drained (due to idleTimeoutMillis) & so it will be empty but your application might still be considered healthy.

Yes this has occurred to me!

So it seems their are two approaches:

  1. Periodically query the db with a cheap query
  2. Disable connection idle timeout and check connection count

Option 1 is probably the most robust while maintaining the ability to set pool sizes and idle timeouts as required for the client without flooding the DB with connections at scale.

from node-postgres.

brianc avatar brianc commented on July 16, 2024

Yeah definitely. 1 is probably the way to go. A cheap query is really cheap to execute both from postgres & node's perspective, so it should be minimal impact on the system.

You can technically let your connections never idle out...it doesn't hurt anything.... Having the idle timeout just kinda the "try turning it off and back on again" approach automatically built in, and since connections to postgres are a semi limited resource (unless you're running pg-bouncer or something) might as well not hog 'em if you're not usin' 'em. If your app stays under steady full load they will never timeout anyway.

from node-postgres.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.