วิธีคำนวณ max_connections สำหรับ PostgreSQL และ default_pool_size สำหรับ pgbouncer


17

มีกฎหรือสิ่งที่ฉันสามารถใช้ในการคำนวณตัวเลขที่ดีสำหรับmax_connections, default_pool_sizeและmax_client_conn?

ค่าเริ่มต้นเป็นเลขคี่ PostgreSQL มีค่าเริ่มต้นเป็น max_connections = 100 ในขณะที่ pgbouncer มีค่าเริ่มต้นเป็น default_pool_size = 20 ไม่ควร default_pool_size สูงกว่า max_connections เสมอหรือ มิฉะนั้นประเด็นคืออะไร? ฉันคิดว่า pgbouncer ตั้งใจให้เราจัดการการเชื่อมต่อได้มากขึ้นโดยลดค่าใช้จ่ายลง (โดยใช้การเชื่อมต่อของ PostgreSQL อีกครั้ง) ฉันสับสน

ฉันกำลังมองหาคำแนะนำคล้ายกับที่พบในวิกิของ PostgreSQLเช่น "พารามิเตอร์นี้ควรเป็น ~ 50% ของหน่วยความจำของคุณ"

ฉันจำได้ว่ามีสเปรดชีตสำหรับ MySQL ที่จะให้คุณคำนวณพารามิเตอร์ประเภทนี้ มันยอดเยี่ยมมากที่มีบางอย่างเช่น PostgreSQL / pgbouncer

คำตอบ:


12

ก่อนอื่นโปรดอ่านคำถามเกี่ยวกับการวางแผนกำลังการผลิตของเรา
คำแนะนำเฉพาะที่คุณขอคือคำแนะนำในการวางแผนกำลังการผลิตและคุณจะต้องทำงานด้วยตัวคุณเองสำหรับสภาพแวดล้อมเฉพาะของคุณ

ประการที่สองคุณกำลังดูผิด
จำนวนหน่วยความจำ (หรือทรัพยากรอื่น ๆ ) ที่คุณไม่ได้กำหนดจำนวนการเชื่อมต่อที่คุณกำหนดจำนวนการเชื่อมต่อที่คุณต้องการกำหนดวิธีเซิร์ฟเวอร์ที่คุณต้องซื้อ
ข้อกำหนดเกี่ยวกับทรัพยากรต่อการเชื่อมต่อนั้นมีอยู่ในคู่มืออย่างละเอียดรวมถึงที่กล่าวถึงใน Wiki ที่คุณเชื่อมโยงด้วย กำหนดสิ่งที่สภาพแวดล้อมของคุณต้องการ (หรือคาดเดาอย่างมีการศึกษา) และตรวจสอบให้แน่ใจว่าฮาร์ดแวร์ที่คุณกำลังจะทำงานสามารถจัดการกับสิ่งที่คุณกำลังจะทำ


โดยเฉพาะเรื่องข้อ จำกัด การเชื่อมต่อและขนาดพูลคุณควรมีการเชื่อมต่อ "เพียงพอ" เพื่อตอบสนองความต้องการของแอปพลิเคชันของคุณไม่ว่าจะบนเซิร์ฟเวอร์เดียวหรือผ่านพูล / คนโกหก

"เพียงพอ" เป็นหมายเลขที่สัมพันธ์กัน: แอปพลิเคชันที่สร้าง (และนำมาใช้ซ้ำอย่างต่อเนื่อง) หนึ่งการเชื่อมต่อต้องการเพียงหนึ่งการเชื่อมต่อ แอปพลิเคชันที่สร้างการเชื่อมต่อสำหรับผู้ใช้ปลายทางแต่ละรายที่เข้าสู่ระบบจำเป็นต้องใช้การเชื่อมต่อฐานข้อมูลมากเท่าที่มีผู้ใช้

ค่าเริ่มต้นสำหรับทั้ง Postgres และpgbouncerเหมาะสมเป็นค่าเริ่มต้น :

  • การเชื่อมต่อฐานข้อมูล 100 ครั้งเป็นเรื่องปกติสำหรับบุคคลทั่วไปที่ขว้าง Postgres เข้าสู่สภาพแวดล้อม
    นักพัฒนาอาจไม่ต้องการมากกว่า 10 คนอื่นจะรู้พอที่จะเพิ่มจำนวน

  • 20 การเชื่อมต่อจากpgbouncerฐานข้อมูลต่อพูลหมายความว่าคุณสามารถรับ 4 พูลที่ชี้ไปที่เซิร์ฟเวอร์หนึ่งเครื่องและไม่เกินขีด จำกัด การเชื่อมต่อ Postgres เริ่มต้น
    มีความเป็นไปได้ที่จะมีแหล่งข้อมูลพูลหลายแห่งpgbouncerชี้ไปที่ฐานข้อมูลส่วนหลังเดียวและคุณต้องการเชื่อมต่อที่มีอยู่บางส่วนบนเซิร์ฟเวอร์ส่วนหลังของคุณ

หากค่าดีฟอลต์ไม่เหมาะสมกับสภาพแวดล้อมของคุณคุณคาดว่าจะเปลี่ยนค่าเหล่านั้น

โปรดจำไว้ว่าการเชื่อมต่อที่มีพูลนั้นไม่ได้หมายความว่า "เสมอการเชื่อมต่อฐานข้อมูลทุกครั้งที่มี"
จุดpgbouncerที่คุณจดบันทึกไว้คือการใช้การเชื่อมต่อซ้ำ ประสิทธิภาพที่เพิ่มขึ้นที่นี่ไม่ต้องการให้คุณเชื่อมต่อทุกการเชื่อมต่อที่มีอยู่เพียงว่าคุณไม่ได้ยกเลิกการเชื่อมต่อเชื่อมต่อ SSL ต่อใหม่รับรองความถูกต้องอีกครั้งกับฐานข้อมูลและเรียกใช้แบบสอบถามการตั้งค่าการเชื่อมต่อใหม่ทุกครั้ง


8
ฉันไม่เห็นจุดซื้อฮาร์ดแวร์เพิ่มเติมก่อนกำหนดสิ่งต่าง ๆ อย่างเหมาะสม "ใครจะรู้พอที่จะเพิ่มจำนวน" ฉันเรียนรู้ที่จะรู้ได้ที่ไหนดี ฉันไม่พบเนื้อหาเกี่ยวกับการเชื่อมต่อมากนัก มันเป็นเพียงการลองผิดลองถูกไหม? สเปรดชีตที่ฉันพูดถึง MySQL เคยใช้งานได้อย่างมีเสน่ห์ การใช้การเชื่อมต่อมากกว่าที่ระบุโดยจะทำให้เซิร์ฟเวอร์มีหน่วยความจำไม่เพียงพอ ตอนนี้ฉันมี 4GB ฉันคาดว่าจะต้องเพิ่มค่าเริ่มต้น นอกจากนี้ 20x4 = 80 สิ่งที่อีก 20 สำหรับ
ChocoDeveloper

1
@ChocoDeveloper โปรดอ่านคำตอบของฉันอีกครั้งอย่างครบถ้วน (คุณกำลังขอบางสิ่งที่ฉันได้พูดไปแล้ว) และใช้เวลาสักครู่กับเอกสารที่ฉันเชื่อมโยง คุณยังคงมองย้อนกลับไปนี้ (ดูย่อหน้าแรกของคำตอบของฉัน) โปรดจำไว้ว่า Postgres ไม่ใช่ MySQL: คุณต้องลืมทุกสิ่งที่คุณคิดว่าคุณรู้จากประสบการณ์การจูน MySQL ของคุณ Postgres เป็นเหมือน Oracle ศึกษาคู่มือและดำเนินการตามคำแนะนำที่ให้ไว้
voretaq7

1

สังเกตคำจำกัดความของเอกสารประกอบdefault_pool_size

จำนวนการเชื่อมต่อเซิร์ฟเวอร์ที่อนุญาตต่อคู่ผู้ใช้ / ฐานข้อมูล

ดังนั้นหากการกำหนดค่าเริ่มต้นคือขนาดพูล 20 จากทั้งหมด 100 การเชื่อมต่อสิ่งนี้หมายความว่า 5 คู่ผู้ใช้ / ฐานข้อมูลที่แตกต่างกันจะต้องมีขนาดพูลสูงสุดสูงสุดแต่ละครั้งก่อนถึงขีด จำกัด โดยรวม ในทางกลับกันถ้าเช่นคุณกำลังใช้ pgbouncer เพื่อกำหนดเส้นทางไปยังฐานข้อมูลเดียวผ่านผู้ใช้คนเดียวขีด จำกัด การเชื่อมต่อที่มีประสิทธิภาพของคุณคือ 20 ไม่ใช่ 100 ดังนั้นคุณต้องตั้งค่าขนาดพูลสำหรับกรณีการใช้งานนั้น YMMV

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.