안녕하세요. 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' 카테고리의 다른 글
MySQL 권한 설정 CREATE USER (0) | 2024.06.13 |
---|---|
MySQL 테스트 데이터 생성하기(Faker) - 아무데이터 넣기 (0) | 2023.03.04 |
MySQL 8.0 Community server 설치 ( 윈도우, 64 bit ) (0) | 2022.11.25 |
ERROR 1872 (HY000) : slave failed to initialize relay log info structure from the repository 에러 해결방법 (0) | 2022.08.25 |
Ignoring query to other database... 오류 해결 (0) | 2022.08.25 |