입문4분 분량

DynamoDB 테이블의 크기와 항목 수를 확인하는 법

DynamoDB 테이블에 값싸게 겨눌 수 있는 SELECT COUNT(*)는 없습니다. DynamoDB는 "이 테이블이 얼마나 큰가?"에 매우 다른 두 가지 답을 줍니다: 최대 여섯 시간까지 뒤처질 수 있는 무료 추정치, 그리고 테이블 전체 읽기 비용이 드는 정확한 수입니다. "왜 내 항목 수가 틀리지?"라는 혼란의 대부분은 한쪽을 고르면서 다른 쪽의 동작을 기대하는 데서 옵니다.

DynamoDB 테이블의 항목 수와 크기를 어떻게 확인하나요?

DescribeTable을 호출하세요: ItemCountTableSizeBytes를 무료로 돌려주지만, "DynamoDB는 이 값을 대략 여섯 시간마다 업데이트합니다. 최근 변경은 이 값에 반영되지 않았을 수 있습니다" (AWS API 레퍼런스). 정확한 숫자가 필요하면 --select COUNTScan을 실행하세요 — 수만 반환하지만, 모든 항목을 읽습니다(그리고 과금합니다). DynoTable 같은 GUI는 모든 테이블에 추정치를 보여 주고, 요청하면 정확한 수를 계산할 수 있습니다.

원하는 것사용비용신선도
어림한 수 + 크기, 무료DescribeTable없음(메타데이터 호출)~6시간 지연
정확한 전체 수Select COUNT를 쓴 Scan테이블 전체를 읽음실시간
한 키에 대한 정확한 수Select COUNT를 쓴 Query일치하는 항목을 읽음실시간
필터링된 부분집합의 수Scan/Query + 필터 + COUNT스캔된 모든 것을 읽음실시간

방법 1: DescribeTable (무료, ~6시간 지연)

DescribeTable은 메타데이터 조회입니다 — 항목을 하나도 읽지 않으므로 읽기 용량을 소비하지 않으며, 여러분이 찾는 두 숫자를 담고 있습니다:

aws dynamodb describe-table --table-name Orders \
  --query 'Table.[ItemCount, TableSizeBytes]'

둘 다 같은 주의 사항이 붙습니다. API 레퍼런스 그대로: "DynamoDB는 이 값을 대략 여섯 시간마다 업데이트합니다. 최근 변경은 이 값에 반영되지 않았을 수 있습니다." 그래서 방금 대량 로드한 테이블이 몇 시간 동안 ItemCount: 0을 보고할 수 있습니다 — 숫자가 틀린 게 아니라, 스냅샷인 것입니다.

같은 응답에는 인덱스별 수치도 담겨 있습니다: 모든 GSI와 LSI가 같은 여섯 시간 주기로 자체 ItemCountIndexSizeBytes를 보고합니다. 의 항목 수를 테이블의 것과 비교하는 것은 괜찮은 무료 건강 점검입니다 — 실제로 인덱스 키를 지닌 항목이 몇 개인지 알려 주니까요.

방법 2: Scan + Select COUNT로 정확한 수 세기

"대략, 오늘 아침 기준"으로는 충분하지 않을 때는, 진짜로 셉니다:

aws dynamodb scan --table-name Orders --select COUNT

실행하기 전에 알아야 할 사실들, 모두 Scan API 레퍼런스 에서:

  • COUNT는 "일치하는 항목 자체가 아니라 일치하는 항목의 수를 반환합니다" — 네트워크 트래픽은 줄지만, 그러나 "항목을 가져오는 것과 같은 양의 읽기 용량 단위를 사용합니다". 100 GB 테이블의 정확한 수 세기는 청구서에 100 GB 읽기로 찍힙니다.
  • 단일 요청은 여전히 스캔된 데이터 1 MB에서 멈춥니다; 응답의 Count는 "단일 스캔 요청에 한정된 항목 수만 반환"합니다. CLI는 LastEvaluatedKey를 따라가며 페이지들을 대신 합산해 줍니다; SDK 코드에서는 루프를 돌며 더합니다 — 페이지네이션을 보세요.
  • 큰 테이블에서는 병렬 스캔(--segment / --total-segments)으로 작업을 나누고 세그먼트별 수를 합산하세요.

부분집합 세기

  • 한 파티션 키 아래의 항목: --select COUNT를 쓴 Query — 그 키의 항목만 읽으므로, 데이터가 작은 만큼 쌉니다. 을 세는 올바른 방법입니다.
  • 필터에 일치하는 항목: FilterExpression을 더하세요 — 하지만 과금되는 수는 Count가 아니라 ScannedCount라는 것을 기억하세요: DynamoDB는 읽은 뒤에 필터링하므로, 필터링된 스캔으로 "보관 처리된 주문 세기"를 하면 모든 주문에 비용을 냅니다. 작은 Count 옆의 높은 ScannedCountGSI가 되고 싶어 하는 필터의 특징입니다 — 필터링 전략을 보세요.

더 풍부한 질문 — 상태별 수, 합계, 평균 — 에 대해서는 DynamoDB에 GROUP BY가 아예 없습니다; 우회법은 count, sum & aggregate에 있습니다.

DynoTable에서의 테이블 크기와 항목 수

DynoTable은 두 답을 여러분이 이미 보고 있는 곳에 둡니다. 열려 있는 모든 테이블에는 탭 도구 모음에 Stats 버튼(막대 차트 아이콘)이 있고, 그 패널은 다음을 보여 줍니다:

  • 기본 키와 보조 인덱스 — 테이블의 형태를 한눈에.
  • Items · Size · Avg item — DynamoDB 자체의 DescribeTable 추정치로, 추정치임이 표시되어 있고, 여섯 시간 주의 사항은 마우스만 올리면 보입니다.
  • Index table — 항목이 실제로 지닌 모든 속성(commonData.status 같은 중첩 경로 포함)을 실시간 진행률과 함께 찾아내는 원클릭 샘플링 스캔입니다. 필드 자동 완성과 추론된 TypeScript / Zod / JSON Schema 내보내기 를 구동하며, 일반적인 DynamoDB 읽기 비용이 발생합니다 — 앱이 그 사실을 미리 알려 줍니다.
DynoTable의 테이블 통계 패널: 키와 인덱스, Items / Size / Avg item 추정치 행, 그리고 인덱싱된 필드 목록.
DynoTable의 테이블 통계 패널: 키와 인덱스, Items / Size / Avg item 추정치 행, 그리고 인덱싱된 필드 목록.

그리고 정확한 숫자를 위해서는, 내장 AI 어시스턴트가 요청하면 전체 테이블에 대한 수, 합계, 그룹별 분해를 계산합니다 — 페이지 하나를 샘플링하는 게 아니라 일치하는 모든 항목을 읽으며, 읽기 용량 비용이 드는 것은 무엇이든 실행 전에 물어봅니다.

FAQ

왜 내 DynamoDB 항목 수가 틀린가요? 틀린 게 아니라 — 뒤처진 것입니다. ItemCount(와 TableSizeBytes)는 "대략 여섯 시간마다" 새로 고쳐지므로, 최근의 쓰기와 삭제는 아직 반영되지 않았습니다. 콘솔의 테이블 개요도 같은 DescribeTable 숫자를 같은 지연과 함께 보여 줍니다.

DynamoDB에서 행을 정확히 어떻게 세나요? aws dynamodb scan --table-name X --select COUNT — CLI가 테이블 전체를 페이지 단위로 돌며 페이지별 수를 합산합니다. 정확하지만 모든 항목을 가져오는 것과 같은 읽기 용량이 과금됩니다.

DescribeTable은 무료인가요? 읽기 용량을 소비하지 않습니다 — 데이터 읽기가 아니라 메타데이터 호출이므로, 폴링해도 테이블의 처리량을 건드리지 않습니다.

항목 하나의 크기는 어떻게 확인하나요? DynamoDB는 항목 크기로 계량합니다(쓰기 1 KB / 읽기 4 KB 단위로 올림). 항목을 항목 크기 계산기에 붙여 넣어 과금되는 크기를 확인하고, 상한선은 400 KB 항목 제한을 보세요.

항목 수가 요금에 영향을 주나요? 스토리지는 TableSizeBytes로, 요청은 항목 크기 × 요청 수로 과금됩니다 — 항목 수 자체로 직접 과금되지는 않습니다. 테이블의 숫자를 요금 계산기에 넣어 온디맨드와 프로비저닝 모드 전반의 월간 그림을 확인하세요.

테이블의 형태, 추정치, 인덱싱된 필드를 클릭 한 번 거리에 두고 싶으신가요? DynoTable을 다운로드하고 아무 테이블에서나 Stats 패널을 열어 보세요.

업데이트됨