PlusMagi's Blog By Pitt Phunsanit Database เขียน PHP ให้ทำงานช้า

เขียน PHP ให้ทำงานช้า

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

การจงใจทำให้ระบบทำงานช้า (Simulating Latency) ไม่ใช่การเขียนโค้ดที่ผิดพลาด แต่เป็นเทคนิคที่จำเป็นอย่างยิ่งในการทดสอบความทนทาน (Resilience) และการจัดการข้อผิดพลาด (Error Handling) ของระบบโดยรวม เช่น การจำลองสถานการณ์ที่เครือข่ายล่ม, การทดสอบ Timeouts ของ API, หรือการตรวจสอบว่าฟังก์ชัน JavaScript/Client-side จะยังทำงานได้อย่างสมบูรณ์แม้ว่า Backend จะตอบสนองช้ากว่าปกติ

ทำไมต้องทำให้ PostgreSQL ทำงานช้า?

เมื่อเราพูดถึงการหน่วงเวลาในระดับฐานข้อมูล PostgreSQL เราไม่ได้ต้องการทำให้ระบบช้าจริง ๆ แต่ต้องการสร้าง ‘จุดหยุด’ ชั่วคราวเพื่อวัตถุประสงค์ในการทดสอบโดยเฉพาะ การหน่วงเวลาในระดับฐานข้อมูลสามารถใช้เพื่อ:

  • ทดสอบ Timeouts: ตรวจสอบว่าแอปพลิเคชัน Client-side จะจัดการกับ Connection Timeout อย่างไร
  • จำลองโหลด: จำลองสถานการณ์ที่เกิดการประมวลผลที่ซับซ้อนมาก ๆ หรือการรอทรัพยากรภายนอก
  • การทดสอบ Transaction Isolation: ในบางกรณี การหน่วงเวลาช่วยให้เราสามารถสังเกตการทำงานของ Transaction Isolation Levels ได้อย่างชัดเจน

การใช้ฟังก์ชัน pg_sleep() ใน PostgreSQL

PostgreSQL มีฟังก์ชันเฉพาะที่ออกแบบมาเพื่อวัตถุประสงค์นี้โดยเฉพาะ คือฟังก์ชัน pg_sleep() ซึ่งอนุญาตให้เราหยุดการทำงานของเซสชันฐานข้อมูลชั่วคราวได้ โดยรับค่าเป็นหน่วยวินาที (seconds) นี่คือวิธีการใช้งานที่ถูกต้องตามหลักไวยากรณ์ของ PostgreSQL:

SQL

SQL

SQL

-- ตัวอย่างการหน่วงเวลาการทำงานของ PostgreSQL เป็นเวลา 5 วินาที
SELECT pg_sleep(5);

เมื่อรันคำสั่งนี้ ระบบจะหยุดการประมวลผล SQL ทั้งหมดเป็นเวลา 5 วินาที ก่อนที่จะส่งผลลัพธ์กลับไปยัง Client การใช้ฟังก์ชันนี้ทำให้เราสามารถจำลองความล่าช้าที่เกิดขึ้นจากส่วนอื่นของสถาปัตยกรรมได้ เช่น การรอการตอบกลับจาก Microservice ภายนอก

การประยุกต์ใช้ในการทดสอบระบบที่ซับซ้อน

ในสถานการณ์จริง เรามักจะรวมการหน่วงเวลานี้เข้ากับ Transaction หรือ Stored Procedure เพื่อให้การทดสอบมีความสมจริงมากขึ้น ตัวอย่างเช่น หากเราต้องการทดสอบว่าระบบจะเกิด Deadlock หรือไม่เมื่อมีการรอทรัพยากร เราอาจใช้ pg_sleep() เพื่อให้ Transaction หนึ่งถือครอง Lock ไว้ก่อนที่ Transaction อื่นจะพยายามเข้าถึงข้อมูลนั้น

SQL

SQL

SQL

BEGIN;
-- Transaction A: เข้าถึงข้อมูลและหน่วงเวลา
SELECT * FROM products WHERE id = 1;
SELECT pg_sleep(3); -- หน่วง 3 วินาที
COMMIT;

การทำความเข้าใจและใช้เทคนิคการหน่วงเวลาอย่างถูกวิธีนี้ ทำให้เราสามารถออกแบบระบบที่มีความยืดหยุ่นสูง (Highly Resilient) และพร้อมรับมือกับความล่าช้าที่เกิดขึ้นได้จริงในสภาพแวดล้อมการทำงานจริง

บทสรุป

การเขียนโค้ดให้ทำงานเร็วเป็นเป้าหมายหลัก แต่การรู้วิธีทำให้มันทำงานช้าอย่างมีแบบแผนก็เป็นความรู้ระดับ Senior Architect ที่ขาดไม่ได้ การใช้ pg_sleep() ใน PostgreSQL เป็นเครื่องมือที่ทรงพลังในการจำลองความล่าช้า เพื่อให้มั่นใจว่าระบบทั้งหมด ตั้งแต่ Client ไปจนถึง Database สามารถจัดการกับภาวะความล่าช้าได้อย่างสง่างามและเสถียร

Exit mobile version