- #postgresql
- #performance
- #sql
- #spring-boot
- #java
Giải quyết deadlock PostgreSQL: 5 nguyên nhân và cách phòng tránhPostgreSQL deadlocks: 5 common causes and how to prevent them
Deadlock khiến query PostgreSQL treo. Bài viết liệt kê nguyên nhân thường gặp và đưa ra giải pháp thực tiễn cho Java Spring Boot.Deadlocks stall PostgreSQL queries. This post lists common causes and gives practical fixes for Java Spring Boot apps.
Mục lụcContents· 11
- Khi nào deadlock xuất hiện?
- 5 lỗi thường gây deadlock trong PostgreSQL
- Cách phát hiện nhanh
- Giải pháp thực tiễn cho Spring Boot 3 + Java 21
- 1. Đảm bảo thứ tự truy cập thống nhất
- 2. Giảm phạm vi transaction
- 3. Retry khi deadlock xảy ra
- 4. Tối ưu chỉ mục
- 5. Tránh mức cô lập SERIALIZABLE nếu không cần
- Quy tắc vàng
- Tóm tắt
Khi nào deadlock xuất hiện?#
Bạn đang review một ticket: "Đơn hàng bị mất cập nhật khi đồng thời người dùng A và B chỉnh sửa cùng một đơn". Trong log PostgreSQL có dòng deadlock detected. Đó là dấu hiệu classic: hai transaction đang giữ lock trên các row khác nhau và chờ nhau giải phóng, tạo vòng vô hạn.
Deadlock: Khi hai (hoặc nhiều) transaction mỗi bên giữ một lock và chờ lock của bên còn lại, PostgreSQL sẽ phát hiện và abort một trong số chúng.
5 lỗi thường gây deadlock trong PostgreSQL#
- Thứ tự lock không thống nhất – Transaction 1 cập nhật bảng
ordersrồiorder_items; Transaction 2 ngược lại. Khi chúng chạy đồng thời, lock trênordersvàorder_itemsbị chặn nhau.
