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등으로 삭제된 행이 차지하던 ‘비어있는 공간’입니다. 이 값이 너무 크면 디스크 공간 낭비가 심하다는 뜻입니다.


