SNR#3832 대용량 정렬 처리의 메모리·디스크 사용 안정성 개선

버전: 4.0.2609.0

정렬(sort)이 필요한 쿼리 처리 전반의 메모리·디스크 사용 안정성을 개선했습니다.

  • 메모리 사용량 안정화: 정렬 중 입력 데이터를 모아 임시 파일로 내보내는 시점을 그동안 "쌓인 레코드 개수"만으로 판단했습니다. 크기가 매우 큰 레코드가 섞여 있으면 개수가 찰 때까지 메모리에 계속 남아 과도하게 점유할 수 있었습니다. 이제 "실제 사용 중인 메모리 용량"도 함께 검사해 두 조건 중 먼저 도달하는 시점에 내보내도록 개선했습니다. 기본 임계 용량은 50MB이며 araqne.logdb.sort_flush_capacity 시스템 프로퍼티(MB 단위)로 조정할 수 있습니다.
  • 오류 처리 개선: 정렬 중 내보내기·병합 단계에서 오류가 발생하면 임시 파일이 정리되지 않고 남거나, 데이터 일부가 누락된 채로 정렬이 정상 완료된 것처럼 처리될 수 있었습니다. 이제 오류 발생 시 관련 임시 파일을 정리하고, 내보내기 실패를 정렬 작업 전체의 오류로 정확히 전달합니다.
  • 임시 파일 관리 개선: 정렬 임시 파일을 정렬 작업마다 전용 폴더에 저장하도록 변경했습니다. 여러 정렬 작업의 임시 파일이 한 폴더에서 뒤섞이지 않으며, 재시작 시 정리 작업도 해당 폴더에서 정렬 작업이 만든 항목만 선별해 정리하므로 같은 위치의 다른 파일에는 영향을 주지 않습니다.
  • 메모리 해제 안정성 개선: 정렬이나 인덱스 자동 병합 중 일부 내보내기가 실패해도, 실패한 작업이 쥐고 있던 데이터가 메모리에서 항상 즉시 해제되도록 개선하여 실패가 누적되어 메모리 부족으로 번지는 위험을 줄였습니다.
  • 병합 단계 CPU 사용 효율화: 병합 작업이 동시 실행 한도에 도달했을 때 빈자리가 날 때까지 쉬지 않고 반복 확인하며 CPU를 소모하던 방식을 대기 방식으로 변경했습니다. 동시에 실행되는 병합 작업 수는 이전과 동일합니다.

[운영 안내] 정렬 임시 폴더 지정 설정 값의 의미가 변경되었습니다. 정렬 임시 파일 저장 위치를 직접 지정하는 araqne.sort.dir 설정을 사용하는 경우, 기존에는 지정한 경로 아래에 정렬 전용 하위 경로가 자동으로 추가됐지만 이제는 지정한 경로 자체를 정렬 임시 폴더로 사용합니다. 이 설정을 지정하지 않은 환경은 기본 위치가 이전과 동일해 영향이 없습니다. 이 설정을 사용 중이라면 값이 실제 저장 위치와 일치하는지 확인하고, 기존과 같은 위치를 유지하려면 이전에 자동으로 추가되던 하위 경로(araqne-logdb/sort)까지 포함한 전체 경로를 값으로 지정하세요.

정렬 결과 값과 처리 순서 자체는 이전과 동일하며, 쿼리 사용 방법에는 변화가 없습니다.