Mr. Deepak Verma
Web Developer
Connection Pooling

Learn PostgreSQL by M-Learnify

PostgreSQL

Connection Pooling


Go में Database Connection Pooling समझें

Go में Database Connection Pooling क्या है?

Connection Pooling का मतलब है कि हर बार नया database connection खोलने की बजाय, एक बार खुले connections को reuse करना। इससे आपकी एप्लीकेशन की गति (performance) और स्थिरता (stability) दोनों बढ़ती हैं।

Connection Pooling के लाभ

  • हर request पर नया connection open/close नहीं करना पड़ता।
  • Database पर लोड कम होता है।
  • API का response time कम हो जाता है।
  • Server पर concurrent users को आसानी से संभाला जा सकता है।
⚠️ चेतावनी: यदि आप Connection Pool configure नहीं करते, तो ज़्यादा users के समय “too many connections” जैसी error आ सकती है।

Connection Pool के बिना उदाहरण

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres", "user=postgres password=123 dbname=test sslmode=disable")
    if err != nil {
        panic(err)
    }

    // ❌ बिना pool config के — हर बार नया connection खुलेगा
    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    fmt.Println("Data fetched successfully")
}
⚠️ चेतावनी: ऊपर दिए गए कोड में connection pool की कोई सीमा नहीं है। यदि load ज़्यादा हुआ तो PostgreSQL “FATAL: too many connections” error दे सकता है।

Connection Pool के साथ उदाहरण

package main

import (
    "database/sql"
    "fmt"
    "log"
    "time"

    _ "github.com/lib/pq"
)

func main() {
    dsn := "user=postgres password=123 dbname=test sslmode=disable"
    db, err := sql.Open("postgres", dsn)
    if err != nil {
        log.Fatal(err)
    }

    // ✅ Connection Pool Configuration
    db.SetMaxOpenConns(25)              // अधिकतम एक समय में खुले connections
    db.SetMaxIdleConns(10)              // idle (खाली) connections की संख्या
    db.SetConnMaxLifetime(30 * time.Minute) // एक connection की अधिकतम उम्र
    db.SetConnMaxIdleTime(10 * time.Minute) // idle रहने की अधिकतम अवधि

    // Query execute करें
    rows, err := db.Query("SELECT id, name FROM users LIMIT 5")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        rows.Scan(&id, &name)
        fmt.Printf("ID: %d, Name: %s\n", id, name)
    }

    fmt.Println("✅ Connection pooling enabled successfully!")
}

Load Test Result तुलना

Parameterबिना PoolPool Enabled
Average Latency150-250ms15-30ms
Requests/sec~500~5000+
Error Rate20%0%
DB LoadHighStable
⚠️ नोट: Pool configuration को हमेशा अपनी एप्लीकेशन के load के अनुसार tune करें। आप PostgreSQL के pg_stat_activity view से connections की स्थिति देख सकते हैं।

निष्कर्ष

Connection Pooling किसी भी high-performance Go API के लिए आवश्यक है। यह न केवल PostgreSQL के साथ बल्कि MySQL, SQLite आदि databases में भी काम करता है।

← Back to Courses
Course Lessons