ทำไมคุณไม่ควรเปิดการเชื่อมต่อ DB ค้างไว้ระหว่างการเรียกใช้งาน LLM

ความหน่วง (Latency) ของ AI ไม่ได้มีแค่เวลาที่โมเดลใช้ในการประมวลผลเท่านั้น แต่ยังรวมถึงวิธีการที่คุณจัดการกับการเชื่อมต่อฐานข้อมูลด้วย

การถือครองการเชื่อมต่อ DB ไว้ในขณะที่รอ LLM หรือ Embedding API สามารถทำให้ Connection Pool ของคุณหมดลงได้ การเรียกใช้งานภายนอกที่ล่าช้าจะทำให้ Session เปิดค้างไว้นานเกินความจำเป็น

ผมได้เข้าไปดูใน repo ของ Honcho เพื่อดูวิธีแก้ไขของพวกเขา พวกเขาเปลี่ยนจากการใช้ session เดียวที่เปิดค้างไว้นาน มาเป็นการใช้ session สั้นๆ ที่เจาะจงตามแต่ละงานแทน

รูปแบบเดิม

  • เปิด DB session
  • อ่านการตั้งค่าผู้ใช้
  • เรียกใช้งาน LLM (ช้า)
  • เรียกใช้งาน Embedding API (ช้า)
  • บันทึกผลลัพธ์
  • ปิด DB session

รูปแบบใหม่

  • เปิด DB session เพื่อตรวจสอบความพร้อม (pre-flight checks)
  • อ่านค่าที่จำเป็นลงในตัวแปร
  • ปิด DB session
  • เรียกใช้งาน LLM และ Embedding APIs (โดยไม่ถือครองการเชื่อมต่อ DB)
  • เปิด DB session ใหม่แบบสั้นๆ เพื่อบันทึกผลลัพธ์
  • ปิด DB session

เป้าหมายไม่ใช่การเลิกใช้ฐานข้อมูล แต่คือการแยกความสอดคล้องของธุรกรรม (Transaction Consistency) ออกจากการรอคอยเครือข่าย

5 ขั้นตอนในการจัดการการเชื่อมต่อของคุณ

  1. กำหนดขอบเขตความสอดคล้อง (Consistency boundaries) ของคุณ
  2. ดึงค่าที่จำเป็นทั้งหมดลงในตัวแปร ก่อนที่จะมีการเรียกใช้งาน API ภายนอกใดๆ
  3. ปิดขอบเขตการทำงานของฐานข้อมูล (Database scope)
  4. ดำเนินการงานภายนอกที่ล่าช้า
  5. เปิดขอบเขตการเขียน (Write scope) ใหม่แบบสั้นๆ เพื่อบันทึกผลลัพธ์สุดท้าย

หมายเหตุ: หากคุณใช้ pgvector การค้นหาจะทำงานภายในฐานข้อมูล ดังนั้นคุณต้องเปิด session ค้างไว้ในระหว่างการทำงานนั้น

การลดระยะเวลาของ session ช่วยเพิ่มความสามารถในการขยายระบบ (Scaling) แต่ต้องระวังข้อผิดพลาดประเภท detached-object ใน ORM ของคุณ และตรวจสอบให้แน่ใจว่าข้อมูลยังคงมีความสอดคล้องกันผ่าน transaction snapshots

Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg

Optional learning community: https://t.me/GyaanSetuAi