ทีมต้องออกแบบธุรกรรมที่อัปเดตหลายตารางให้คงความสอดคล้อง จึงถามว่า ในการพัฒนา Web Application ที่ใช้ ORM เพื่อดึงข้อมูลรายการสินค้าพร้อมชื่อผู้ขาย พบว่าระบบส่ง SQL Query จำนวนมากผิดปกติ ปัญหาดังกล่าวเรียกว่าอะไร และวิธีแก้ไขที่เหมาะสมที่สุดคืออะไร
กDeadlock Problem คือการที่ Query หลายรายการรอกันเป็น Circular และระบบหยุดทำงาน แก้ไขโดยกำหนด Timeout ให้กับทุก Query และใช้ Retry Mechanism อัตโนมัติ
ขN+1 Query Problem คือการที่ระบบส่ง Query 1 ครั้งเพื่อดึงรายการ แล้วส่งอีก N ครั้งสำหรับแต่ละรายการ แก้ไขโดยใช้ Eager Loading เพื่อดึงข้อมูลที่เกี่ยวข้องทั้งหมดใน Query เดียว
คQuery Injection Problem คือการที่ผู้ใช้แทรก SQL Code ผ่าน Input ทำให้ระบบส่ง Query ซ้ำ แก้ไขโดยใช้ Prepared Statement และ Input Validation ทุกครั้ง
งConnection Pool Overflow คือการที่ระบบเปิด Database Connection มากเกินกำหนด แก้ไขโดยลดจำนวน Concurrent User และปรับขนาด Connection Pool ให้เหมาะสม
เฉลยอธิบาย
N+1 Query Problem เกิดขึ้นเมื่อระบบส่ง Query 1 ครั้งเพื่อดึงรายการหลัก (เช่น รายการสินค้า N รายการ) แล้วส่ง Query เพิ่มอีก N ครั้งเพื่อดึงข้อมูลที่เกี่ยวข้องของแต่ละรายการ (เช่น ชื่อผู้ขาย) รวมเป็น N+1 Query ทำให้ประสิทธิภาพระบบต่ำ วิธีแก้ไขที่ถูกต้องคือใช้ Eager Loading หรือ JOIN Query เพื่อดึงข้อมูลทั้งหมดใน Query เดียว ซึ่งต่างจาก Deadlock, SQL Injection และ Connection Pool ที่เป็นปัญหาคนละประเภท