Đĩ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”Hộp cạn đĩa, và tệp cơ sở dữ liệu quan sát lớn khổng lồ so với lượng dữ liệu nó đáng ra phải chứa — ví dụ hàng chục GB trên đĩa trong khi chỉ ~1 GB dự đoán thực sự được giữ lại. Xóa hàng cũ (hoặc rút ngắn thời gian giữ) không làm tệp co lại.
Nguyên nhân: các hàng cũ được xóa theo lịch, nhưng trên một cơ sở dữ liệu được tạo không có auto-vacuum gia tăng, các trang đã giải phóng đượ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 duy trì ở mức đỉnh-cao-nước 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 trực tiếp 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 gấp nhiều lần khối lượng dữ liệu mà cửa sổ giữ lại của bạn đáng ra phải chứa (một tệp nhiều GB cho vài ngày dự đoán), bạn bị phình free-list. Một đợt ghi tốc độ cao duy nhất có thể làm tệp phình vượt xa kích thước trạng thái-ổn-định.
Các bản phát hành hiện tại tự thu hồi không gian sau mỗi đợt quét giữ lại, nên một hộp khỏe mạnh tự sửa. Một cơ sở dữ liệu đã phình trước khi hành vi đó có mặt cần một lần thu hồi một-lần.
-
Dừng backend để cơ sở dữ liệu không bị ghi trong lúc thu hồi:
Terminal window docker compose -f docker-compose.release.yml stop backend -
Chạy lần thu hồi một-lần trên tệp cơ sở dữ liệu. Việc này chuyển tệp sang auto-vacuum gia tăng và nén nó lại, trả các trang free-list về OS:
Terminal window docker compose -f docker-compose.release.yml run --rm --entrypoint sh backend -c \'sqlite3 /data/aiboard.db "PRAGMA auto_vacuum=INCREMENTAL; VACUUM;"' -
Xác minh tệp đã co lại và dữ liệu 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;"'# kỳ vọng một tệp nhỏ hơn nhiều và: ok -
Khởi động backend lại:
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 có giới hạn. Cửa sổ giữ lại (
InferenceObservability:RetentionDays, mặc định 3 ngày) xóa các hàng dự đoán cũ theo lịch; việc thu hồi sau-xóa trả các trang đã giải phóng về đĩa để tệp giữ gọn nhẹ. - Giới hạn số hàng làm chốt chặn đợt bùng phát.
InferenceObservability:MaxRows(mặc định 5.000.000) cắt về N hàng mới nhất ngay cả trong cửa sổ thời gian, nên một đột biến tốc độ cao bất ngờ không thể làm đầy đĩa trước khi đợt quét theo thời gian chạy. Hạ nó xuống nếu hộp của bạn có đĩa hạn chế. - Cẩn thận với thử nghiệm thông lượng/stub. Các đợt ghi tốc độ cao (ví dụ kiểm tra thông lượng đường ống cảm biến) là cái làm phình tệp ngay từ đầu. Tránh để một thử nghiệm tốc độ cao chạy đối với lưu trữ bền vững trên một hộp sản xuất.
Liên quan
Phần tiêu đề “Liên quan”- Khả năng quan sát & Cảnh báo — cơ sở dữ liệu quan sát lưu trữ những gì.