ขีด จำกัด การเชื่อมต่อ AWS RDS


45

เซิร์ฟเวอร์ RDS มีจำนวนการเชื่อมต่อสูงสุด 40 รายการดังต่อไปนี้
ฉันใช้ Magento 1.9 และในบางจุดฉันถึงจำนวนสูงสุดแล้วเว็บไซต์ไม่สามารถให้บริการได้
คุณมีวิธีที่แนะนำในการแก้ไขปัญหานี้หรือไม่?

จากความเข้าใจของฉันถ้าฉันมีเว็บเซิร์ฟเวอร์ 2 เครื่องเชื่อมต่อกับเซิร์ฟเวอร์ RDS .. ดังนั้นฉันควรมี 2 RDS เชื่อมต่อไม่มาก


2
"จากความเข้าใจของฉันถ้าฉันมีการเชื่อมต่อเว็บเซิร์ฟเวอร์ 2 แห่งกับเซิร์ฟเวอร์ RDS .. จากนั้นฉันควรจะมีการเชื่อมต่อ 2 RDS ไม่มาก" นั่นเป็นความเข้าใจที่ไม่ถูกต้อง โดยทั่วไปแล้วจะมีการเชื่อมต่อ 1 กระบวนการหรือกระบวนการของเธรด
Michael - sqlbot

ขอบคุณ @ Michael-sqlbot .. ใช่ฉันเข้าใจผิด แต่ฉันต้องการให้แน่ใจ แต่ทำไมเมื่อเรามีการเชื่อมต่อ 40 รายการถึง RDS จะปฏิเสธการเชื่อมต่ออื่น ๆ และไม่สามารถเข้าถึงได้จนกว่าการเชื่อมต่ออื่น ๆ จะปิด?
Alaa Badran

นั่นคือจากการออกแบบจากmax_connectionsพารามิเตอร์ สำหรับเวิร์กโหลดส่วนใหญ่คุณควรเพิ่มได้อย่างปลอดภัยเพราะเป็นค่าเริ่มต้นที่ปลอดภัย แต่ ... คุณจะต้องตรวจสอบสาเหตุของเดือยเหล่านั้น
Michael - sqlbot

คำตอบ:


65

ตัวแปร จำกัด ของ AWS RDS max_connections จะขึ้นอยู่กับประเภทอินสแตนซ์ดังนั้นคุณสามารถอัพเกรด RDS ของคุณหรือสร้างแบบจำลองเพิ่มเติมได้

ประเภท RDS ที่มีขีด จำกัด max_connections:

  • t2.micro 66
  • t2.small 150
  • m3.medium 296
  • t2.medium 312
  • m3. ใหญ่ 609
  • t2. ใหญ่ 648
  • m4. large 648
  • m3.x ใหญ่ 1237
  • r3. large 1258
  • m4.x ใหญ่ 1320
  • m2.x ใหญ่ 1412
  • m3.2x ใหญ่ 2492
  • r3.x ใหญ่ 2540

อ้างอิงโดยmax_connections ที่ขนาดอินสแตนซ์ MySQL AWS RDSในปี 2015

อัปเดต 2017-07

การตั้งค่า RDS MySQL max_connections ปัจจุบันเป็นค่าเริ่มต้น{DBInstanceClassMemory/12582880}หากคุณใช้t2.microพร้อม RAM 512MB max_connections อาจเป็น (512 * 1024 * 1024) / 12582880 ~ = 40 และอื่น ๆ


แต่ละเว็บเซิร์ฟเวอร์สามารถมีการเชื่อมต่อกับ RDS ได้มากมายซึ่งขึ้นอยู่กับคำขอ SQL ของคุณจากเว็บเซิร์ฟเวอร์


ฉันรู้สิ่งนี้ แต่เมื่อถึง 40 การเชื่อมต่อเซิร์ฟเวอร์ไม่ตอบสนอง ตรวจสอบสิ่งนี้: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/ ......
Alaa Badran

1
ฉันจะตรวจสอบกลุ่มพารามิเตอร์ RDS, max_connections นั้นเป็นค่าเริ่มต้น{DBInstanceClassMemory/12582880}ดังนั้นเมื่อคุณใช้ t2.micro พร้อม RAM 512MB, max_connections (512*1024*1024)/12582880 = 40.69อาจอธิบายการเชื่อมต่อสูงสุด 40 รายการได้
Nick Tsai

2
คุณสามารถตรวจสอบค่าโดยสอบถามว่า RDS MySQL show variables like 'max_connections';ด้วยคำสั่ง
Nick Tsai

1
คุณสามารถสร้างใหม่parameter groupและเปลี่ยนค่าmax_connections เป็นค่าที่คุณต้องการ นี่จะเป็นขีด จำกัด การเชื่อมต่อใหม่สำหรับอินสแตนซ์ RDS ของคุณ
backslashN

1
คำตอบนี้มีขึ้นในปี 2019 คุณสามารถตรวจสอบตัวเองได้เสมอโดยการทำSHOW VARIABLES WHERE Variable_name='max_connections'
เดฟสไตน์

30

คุณสามารถเปลี่ยนmax_connectionsค่าได้โดยอัปเดตนโยบายพารามิเตอร์เริ่มต้นหรือสร้างนโยบายใหม่ - ฉันขอแนะนำให้ใช้นโยบายหลัง

  • ไปที่ RDS
  • กลุ่มพารามิเตอร์
  • สร้างกลุ่มพารามิเตอร์ใหม่ (AWS จะปล่อยให้ทุกอย่างเป็นค่าเริ่มต้น)
  • ค้นหาmax_connectionsค่า
  • เปลี่ยนค่าที่จะใช้
  • ไปที่อินสแตนซ์ RDS และแก้ไข
  • เลือกกลุ่มพารามิเตอร์ใหม่ที่สร้างและรีสตาร์ทอินสแตนซ์หรือปล่อยให้ AWS รีบูตระหว่างการบำรุงรักษาหน้าต่างถัดไป

หวังว่านี่จะช่วยได้!


2
<3 นี่ควรเป็นคำตอบที่ได้รับการยอมรับ
bbozo

2
แม้ว่าฉันจะตั้งค่า max_connections เป็น 1,000 แต่ rds ยังอนุญาตให้มีการเชื่อมต่อสูงสุด 100 รายการในอินสแตนซ์ขนาดเล็กเท่านั้น
Miguel Mota

1

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

ฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับ Magento แต่เมื่อเร็ว ๆ นี้ฉันมีปัญหาคล้ายกันในโครงการที่ฉันกำลังทำอยู่ฉันสังเกตเห็นว่าการเริ่มต้นใช้งานเฟรมเวิร์กที่ฉันใช้สร้างการเชื่อมต่อกับการโทรไปยังฐานข้อมูลทุกครั้ง

ในขณะที่อาจไม่ทำให้เกิดปัญหาใด ๆ ในขณะที่คุณมีผู้เยี่ยมชมมากขึ้นหรืองานที่ต้องใช้ฐานข้อมูลมากและสามารถทำงานได้หลายการเชื่อมต่อวิธีที่ดีที่สุดในการป้องกันเซิร์ฟเวอร์ล้มเหลวด้วยข้อผิดพลาด "TOO MANY CONNECTIONS" พูลการเชื่อมต่อ

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

เพียงจำไว้ว่าพูลการเชื่อมต่อควรปลอดภัยเธรดในสถานการณ์หลายเธรด


1

เข้าสู่ระบบอินสแตนซ์ RDS ของคุณ (โดยใช้ไคลเอนต์ MySQL) และเรียกใช้แบบสอบถามต่อไปนี้:

SHOW VARIABLES LIKE 'max_connections';

1

ข้อมูลจริงสำหรับ Postgresql t3-instance (กลุ่มพารามิเตอร์ default.postgres10):

  • db.t3.micro - 112 max_connections
  • db.t3.small - 225 max_connections
  • db.t3.medium - 450 max_connections
  • db.t3.large - 901 max_connections
  • db.t3.xlarge - 1802 max_connections
  • db.t3.2xlarge - 3604 max_connections

มันคล้ายกับ default.postgres9 และ default.postgres11


0

นั่นไม่ใช่การเชื่อมต่อสูงสุด 40 นั่นคือ 40 RDS อินสแตนซ์สูงสุด คุณมักจะใช้เพียง 1 อินสแตนซ์ตามคำอธิบายของคุณ

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


ขอบคุณ @ Jason ฉันมีข้อมูลต่อไปนี้: เมื่อถึง 40 การเชื่อมต่อ RDS ไม่ตอบสนองจนกว่าการเชื่อมต่ออื่น ๆ จะปิด เรามีอินสแตนซ์ r3.x large RDS นี่คือภาพหน้าจอนี้: drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/ เรามี CPU ที่ไม่ได้ใช้งานและมีการเชื่อมต่อจำนวนมาก
Alaa Badran

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