ฉันใช้ OpsWorks stack ด้วย:

  • อินสแตนซ์ c3.2xlarge 10 รายการที่ทำงานใน 4 โซนความพร้อมใช้งาน
  • CPU ไม่เคยเกิน 5% ในแต่ละอินสแตนซ์
  • แต่ละอินสแตนซ์กำลังเชื่อมต่อ (ผ่านเลเยอร์ memcached) กับอินสแตนซ์ RDS db.r3.8xlarge (32 vCPU, 244 GiB RAM)
  • CPU ของ DB ยังคงอยู่ระหว่าง 15-20 เปอร์เซ็นต์
  • อินสแตนซ์ EC2 แต่ละรายการถูกตั้งค่าเป็น 250 การเชื่อมต่อด้วย RDS (การเชื่อมต่อทั้งหมด 2,500 รายการ)
  • หน่วยความจำของอินสแตนซ์แต่ละรายการค่อยๆ เพิ่มขึ้น แต่ฉันคิดว่านี่เป็นปัญหาที่แยกจากกัน
  • load_1, load_5, load_10ตัวชี้วัดที่มีทั้งหมดสูงจริงๆ 0.9-1.0
  • ผู้ใช้ที่ใช้งานพร้อมกันที่กำลังเชื่อมต่ออยู่ (ตามหน้าต่าง 3 นาที) กำลังติดขัดระหว่างการเชื่อมต่อระหว่าง 2500-3000

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

มีการตั้งค่าบางอย่างใน ELB ที่จำกัดการเชื่อมต่อหรือไม่ เวลาแฝงสำหรับการโทรนั้นสูงมาก ฉันแค่พยายามหาบางอย่างที่อาจควบคุมสิ่งนี้ได้ เนื่องจากฮาร์ดแวร์ทั้งหมดดูเหมือนจะทำงานได้ดี

answer

ปรากฏว่าหลังจากขุดค้นมามากมาย มีการเรียกใช้แบบสอบถามเดียวกับฐานข้อมูลที่เกี่ยวข้องorder by rand()และทำงานอยู่บนเกือบ 1.3 ล้านระเบียนในตาราง หลังจากแก้ไขแบบสอบถามนี้ประสิทธิภาพลดลงเป็นปกติ