Connection pooling helps your app reuse database connections instead of opening a new one every time. This makes your app faster and uses less resources.
Connection pooling concept in Node.js
const { Pool } = require('pg');
const pool = new Pool({
user: 'username',
host: 'localhost',
database: 'mydb',
password: 'password',
port: 5432,
max: 10, // max connections
idleTimeoutMillis: 30000 // close idle connections after 30 seconds
});This example uses the pg library for PostgreSQL in Node.js.
The max option sets how many connections can be open at once.
const { Pool } = require('pg');
const pool = new Pool({
user: 'user1',
host: 'localhost',
database: 'testdb',
password: 'pass123',
port: 5432
});const { Pool } = require('pg');
const pool = new Pool({
max: 5,
idleTimeoutMillis: 10000
});pool.query('SELECT NOW()', (err, res) => { if (err) throw err; console.log(res.rows[0]); pool.end(); });
This program creates a pool with up to 3 connections. It runs a simple query to get the current time from the database, prints it, and then closes the pool.
import { Pool } from 'pg'; const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'testdb', password: 'secret', port: 5432, max: 3, idleTimeoutMillis: 20000 }); async function fetchTime() { try { const res = await pool.query('SELECT NOW()'); console.log('Current time from DB:', res.rows[0].now); } catch (err) { console.error('Error running query', err); } finally { await pool.end(); } } fetchTime();
Always close the pool with pool.end() when your app stops to free resources.
Using a pool avoids the overhead of connecting to the database every time you run a query.
Set max carefully to avoid overloading your database with too many connections.
Connection pooling reuses database connections to improve speed and resource use.
It is useful when your app runs many database queries quickly.
Always configure and close your pool properly to keep your app healthy.
Practice
Solution
Step 1: Understand connection pooling concept
Connection pooling keeps a set of open database connections ready to use.Step 2: Identify the benefit of reusing connections
Reusing connections avoids the overhead of opening and closing connections repeatedly, improving speed.Final Answer:
To reuse database connections and improve performance -> Option CQuick Check:
Connection pooling = reuse connections [OK]
- Thinking pooling creates new connections every time
- Confusing pooling with session storage
- Assuming pooling encrypts connections automatically
Solution
Step 1: Recall mysql2 pool creation syntax
The correct method is createPool with configuration object.Step 2: Match method names with options
Only const pool = mysql.createPool({ host: 'localhost', user: 'root' }); uses createPool correctly; others use invalid method names.Final Answer:
const pool = mysql.createPool({ host: 'localhost', user: 'root' }); -> Option AQuick Check:
Use createPool() to make a pool [OK]
- Using wrong method names like connectPool
- Forgetting to pass config object
- Confusing pool creation with direct connection
const pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'test' });
pool.query('SELECT 1 + 1 AS solution', (err, results) => {
if (err) throw err;
console.log(results[0].solution);
});Solution
Step 1: Understand the SQL query result
The query 'SELECT 1 + 1 AS solution' returns a result with solution = 2.Step 2: Check the console.log output
results[0].solution accesses the first row's solution field, which is 2.Final Answer:
2 -> Option BQuick Check:
Query result = 2 [OK]
- Expecting string '1 + 1' instead of result 2
- Accessing wrong property of results
- Not handling async callback properly
const pool = mysql.createPool({ host: 'localhost', user: 'root' });
pool.getConnection((err, connection) => {
if (err) throw err;
connection.query('SELECT NOW()', (err, results) => {
if (err) throw err;
console.log(results);
connection.release();
});
});Solution
Step 1: Check connection usage in pool
After using a connection from pool, it must be released with connection.release().Step 2: Verify code for releasing connection
The code does not call connection.release(), so connection stays checked out, causing leaks.Final Answer:
The connection is not released back to the pool after query -> Option DQuick Check:
Always release connection after use [OK]
- Forgetting to release connection causing pool exhaustion
- Assuming pool auto-releases connections
- Ignoring error handling in callbacks
Solution
Step 1: Understand best practice for pooling
Creating one pool at app start and reusing it avoids overhead and manages resources well.Step 2: Evaluate other options
Creating new pools per query wastes resources; direct connections lack reuse; never closing connections risks leaks.Final Answer:
Create a single pool at app start and reuse it for all queries -> Option AQuick Check:
One shared pool = best practice [OK]
- Making new pools per query causing overhead
- Not using pooling at all
- Leaving connections open without management
Ready to prove it?
Pass the test and this pattern moves unknown
