InfluxDB가 High Cardinality로 인해 Startup 시 OOM으로 Crash됩니다. 문제 Measurement를 어떻게 식별하고 삭제할 수 있을까요?

YOO JIN 60 평판 포인트
2026-09-24T08:07:45.25+00:00

InfluxDB가 startup 과정에서 OOM(Out of Memory) 이 발생하면서 crash되고 있습니다.

최근 애플리케이션 변경으로 dynamic tag가 추가된 이후 billions of unique series keys가 생성된 것으로 보이며, 이로 인해 series cardinality가 급격하게 증가한 상황입니다.

현재 InfluxDB가 정상적으로 startup되지 않기 때문에 어떤 measurement 또는 tag key가 높은 cardinality를 유발했는지 확인하기도 어려운 상태입니다.

다음과 같은 방법을 찾고 있습니다.

High-cardinality measurement/tag key를 식별하는 방법

InfluxDB가 OOM으로 정상 startup되지 않는 상황에서 문제가 되는 measurement를 안전하게 drop/remove하는 방법

해당 데이터를 삭제할 때 다른 measurement나 series에 영향을 주거나 data corruption이 발생하지 않도록 처리하는 방법

influx CLI, index-level operation 또는 offline recovery procedure를 사용해서 cleanup할 수 있는 방법

InfluxDB 인스턴스를 정상적으로 복구한 후 전체 DB를 rebuild하지 않고, cardinality explosion을 유발한 데이터만 안전하게 제거할 수 있는 방법이 있다면 조언 부탁드립니다.

비즈니스용 Windows | Windows 365 비즈니스
댓글 0개 설명 없음

질문 작성자가 수락한 답변
Jason Nguyen Tran 27,530 평판 포인트 독립 자문가
2026-09-24T08:58:54.58+00:00

안녕하세요,

설명해 주신 내용을 보면, 현재 증상은 high-entropy tag로 인해 cardinality explosion이 발생한 상황과 일치합니다. 즉, dynamic tag가 매우 많은 수의 series key를 생성하면서 startup 과정에서 Time Series Index(TSI) 가 사용 가능한 메모리를 초과한 것으로 보입니다. 우선 복구 작업을 진행하기 전에 data directory 전체를 백업해 두는 것을 권장합니다. 문제가 발생하더라도 원래 상태로 되돌릴 수 있는 안전한 rollback point를 확보하는 것이 중요합니다.

InfluxDB가 정상적으로 startup되지 않는 상황이라면, 우선 문제가 발생한 database와 retention policy를 offline 상태에서 조사하여 series 수가 비정상적으로 많은 measurement를 식별하는 데 집중하는 것이 좋습니다. 인스턴스가 metadata에 접근할 수 있을 정도로 안정화되면, measurement별 및 tag set별 series cardinality를 비교해 보면 문제를 일으킨 dynamic tag를 비교적 빠르게 찾을 수 있습니다. 실제로 이런 문제의 원인은 request ID, session ID, UUID, timestamp처럼 값의 고유성이 매우 높은 데이터를 tag로 저장한 경우가 많습니다. 이런 값들은 일반적으로 tag보다는 field로 저장하는 것이 적절합니다.

데이터 cleanup을 진행할 때는 특히 주의해야 합니다. 먼저 high-cardinality를 유발하는 measurement 또는 tag set을 정확히 식별하고, 다른 workload에서 해당 데이터가 필요하지 않은지 확인한 후 제거하는 것을 권장합니다. Vendor의 별도 지침 없이 index file을 직접 삭제하는 것은 피하는 것이 좋습니다. 잘못된 index 파일 삭제는 추가적인 recovery 문제를 발생시킬 수 있습니다. 데이터 삭제가 필요한 경우에도 database 전체를 대상으로 broad cleanup을 수행하기보다는, 영향 범위를 최소화할 수 있도록 문제가 확인된 measurement 또는 데이터만 targeted deletion 방식으로 제거하는 것이 좋습니다.

시스템이 정상적으로 복구된 이후에는 cardinality monitoring을 적용하고 schema design도 함께 검토하는 것을 강력히 권장합니다. 앞으로 dynamic identifier를 tag로 저장하지 않도록 하는 것이 중요합니다. 무제한으로 증가하는 tag cardinality를 사전에 방지하는 것이 단순히 메모리를 증설하는 것보다 일반적으로 훨씬 효과적입니다. 데이터 볼륨이 증가하면 동일한 문제가 다시 발생할 가능성이 있기 때문입니다.

도움이 되는 정보였기를 바랍니다. 답변이 문제 해결에 도움이 되었다면 “Accept Answer”를 눌러 주시면 감사하겠습니다. 제가 안내드린 내용이 현재 문제를 해결하는 데 도움이 되었는지 확인하는 데도 큰 도움이 됩니다.

Jason

이 대답이 도움이 되었나요?

1명이 이 답변이 도움이 된다고 생각했습니다.
댓글 0개 설명 없음

0 추가 답변

정렬 기준: 가장 유용함

답변

질문 작성자는 답변을 '승인됨'으로 표시하고, 중재자는 답변을 '추천됨'으로 표시할 수 있습니다. 이를 통해 사용자는 해당 답변이 작성자의 문제를 해결했다는 것을 알 수 있습니다.