Connection pooling helps manage database connections efficiently by reusing them instead of opening a new one every time.
Connection pooling in GraphQL
const pool = new Pool({ connectionString: 'your-database-url', max: 10, // max number of connections idleTimeoutMillis: 30000 // close idle connections after 30 seconds });
This example shows how to create a pool with a max of 10 connections.
Idle connections close after 30 seconds to save resources.
const pool = new Pool({ connectionString: 'postgresql://user:pass@localhost/db', max: 5 });
const pool = new Pool({ connectionString: 'postgresql://user:pass@localhost/db', idleTimeoutMillis: 10000 });
This code creates a connection pool with 3 max connections. It fetches user ids and names from the users table, then releases the connection back to the pool.
const { Pool } = require('pg'); const pool = new Pool({ connectionString: 'postgresql://user:pass@localhost/mydb', max: 3, idleTimeoutMillis: 20000 }); async function fetchUsers() { const client = await pool.connect(); try { const res = await client.query('SELECT id, name FROM users'); console.log(res.rows); } finally { client.release(); } } fetchUsers();
Always release connections back to the pool to avoid running out of connections.
Adjust max connections based on your app's needs and database limits.
Connection pooling reuses database connections to improve speed and resource use.
It is useful when many database requests happen quickly or at the same time.
Remember to release connections after use to keep the pool healthy.
Practice
Solution
Step 1: Understand connection pooling concept
Connection pooling means reusing existing database connections instead of opening new ones each time.Step 2: Identify the benefit in GraphQL context
Reusing connections reduces delay and resource use, improving performance when many queries happen.Final Answer:
To reuse database connections and improve performance -> Option AQuick Check:
Connection pooling = reuse connections [OK]
- Thinking pooling creates new connections each time
- Confusing pooling with data caching
- Assuming pooling encrypts connections
Solution
Step 1: Identify common connection pool methods
Most connection pools provide a release() method to return the connection to the pool.Step 2: Differentiate from close or disconnect
close() or disconnect() usually close the connection permanently, not return it to the pool.Final Answer:
connection.release() -> Option AQuick Check:
Release method returns connection to pool [OK]
- Using close() which ends connection permanently
- Confusing disconnect() with release()
- Not releasing connections causing pool exhaustion
const conn = pool.getConnection();
const result = await conn.query('SELECT * FROM users');
conn.release();
return result;
What will happen if conn.release() is omitted?Solution
Step 1: Understand connection release role
Calling release() returns the connection to the pool for reuse by others.Step 2: Consequence of omitting release()
If release() is not called, the connection stays checked out and unavailable for others, reducing pool capacity.Final Answer:
The connection remains checked out, reducing available connections -> Option CQuick Check:
Omitting release() = connection not returned [OK]
- Assuming connection closes automatically
- Thinking query fails without release
- Believing connection is reused without release
Solution
Step 1: Interpret the error message
"Pool exhausted" means all connections are checked out and none are free to use.Step 2: Identify common cause
This usually happens if connections are not released properly after use, causing depletion.Final Answer:
Connections are not being released back to the pool -> Option BQuick Check:
Pool exhausted = no released connections [OK]
- Blaming database downtime without checking pool
- Confusing schema errors with connection issues
- Assuming query syntax causes pool exhaustion
Solution
Step 1: Understand connection pooling and batching
Connection pooling reuses connections; batching combines multiple queries into one to reduce load.Step 2: Combine both for optimization
Batching queries reduces number of database calls; pooling ensures connections are reused efficiently.Step 3: Evaluate options
Opening new connections or disabling pooling wastes resources; not batching misses optimization.Final Answer:
Use connection pooling and batch multiple GraphQL queries into one database query -> Option DQuick Check:
Pooling + batching = best performance [OK]
- Opening new connections each time wastes resources
- Disabling pooling loses reuse benefits
- Not batching queries increases load
Ready to prove it?
Pass the test and this pattern moves unknown
