Đĩa đầy / cơ sở dữ liệu phình không giới hạn
Triệu chứng
Phần tiêu đề “Triệu chứng”Box sắp hết dung lượng đĩa, và tệp cơ sở dữ liệu quan sát phình to bất thường so với lượng dữ liệu mà nó cần lưu — ví dụ hàng chục GB trên đĩa trong khi chỉ thực sự giữ lại khoảng ~1 GB dự đoán. Việc xóa các dòng cũ (hoặc rút ngắn thời gian lưu giữ) không làm tệp nhỏ lại.
Nguyên nhân: các dòng cũ được xóa theo lịch, nhưng trên một cơ sở dữ liệu được tạo mà không bật incremental auto-vacuum thì các trang đã giải phóng vẫn được giữ trong một free-list nội bộ và không bao giờ được trả lại cho hệ điều hành. Tệp giữ nguyên ở mức đỉnh (high-water mark) mãi mãi.
Xác nhận
Phần tiêu đề “Xác nhận”Kiểm tra kích thước tệp cơ sở dữ liệu bên trong container backend so với kích thước dữ liệu thực kỳ vọng:
docker compose -f docker-compose.release.yml exec backend \ sh -c 'ls -lh /data/aiboard.db'Nếu tệp lớn hơn nhiều lần so với khối lượng dữ liệu mà cửa sổ lưu giữ của bạn cần chứa (một tệp nhiều GB cho vài ngày dự đoán), bạn đang bị phình do free-list. Một đợt ghi với tốc độ cao đột biến có thể làm tệp phình vượt xa kích thước ở trạng thái ổn định.
Khắc phục
Phần tiêu đề “Khắc phục”Các bản phát hành hiện tại tự động thu hồi dung lượng sau mỗi lượt quét lưu giữ, nên một box khỏe mạnh sẽ tự điều chỉnh. Một cơ sở dữ liệu đã phình trước khi hành vi này được áp dụng cần một lần thu hồi thủ công.
-
Dừng backend để cơ sở dữ liệu không bị ghi trong quá trình thu hồi:
Terminal window docker compose -f docker-compose.release.yml stop backend -
Chạy thu hồi một lần trên tệp cơ sở dữ liệu. Lệnh này chuyển tệp sang incremental auto-vacuum và nén lại, trả các trang free-list về cho hệ điều hành:
Terminal window docker compose -f docker-compose.release.yml run --rm --entrypoint sh backend -c \'sqlite3 /data/aiboard.db "PRAGMA auto_vacuum=INCREMENTAL; VACUUM;"' -
Kiểm tra tệp đã nhỏ lại và dữ liệu còn nguyên vẹn:
Terminal window docker compose -f docker-compose.release.yml run --rm --entrypoint sh backend -c \'ls -lh /data/aiboard.db; sqlite3 /data/aiboard.db "PRAGMA integrity_check;"'# expect a much smaller file and: ok -
Khởi động lại backend:
Terminal window docker compose -f docker-compose.release.yml start backend
Phòng ngừa
Phần tiêu đề “Phòng ngừa”- Giữ thời gian lưu giữ có giới hạn. Cửa sổ lưu giữ (
InferenceObservability:RetentionDays, mặc định 3 ngày) xóa các dòng dự đoán cũ theo lịch; bước thu hồi sau khi xóa trả các trang đã giải phóng về đĩa để tệp luôn gọn. - Giới hạn số dòng như một lớp bảo vệ chống đột biến.
InferenceObservability:MaxRows(mặc định 5.000.000) cắt bớt còn N dòng mới nhất ngay cả trong cửa sổ thời gian, nên một đợt tăng vọt tốc độ cao đột ngột không thể làm đầy đĩa trước khi lượt quét theo thời gian chạy. Hãy hạ giá trị này nếu box của bạn có đĩa hạn chế. - Cẩn trọng khi kiểm thử thông lượng/stub. Các đợt ghi tốc độ cao đột biến (ví dụ kiểm thử thông lượng đường ống cảm biến) chính là thứ làm phình tệp ngay từ đầu. Tránh để một bài kiểm thử tốc độ cao chạy liên tục trên bộ lưu trữ bền vững của một box production.
Liên quan
Phần tiêu đề “Liên quan”- Khả năng quan sát (Observability) & Cảnh báo — những gì cơ sở dữ liệu quan sát lưu trữ.