DBAtlas · 데이터베이스 운영 아틀라스

가장 큰 테이블 / 컬렉션 목록

Oracle

SELECT segment_name, segment_type,
       ROUND(bytes/1024/1024, 1) AS mb
FROM dba_segments
WHERE segment_type IN ('TABLE','TABLE PARTITION')
ORDER BY bytes DESC
FETCH FIRST 10 ROWS ONLY;

인덱스도 보려면 segment_type 필터를 제거한다.

PostgreSQL

SELECT relname AS table,
       pg_size_pretty(pg_total_relation_size(relid)) AS total
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;

pg_total_relation_size는 테이블 + 인덱스 + TOAST의 합계다. 테이블만 보려면 pg_relation_size를 사용한다.

MySQL

SELECT table_name,
       ROUND((data_length + index_length)/1024/1024, 1) AS mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC
LIMIT 10;

특정 스키마만 보려면 WHERE table_schema = 'name'을 사용한다.

SQL Server

SELECT TOP 10 OBJECT_NAME(object_id) AS table_name,
       SUM(reserved_page_count) * 8 / 1024 AS mb
FROM sys.dm_db_partition_stats
GROUP BY object_id
ORDER BY mb DESC;

reserved_page_count는 예약된 모든 페이지(데이터 + 인덱스)를 포함한다.

MongoDB

db.getCollectionNames()
  .map(c => ({ name: c, mb: +(db[c].stats().storageSize/1048576).toFixed(1) }))
  .sort((a, b) => b.mb - a.mb)
  .slice(0, 10)

storageSize는 압축된 디스크상 크기다. stats()는 대형 컬렉션에서도 비용이 낮다.

Redis

redis-cli --bigkeys
# To rank by memory (bytes): redis-cli --memkeys

둘 다 SCAN으로 전체 키스페이스를 스캔한다(서버를 블로킹하지는 않지만 부하를 준다). 차이는 지표다: --bigkeys는 타입별로 요소 수/길이 기준 가장 큰 키를, --memkeys는 MEMORY USAGE를 통한 메모리 사용량 기준으로 보고한다. 단일 키는 MEMORY USAGE <key>를 사용한다.

DBAtlas에서 열기 →