PostgreSQL: 테이블별 용량 확인 방법
PostgreSQL 데이터베이스를 관리하면서 어떤 테이블이 가장 많은 공간을 차지하고 있는지 파악하는 것은 성능 최적화와 스토리지 관리에 매우 중요한 일입니다. 이 글에서는 PostgreSQL에서 한 데이터베이스 내의 테이블별 전체 용량을 확인하는 세 가지 방법을 알려드리겠습니다.
1. SQL 쿼리 활용하기 (가장 정확한 방법)
가장 정확하고 상세한 정보를 얻을 수 있는 방법은 SQL 쿼리를 직접 실행하는 것입니다. pg_total_relation_size()
함수는 테이블 자체는 물론, 연관된 인덱스와 TOAST 테이블의 크기까지 합산하여 전체 용량을 보여줍니다.
SELECT
relname AS "테이블명",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "총 용량"
FROM
pg_class C
LEFT JOIN
pg_namespace N ON (N.oid = C.relnamespace)
WHERE
nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind = 'r'
ORDER BY
pg_total_relation_size(C.oid) DESC;
pg_total_relation_size()
: 테이블과 모든 인덱스를 포함한 전체 크기를 바이트 단위로 반환합니다.pg_size_pretty()
: 바이트 값을 'MB', 'GB'와 같이 보기 쉬운 형태로 변환해줍니다.C.relkind = 'r'
: 'r'은 일반 테이블을 의미하며, 다른 시스템 객체는 제외합니다.
이 쿼리를 실행하면 용량이 큰 테이블 순서대로 깔끔하게 정리된 목록을 확인하실 수 있습니다.
2. psql
명령어 사용하기 (가장 간편한 방법)
별도의 쿼리 작성 없이 psql
클라이언트에서 제공하는 메타 커맨드를 이용하면 더욱 간편하게 확인할 수 있습니다. 데이터베이스에 접속한 상태에서 아래 명령어를 입력해보세요.
\dt+
이 명령어는 현재 접속된 데이터베이스의 모든 테이블 목록과 함께 용량, 소유자, 접근 권한 등 상세 정보를 제공합니다. 가볍게 용량을 확인하고 싶을 때 유용합니다.
3. 뷰(View)를 만들어 재활용하기 (가장 효율적인 방법)
테이블 용량 확인 작업을 자주 해야 한다면, 앞서 소개한 SQL 쿼리를 **뷰(View)**로 만들어두는 것이 매우 효율적입니다. 한 번 뷰를 생성해두면, 복잡한 쿼리를 반복해서 입력할 필요 없이 간단하게 조회할 수 있습니다.
CREATE OR REPLACE VIEW public.table_size_info AS
SELECT
relname AS "테이블명",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "총 용량"
FROM
pg_class C
LEFT JOIN
pg_namespace N ON (N.oid = C.relnamespace)
WHERE
nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind = 'r'
ORDER BY
pg_total_relation_size(C.oid) DESC;
이제 아래 쿼리만 실행하면 언제든지 최신 테이블 용량 정보를 확인하실 수 있습니다.
SELECT * FROM public.table_size_info;
이 세 가지 방법 중 상황에 맞는 방법을 활용하여 데이터베이스를 효율적으로 관리할 수 있습니다.
'개발 (Development) > PostgreSQL' 카테고리의 다른 글
[PostgreSQL/Java] shared memory 에러 해결: Java + MyBatis 대용량 쿼리 처리 (0) | 2025.08.25 |
---|---|
[PostgreSQL/TimescaleDB] 데이터 적재 시 발생하는 statement_timeout 및 row is too big 오류 해결 방법 (0) | 2025.08.10 |
[PostgreSQL] View와 Materialized View의 차이점과 사용법 (0) | 2025.08.03 |
[PostgreSQL] 문자열을 timestamp with time zone으로 변환하는 방법 (0) | 2025.07.27 |
[PostgreSQL] MyBatis foreach + UNION ALL 쿼리의 성능 문제와 PostgreSQL 최적화 (1) | 2025.07.05 |