การทำงานของฐานข้อมูลที่มีผู้ใช้งานพร้อมกันหลายคน (Concurrent Users) จำเป็นต้องมีกลไกในการควบคุมการเข้าถึงข้อมูลเพื่อป้องกันปัญหา เช่น ข้อมูลเสียหายหรือผลลัพธ์ไม่ถูกต้อง PostgreSQL มีฟีเจอร์ Concurrency Control และ Locking ที่ช่วยให้ระบบยังคงความถูกต้องแม้มีการทำงานพร้อมกัน
Concurrency Control คืออะไร?
Concurrency Control คือกลไกที่ช่วยจัดการการทำงานพร้อมกันหลาย ๆ Transaction เพื่อป้องกันปัญหา เช่น:
- Dirty Read → อ่านค่าที่ยังไม่ Commit
- Non-repeatable Read → อ่านค่าเดียวกันได้ผลลัพธ์ต่างกัน
- Phantom Read → ได้แถวข้อมูลใหม่ที่ไม่เคยมีมาก่อนระหว่างการ Query
Locking ใน PostgreSQL
PostgreSQL ใช้ Lock หลายระดับในการควบคุมการเข้าถึงข้อมูล เช่น Row Lock และ Table Lock
Row Lock
ใช้ Lock เฉพาะ Row ที่ถูกแก้ไข → ทำให้ผู้ใช้หลายคนสามารถแก้ไข Row อื่นได้พร้อมกัน
BEGIN; SELECT * FROM accounts WHERE id = 1 FOR UPDATE; UPDATE accounts SET balance = balance - 100 WHERE id = 1; COMMIT;
Table Lock
ใช้ Lock ทั้งตาราง → ป้องกันการแก้ไขโดยผู้อื่น แต่มีข้อเสียคือทำให้ Concurrency ลดลง
LOCK TABLE accounts IN EXCLUSIVE MODE;

Transaction Isolation Level
PostgreSQL รองรับ Isolation Level หลายแบบ เช่น:
- READ COMMITTED → ค่า Default
- REPEATABLE READ → ป้องกัน Non-repeatable Read
- SERIALIZABLE → ป้องกันปัญหาทุกแบบ (ช้าที่สุด)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Deadlock คืออะไร?
Deadlock เกิดขึ้นเมื่อ Transaction 2 ตัว Lock กันและรอกันเอง ทำให้ไม่มีใครทำงานต่อได้
ตัวอย่าง Deadlock
-- Transaction A BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- รอ Transaction B -- Transaction B BEGIN; UPDATE accounts SET balance = balance - 200 WHERE id = 2; -- รอ Transaction A
การจัดการ Deadlock
- ออกแบบ Transaction ให้สั้นที่สุด
- Lock Resource ในลำดับเดียวกัน
- ใช้ Timeout สำหรับ Lock
SET lock_timeout = '5s';
Best Practices
- ใช้ Row Lock แทน Table Lock ถ้าเป็นไปได้
- เลือก Isolation Level ให้เหมาะสมกับ Use Case
- ตรวจสอบ Deadlock Logs เป็นประจำ
- ออกแบบ Query ให้สั้น กระชับ
สรุป
การควบคุม Concurrency และ Locking เป็นสิ่งสำคัญในระบบฐานข้อมูลที่มีการใช้งานพร้อมกันจำนวนมาก การเลือกใช้ Row Lock, Table Lock และการจัดการ Deadlock อย่างเหมาะสม จะทำให้ระบบทำงานได้อย่างมีประสิทธิภาพและเสถียร
SEO Keywords
PostgreSQL Concurrency Control,Row Lock PostgreSQL,Table Lock PostgreSQL,Postgres Deadlock Handling,Transaction Isolation Level,Database Locking,การจัดการ Concurrency PostgreSQL