반응형
안녕하세요. Johncom 입니다.
information Schema의 테이블에는 테이블 관련 정보들이 정의되어 기록되고 있습니다.
모든 값들은 byte 단위로 기록되고 있어 간단한 변환이 필요합니다.
아래 내용은 "MB" 기준으로 계산 되어 "GB" 계산을 진행하려면 /1024를 추가해야 합니다.
DESC information_schema.TABLES;
< information_shema.TABLES 구조 >
+-----------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| TABLE_TYPE | varchar(64) | NO | | | |
| ENGINE | varchar(64) | YES | | NULL | |
| VERSION | bigint(21) unsigned | YES | | NULL | |
| ROW_FORMAT | varchar(10) | YES | | NULL | |
| TABLE_ROWS | bigint(21) unsigned | YES | | NULL | |
| AVG_ROW_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| INDEX_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_FREE | bigint(21) unsigned | YES | | NULL | |
| AUTO_INCREMENT | bigint(21) unsigned | YES | | NULL | |
| CREATE_TIME | datetime | YES | | NULL | |
| UPDATE_TIME | datetime | YES | | NULL | |
| CHECK_TIME | datetime | YES | | NULL | |
| TABLE_COLLATION | varchar(32) | YES | | NULL | |
| CHECKSUM | bigint(21) unsigned | YES | | NULL | |
| CREATE_OPTIONS | varchar(255) | YES | | NULL | |
| TABLE_COMMENT | varchar(2048) | NO | | | |
+-----------------+---------------------+------+-----+---------+-------+
TABLE 정보
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 | 자동 증가(AUTO_INCREMENT) 값 |
CREATE_TIME | 테이블이 생성된 시간 |
UPDATE_TIME | 테이블이 마지막으로 업데이트된 시간 |
CHECK_TIME | 테이블이 마지막으로 검사된 시간 |
TABLE_COLLATION | 테이블에서 사용하는 정렬 규칙 (콜레이션) |
CHECKSUM | 테이블의 체크섬 값 (데이터의 무결성 검사용) |
CREATE_OPTIONS | 테이블 생성 시 사용된 추가 옵션 |
TABLE_COMMENT | 테이블에 대한 설명 또는 주석 |
TABLE_SCHEMAL | DB명 |
TABLE_NAME | TABLE명 |
Query
1. 간단한 DB 사이즈 TOTAL SIZE 조회 ( 데이터 + 인덱스 )
SELECT table_schema "DATABASE",
ROUND(SUM(data_length+index_length)/1024/1024,1) "DATA(MB)"
FROM information_schema.TABLES
GROUP BY table_schema;
2. DB 사이즈 중 DATA와 INDEX 나눠서 보기
SELECT
table_schema "DATABASE",
ROUND(SUM(data_length)/(1024/1024),2) as 'DATA(MB)',
ROUND(SUM(index_length)/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY 2 DESC;
3.특정 DB내 테이블 정보 가져오기
SELECT
table_schema "DATABASE",
table_name "TABLE",
table_rows "TABLE_COUNT",
ROUND(data_length/(1024/1024),2) as 'DATA(MB)',
ROUND(index_length/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES
WHERE table_schema = 'test'
ORDER BY 3 DESC;
4.DB-TABLE 별 COUNT와 DATABASE SIZE 확인하기
SELECT
table_schema "DATABASE",
table_name "TABLE",
table_rows "TABLE_COUNT",
ROUND(data_length/(1024/1024),2) as 'DATA(MB)',
ROUND(index_length/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES;
자주 내가 날리는 쿼리
SELECT
table_schema "DATABASE",
table_name "TABLE",
table_rows "TABLE_COUNT",
ROUND(data_length/(1024/1024),2) as 'DATA(MB)',
ROUND(index_length/(1024/1024),2) as 'INDEX(MB)'
FROM information_schema.TABLES
WHERE table_schema NOT IN ('sys','mysql','information_schema','performance_schema')
ORDER BY data_length DESC;
반응형
'프로그래밍 > DB,SQL' 카테고리의 다른 글
Aurora 리스트, 스냅샷, 복원 CLI - AWS Aurora MySQL (RDS) (0) | 2025.03.29 |
---|---|
MySQL 권한 설정 CREATE USER (0) | 2024.06.13 |
MySQL 테스트 데이터 생성하기(Faker) - 아무데이터 넣기 (0) | 2023.03.04 |
MySQL 8.0 Community server 설치 ( 윈도우, 64 bit ) (1) | 2022.11.25 |
ERROR 1872 (HY000) : slave failed to initialize relay log info structure from the repository 에러 해결방법 (0) | 2022.08.25 |