Tình huống: query chậm dần khi bảng lên 30 triệu dòng Trung cấp
Thời gian đọc ước tính: 1 phút
Một endpoint không ai đụng tới suốt 18 tháng, chỉ có bảng lớn dần. Bạn đi từ triệu chứng tới query, từ query tới plan, rồi tới index. Mọi plan trong game đều chạy thật trên PostgreSQL 17 với bảng 30 triệu dòng, chỉ rút gọn cho dễ đọc.
- 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 ở mỗi bước.
- Trước khi chọn, nhìn kỹ
rows,Rows Removed by FiltervàBufferstrong plan.
API "Đơn của tôi": 20 ms lúc ra mắt, 4 giây sau 18 tháng
Bạn là backend dev on-call. Bảng orders đã lên 30 triệu dòng và endpoint "Đơn của tôi" chậm dần. Mỗi lựa chọn hiển thị ngay hậu quả trên các chỉ số.
Bước 1/4 · Cái gì đang chậm?
Lúc ra mắt, màn hình "Đơn của tôi" trả về trong 20 ms. 18 tháng sau, bảng orders có 30 triệu dòng và màn hình này mất khoảng 4 giây. CPU database luôn cao, nhiều endpoint khác cũng chậm theo.
Bạn chưa biết chính xác câu SQL nào là thủ phạm.
- orders
- 30 triệu dòng, 2.7 GB
- GET /me/orders
- ~4 giây
- DB
- 4 vCPU, CPU luôn cao
Bạn làm gì?
Chơi xong, đọc Đọc EXPLAIN và EXPLAIN ANALYZE để nắm quy trình bốn bước đọc một plan lạ.