MySQL에서 디스크 공간 조회하기
네, 가능합니다. information_schema.tables를 조회하면 특정 테이블의 데이터 크기(DATA_LENGTH), 인덱스 크기(INDEX_LENGTH), 평균 행 길이(AVG_ROW_LENGTH) 등을 확인하여 해당 테이블이 차지하는 디스크 공간을 파악할 수 있습니다.
기본 구문
사용하는 구문은 다음과 같습니다.
SELECT * FROM information_schema.tables WHERE table_name = 'yourTableName';1단계: 테이블 생성
먼저 예제로 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable1600
-> (
-> StudentId int,
-> StudentFirstName varchar(20)
-> );
Query OK, 0 rows affected (0.51 sec)2단계: 데이터 삽입
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1600 values(100,'Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1600 values(101,'David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1600 values(102,'Carol');
Query OK, 1 row affected (0.19 sec)3단계: 전체 레코드 조회
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select * from DemoTable1600;실행 결과는 다음과 같습니다.
+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 100 | Bob |
| 101 | David |
| 102 | Carol |
+-----------+------------------+
3 rows in set (0.00 sec)디스크 공간 확인하기
이제 information_schema.tables를 조회하여 특정 행·열 데이터가 속한 테이블이 차지하는 디스크 공간을 확인해 보겠습니다.
mysql> select * from information_schema.tables where table_name='DemoTable1600';위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
| def | web | demotable1600 | BASE TABLE | InnoDB | 10 | Dynamic | 0 | 0 | 16384 | 0 | 0 | 0 | NULL | 2019-10-19 14:34:46 | NULL | NULL | utf8_unicode_ci | NULL | | |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
1 row in set (0.00 sec)주요 컬럼 설명
- TABLE_ROWS: 테이블에 저장된 대략적인 행 수 (InnoDB 엔진에서는 추정치입니다.)
- AVG_ROW_LENGTH: 한 행(row)당 평균 바이트 크기
- DATA_LENGTH: 테이블 데이터가 실제로 차지하는 디스크 공간
- INDEX_LENGTH: 인덱스가 차지하는 디스크 공간
- DATA_FREE: 아직 재활용되지 않은 빈 공간
AVG_ROW_LENGTH와 TABLE_ROWS를 곱하면 행 단위로 차지하는 공간을 추정할 수 있습니다. 다만 MySQL은 개별 열(column) 단위의 정확한 디스크 사용량을 직접 제공하지 않으므로, 위 정보들은 테이블 수준의 참고 지표로 활용하는 것이 좋습니다.