Tình huống: migration khoá bảng orders Trung cấp
Thời gian đọc ước tính: 1 phút
Migration chỉ một dòng ADD COLUMN, staging chạy 4 ms, vậy mà production sập API ngay sau deploy. Bạn lần lượt chẩn đoán, gỡ hàng đợi lock, chạy lại cho an toàn và review PR migration tiếp theo.
- Hành vi lock trong game đã được dựng lại trên PostgreSQL 17: SELECT bị chặn bởi migration đang chờ, không phải bởi transaction đang giữ lock.
- Chọn sai thì đọc giải thích rồi Chọn lại; điểm chỉ tính lựa chọn đầu tiên.
Deploy 14:05: một câu ALTER TABLE làm sập API
Bạn là backend dev on-call. Bảng orders 80 triệu row, 6 pod API, mỗi pod pool 40 connection. Mỗi lựa chọn hiển thị ngay hậu quả trên các chỉ số.
API lỗi 5xx0 %
p99 API120 ms
Query chờ lock trên orders0
Connection pool bận25 %
Bước 1/4 · API treo ngay sau deploy
14:05 pipeline deploy bản mới. Container chạy npm run migrate && node server.js, migration chỉ có một dòng. Hai phút sau, mọi endpoint đọc orders timeout. CPU database 8%, không có query nặng nào đang chạy.
- pool
- 240/240 connection bận
- lỗi app
- timeout exceeded when trying to connect
- CPU DB
- 8%
-- migrations/20261024_add_discount_code.sql ALTER TABLE orders ADD COLUMN discount_code text; -- staging: 4 ms
Bạn làm gì?
Muốn hiểu vì sao một DDL chưa chạy được lại chặn cả SELECT, đọc Lock queue.