MySQL에서 모든 데이터베이스 크기 확인하기
MySQL에서는 information_schema의 TABLES 테이블을 조회하면 서버에 존재하는 모든 데이터베이스의 크기를 한 번에 확인할 수 있습니다. 각 테이블의 실제 데이터 용량(data_length)과 인덱스 용량(index_length)을 합산한 뒤, 데이터베이스별로 그룹화하면 됩니다.
기본 조회 쿼리
아래 쿼리를 실행하면 모든 데이터베이스의 크기를 MB 단위로 확인할 수 있습니다.
mysql> SELECT table_schema "Database",
-> SUM(data_length + index_length)/1024/1024 "Size in MB"
-> FROM information_schema.TABLES GROUP BY table_schema;실행 결과 예시
+--------------------+----------------+ | Database | Size in MB | +--------------------+----------------+ | gaurav | 1.04785156 | | information_schema | 0.00878906 | | mysql | 0.68551350 | | performance_schema | 0.00000000 | | sample | 0.04687500 | | tutorial | 0.03125000 | +--------------------+----------------+ 6 rows in set, 1 warning (0.33 sec)
쿼리 설명
table_schema는 데이터베이스(스키마) 이름을 의미하며, data_length는 테이블에 저장된 실제 데이터의 바이트 수, index_length는 인덱스가 차지하는 바이트 수를 나타냅니다. 이 두 값을 더한 후 1024로 두 번 나누면(/1024/1024) 바이트 단위 값이 MB 단위로 변환됩니다.
유용한 응용 팁
1. 크기 순으로 정렬하기
용량이 큰 데이터베이스부터 확인하고 싶다면 ORDER BY 절을 추가합니다.
SELECT table_schema "Database",
ROUND(SUM(data_length + index_length)/1024/1024, 2) "Size in MB"
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;2. GB 단위로 변환하기
대용량 데이터베이스라면 MB 대신 GB 단위가 더 직관적입니다. 1024로 세 번 나누면 됩니다.
SELECT table_schema "Database",
ROUND(SUM(data_length + index_length)/1024/1024/1024, 2) "Size in GB"
FROM information_schema.TABLES
GROUP BY table_schema;3. 특정 데이터베이스만 확인하기
WHERE 절을 사용하면 원하는 데이터베이스 하나의 크기만 조회할 수도 있습니다.
SELECT table_name,
ROUND((data_length + index_length)/1024/1024, 2) "Size in MB"
FROM information_schema.TABLES
WHERE table_schema = 'sample'
ORDER BY (data_length + index_length) DESC;정리
information_schema.TABLES를 활용하면 별도의 도구 없이 SQL 쿼리만으로 MySQL 서버 전체 또는 개별 데이터베이스의 디스크 사용량을 손쉽게 파악할 수 있습니다. 스토리지 용량 관리나 성능 최적화 작업 시 유용하게 활용해 보시기 바랍니다.