MySQL 데이터베이스 & 테이블 용량 확인

1. 모든 데이터베이스별 총 용량 확인

현재 서버에 있는 모든 DB의 크기를 한눈에 비교하고 싶을 때 사용합니다.

용량이 큰 순서대로 정렬되어 출력됩니다.

SELECT 
    table_schema AS 'Database Name',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)',
    ROUND(SUM(data_free) / 1024 / 1024, 2) AS 'Free Space (MB)'
FROM 
    information_schema.tables
GROUP BY 
    table_schema
ORDER BY 
    (SUM(data_length + index_length)) DESC;

2. 특정 데이터베이스 내의 테이블별 용량 상세 확인

“어떤 테이블이 용량을 다 잡아먹고 있지?”라는 궁금증이 생겼을 때 사용합니다.

데이터 크기와 인덱스 크기를 구분해서 보여줍니다.

데이터 크기와 인덱스 크기를 구분

SELECT 
    table_name AS 'Table Name',
    table_rows AS 'Total Rows',
    ROUND(data_length / 1024 / 1024, 2) AS 'Data Size (MB)',
    ROUND(index_length / 1024 / 1024, 2) AS 'Index Size (MB)',
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'Total Size (MB)'
FROM 
    information_schema.tables
WHERE 
    table_schema = '데이터베이스명' -- 여기에 DB 이름 입력
ORDER BY 
    (data_length + index_length) DESC;

3. 전체 서버의 총 합계 용량 확인

서버 전체에서 MySQL이 사용하는 총 디스크 용량만 깔끔하게 보고 싶을 때 유용합니다.

SELECT 
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 'Total Global Size (GB)'
FROM 
    information_schema.tables;

4. 참고

  • data_length: 실제 데이터가 들어있는 물리적 크기입니다.
  • index_length: 인덱스(색인)가 차지하는 크기입니다. 데이터는 적은데 인덱스가 너무 크면 최적화(OPTIMIZE TABLE)를 고려해야 합니다.
  • data_free: DELETE 등으로 삭제된 행이 차지하던 ‘비어있는 공간’입니다. 이 값이 너무 크면 디스크 공간 낭비가 심하다는 뜻입니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤