콘텐츠로 이동

디스크가 가득 참 / 데이터베이스가 무한정 증가함

대시보드의 스토리지 상태 카드에 경고가 표시되고, 데이터베이스 행이 박스가 보유해야 할 데이터에 비해 큽니다. 오래된 행을 삭제하거나 보존 기간을 줄여도 파일 크기는 줄어들지 않습니다.

원인: 오래된 행은 일정에 따라 삭제되지만, 이전 릴리스에서 생성된 데이터베이스는 해제된 페이지를 내부 free-list에 보관합니다. 이 페이지는 디스크로 반환되지 않으므로 파일은 가장 컸던 크기에 머무릅니다. 박스를 업데이트해도 이 상태는 바뀌지 않습니다. 현재 릴리스에서 생성된 데이터베이스는 각 보존 스윕 후 해제된 공간을 반환합니다.

압축 스크립트를 실행하고 측정 결과를 읽으세요. 스크립트는 무엇이든 변경하기 전에 결과를 보고합니다.

  1. 설치와 업데이트에 사용하는 릴리스 번들 디렉터리로 이동합니다.

  2. 다음을 실행합니다:

    Terminal window
    sudo ./compact-db.sh
  3. 보고 내용을 읽습니다: 데이터베이스 크기, free-list(회수할 수 있는 공간), 디스크의 여유 공간.

  4. free-list가 크면 해결 단계로 진행합니다. 여기서 멈추려면 프롬프트에 N으로 답하세요. 아직 아무것도 변경되지 않았습니다.

회수할 공간이 100 MB 미만이고 데이터베이스가 이미 스스로 공간을 반환하고 있다면, 스크립트가 그렇게 알리고 종료합니다.

  1. 여유 공간을 확인합니다. 압축은 데이터베이스를 교체하기 전에 완전한 두 번째 사본을 쓰므로, 디스크에 최소한 데이터베이스 크기만큼의 여유 공간이 필요합니다. 스크립트가 이를 확인하고, 공간이 부족하면 시작을 거부합니다.

  2. 짧은 유지 관리 시간을 계획합니다. 스크립트가 전체 스택을 중지하므로 실행 중에는 추론이 멈춥니다. 큰 데이터베이스에서는 몇 분이 걸립니다.

  3. 릴리스 번들 디렉터리에서 스크립트를 실행하고 프롬프트에 y로 답합니다:

    Terminal window
    sudo ./compact-db.sh

    그러면 스크립트는:

    • 설치 디렉터리(기본값 /opt/aiboard)의 backups 폴더에 데이터베이스 스냅샷을 만듭니다;
    • 스택을 중지합니다;
    • 데이터베이스를 압축하고, 이후 해제된 공간을 반환하도록 전환합니다;
    • 스택을 다시 시작합니다.

    압축 중에는 중단하지 마세요.

  4. 결과를 확인합니다. 스크립트가 이전·이후 크기와 회수된 공간을 출력합니다. 대시보드의 데이터베이스 행에 새 크기가 표시됩니다.

백엔드는 일정에 따라 오래된 데이터를 삭제합니다. 기본값은 다음과 같습니다:

데이터보존 기간설정
추론 기록(지연 시간, 처리량, 파이프라인 이벤트)1일InferenceObservability:RetentionDays
요청 및 응답 페이로드6시간InferenceObservability:PayloadRetentionHours
추론 기록 행 상한최신 5,000,000행InferenceObservability:MaxRows
로그 페이지 항목최신 10,000줄LoggingService:Retention:MaxEntries
  • 보존 기간을 제한된 상태로 유지하세요. 보존 기간이 길수록 데이터베이스가 커집니다.
  • 행 상한을 평상시 데이터량보다 높게 유지하세요. 행 상한은 시간 윈도우 안에서도 최신 행만 남기므로 버스트가 디스크를 채우지 못합니다. 평상시 하루 데이터량보다 낮으면 시간 윈도우가 짧아집니다.
  • 처리량 테스트에 주의하세요. 고속 쓰기 버스트가 파일을 부풀리는 원인입니다. 프로덕션 박스에서 고속 테스트를 계속 실행해 두지 마세요.
  • 오래된 백업을 확인하세요. 업데이트할 때마다 최근 데이터베이스 백업 몇 개가 보관됩니다. 환경 변수의 AIBOARD_BACKUP_KEEP을 참조하세요.