0Pricing
SQL Academy · บทเรียน

การรวมการเชื่อมต่อ: PgBouncer

เรียกใช้ PgBouncer ในโหมดรวมการเชื่อมต่อระดับธุรกรรม กำหนดขนาดกลุ่มการเชื่อมต่อให้เหมาะสม และหลีกเลี่ยงกับดักคำสั่งที่เตรียมไว้

การรวมการเชื่อมต่อ: PgBouncer เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องรวมการเชื่อมต่อ

การเชื่อมต่อ PostgreSQL แต่ละรายการเป็นกระบวนการ OS แยกกัน จึงใช้หน่วยความจำและ CPU มาก แอปพลิเคชันที่เปิดและปิดการเชื่อมต่อทุกคำขอจะใช้ทรัพยากรของเซิร์ฟเวอร์จนหมดอย่างรวดเร็ว การรวมการเชื่อมต่อจะนำการเชื่อมต่อที่มีอายุการใช้งานยาวนานจำนวนไม่มากกลับมาใช้ซ้ำ

ต้นทุนต่อการเชื่อมต่อ

กระบวนการฝั่งเซิร์ฟเวอร์ PostgreSQL ทั่วไปใช้ RAM 5–10 MB การเชื่อมต่อ 500 รายการใช้ RAM ประมาณ 5 GB เฉพาะสำหรับกระบวนการฝั่งเซิร์ฟเวอร์ PgBouncer สามารถจัดสรรไคลเอ็นต์หลายพันรายให้ใช้การเชื่อมต่อฝั่งเซิร์ฟเวอร์ 50 รายการร่วมกันได้

โหมดการรวมการเชื่อมต่อสามแบบ

  • เซสชัน — ไคลเอ็นต์ได้รับการเชื่อมต่อเฉพาะสำหรับเซสชันทั้งหมด
  • ธุรกรรม — ไคลเอ็นต์ได้รับการเชื่อมต่อหนึ่งรายการต่อธุรกรรม
  • คำสั่ง — ใช้การเชื่อมต่อหนึ่งรายการต่อคำสั่ง ซึ่งไม่ค่อยได้ใช้

โหมดธุรกรรม (แนะนำ)

แต่ละธุรกรรมจะได้รับการเชื่อมต่อกับเซิร์ฟเวอร์ ไคลเอ็นต์เดียวกันอาจใช้การเชื่อมต่อคนละรายการในแต่ละธุรกรรม

# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb

[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50

ข้อควรระวังของโหมดธุรกรรม

คุณลักษณะที่ต้องอาศัยสถานะของเซสชันจะใช้งานไม่ได้:

  • คำสั่งที่เตรียมไว้ (ต้องใช้กระบวนการฝั่งเซิร์ฟเวอร์เดียวกันในการเรียกใช้แต่ละครั้ง)
  • SET LOCAL ... (การกำหนดค่าต่อธุรกรรมใช้ได้ แต่ SET ... ที่คงอยู่ข้ามธุรกรรมใช้ไม่ได้)
  • LISTEN / NOTIFY (ต้องใช้การเชื่อมต่อที่คงอยู่)
  • เคอร์เซอร์ที่มีอายุยืนกว่าธุรกรรม

โหมดเซสชัน

ใช้เมื่อโหมดธุรกรรมทำให้แอปพลิเคชันของคุณใช้งานไม่ได้ แต่คุณจะรองรับไคลเอ็นต์พร้อมกันได้น้อยลง

กำหนดขนาดกลุ่มการเชื่อมต่อ

หลักคร่าว ๆ: default_pool_size ≈ vCPU count × 2 + spindles ค่าสูงเกินไปจะทำให้การสลับบริบทลดความเร็วในการประมวลผล ส่วนค่าต่ำเกินไปจะทำให้ต้องรอการเชื่อมต่อจากกลุ่ม

PgBouncer หน้า HAProxy

โครงสร้างระบบจริงที่ใช้กันทั่วไป:

App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres

คำสั่งที่เตรียมไว้ในโหมดธุรกรรม

PgBouncer รุ่นใหม่ (1.21+) รองรับคำสั่งที่เตรียมไว้ระดับโปรโตคอลในโหมดธุรกรรม ส่วนรุ่นเก่าให้ใช้คิวรีแบบง่ายหรือโหมดเซสชัน

ตรวจสอบ PgBouncer

เชื่อมต่อฐานข้อมูลผู้ดูแลระบบ (ฐานข้อมูลพิเศษ):

psql -p 6432 -U pgbouncer pgbouncer

-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;

ทางเลือกอื่น

  • pgpool-II — การรวมการเชื่อมต่อ + การกระจายโหลด + การเขียนคิวรีใหม่
  • Odyssey — เครื่องมือรวมการเชื่อมต่อของ Yandex ที่ทำงานหลายเธรด
  • กลุ่มการเชื่อมต่อฝั่งไดรเวอร์ — มักใช้ร่วมกับ PgBouncer เพื่อรวมการเชื่อมต่อทั้งคลัสเตอร์

กลุ่มการเชื่อมต่อของแอปพลิเคชัน + PgBouncer

โดยทั่วไปแอปพลิเคชันจะมีกลุ่มการเชื่อมต่อของตัวเอง (HikariCP, pgxpool) และเชื่อมต่อผ่าน PgBouncer ด้วย การรวมการเชื่อมต่อสองชั้น — กลุ่มการเชื่อมต่อของแอปจะรักษาการเชื่อมต่อกับตัวจัดการไว้ ส่วนตัวจัดการจะจัดสรรการเชื่อมต่อเหล่านั้นให้ใช้ร่วมกับ PostgreSQL

สรุปทบทวน

PgBouncer เป็นสิ่งจำเป็นสำหรับระบบที่มีขนาดการใช้งานจริงจัง

  • โหมดธุรกรรมเป็นมาตรฐาน
  • ระวังคำสั่งที่เตรียมไว้ / SET / LISTEN
  • ขนาดกลุ่มการเชื่อมต่อประมาณ vCPU × 2
  • ตรวจสอบด้วย SHOW POOLS

ตรวจสอบอย่างรวดเร็ว

โหมดใดของ PgBouncer ที่จัดสรรไคลเอ็นต์จำนวนมากที่สุดให้ใช้การเชื่อมต่อเซิร์ฟเวอร์จำนวนน้อยที่สุดร่วมกัน

คำถามที่พบบ่อย

บทเรียน “การรวมการเชื่อมต่อ: PgBouncer” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การรวมการเชื่อมต่อ: PgBouncer” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การรวมการเชื่อมต่อ: PgBouncer”

เรียกใช้ PgBouncer ในโหมดรวมการเชื่อมต่อระดับธุรกรรม กำหนดขนาดกลุ่มการเชื่อมต่อให้เหมาะสม และหลีกเลี่ยงกับดักคำสั่งที่เตรียมไว้ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การรวมการเชื่อมต่อ: PgBouncer” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. pg_stat_statements: คำสั่งค้นหายอดนิยม
  2. pgBadger สำหรับวิเคราะห์บันทึก
  3. การรวมการเชื่อมต่อ: PgBouncer
  4. การวางแผนความจุและการตรวจสอบข้อมูลบวม
← กลับไปที่ SQL Academy