MySQL 테이블 용량 확인 방법 쿼리 샘플

Mysql에서 사용중인 테이블 용량을 확인 방법에 대해 알아보겠습니다.

테이블 용량을 취득하기 위기 위해서는 information_schema.tables를 사용합니다.

information_schema.tables로 쿼리를 실행하게 되면 테이블 별로 정보를 취득할 수 있습니다.

 

테이블 용량 취득

information_schema.tables를 사용해 테이블 용량을 취득하는 쿼리를 보겠습니다.

SELECT  
    table_name                                              -- 테이블 이름
    , engine                                                -- 테이블 엔진
    , table_rows AS tbl_rows                                -- 테이블 레코드수
    , floor((data_length+index_length)/1024/1024) AS allmb  -- 총 용량(데이터 용량 + 인덱스 용량)
    , floor((data_length)/1024/1024) AS dmb                 -- 데이터 용량
    , floor((index_length)/1024/1024) AS imb                -- 인덱스 용량
FROM 
    information_schema.tables;

 

현재 선택중인 스키마의 전체 테이블의 정보가 테이블 별로 표시가 됩니다.

스키마를 생성하면 기본으로 작성되는 테이블들도 같이 표시가 됩니다.

표시되는 순서는 스키마를 생성했을때 기본으로 작성된 테이블이 먼저 표시가 됩니다.

그리고 사용자가 작성한 테이블이 이름순으로 표시 됩니다.

 

테이블 사용 용량 정렬

information_schema.tables로 테이블 사용 용량을 정렬하는 방법을 알아보겠습니다.

테이블 사이즈가 큰 순서로 정렬하기 위해 ORDER BY를 사용합니다.

SELECT  
    table_name                                              -- 테이블 이름
    , engine                                                -- 테이블 엔진
    , table_rows AS tbl_rows                                -- 테이블 레코드수
    , floor((data_length+index_length)/1024/1024) AS allmb  -- 총 용량(데이터 용량 + 인덱스 용량)
    , floor((data_length)/1024/1024) AS dmb                 -- 데이터 용량
    , floor((index_length)/1024/1024) AS imb                -- 인덱스 용량
FROM 
    information_schema.tables 
ORDER BY allmb DESC;

 

테이블 사이즈가 큰 순서대로 정렬이 되었습니다.

테이블 사이즈가 작은 순서대로 정렬하고 싶은 경우에는 DESCASC로 변경하면 됩니다.

하지만 VIEW 테이블이 있는 경우에는 가장 먼저 표시가 됩니다.

이유는 VIEW 테이블은 다른 테이블을 참조하기 때문에 테이블 용량이 NULL이기 때문입니다.

ORDER BY를 조금 수정해야 합니다.

SELECT  
    table_name                                              -- 테이블 이름
    , engine                                                -- 테이블 엔진
    , table_rows AS tbl_rows                                -- 테이블 레코드수
    , floor((data_length+index_length)/1024/1024) AS allmb  -- 총 용량(데이터 용량 + 인덱스 용량)
    , floor((data_length)/1024/1024) AS dmb                 -- 데이터 용량
    , floor((index_length)/1024/1024) AS imb                -- 인덱스 용량
FROM 
    information_schema.tables 
ORDER BY CASE
    WHEN allmb IS NULL THEN '1'
    ELSE '0'
END, allmb ASC;

 

테이블 사이즈가 작은 순서대로 표시가 되었습니다.

만약 테이블 사이즈가 0이 아닌 NULL인 경우에는 가장 밑에 표시가 됩니다.

만약 테이블 용량이 NULL인 경우에도 가장 위에 표시 되도록 하고 싶은 경우에는 ORDER BY allmb ASC로 변경하면 됩니다.

댓글