본문 바로가기
Database/MySQL

MySQL DB 사이즈 증가량 추이

by DBTechBiz 2022. 9. 7.

MySQL DB 사이즈 증가량 추이

이벤트 스케쥴러를 통해 테이블+인덱스 증가량 추이를 산정



1. 증가량 추이를 위한 생성 쿼리

-- 사이즈 집계 테이블 생성
CREATE TABLE zz_size_sum (
	yyyymmdd     VARCHAR(8) NOT NULL 			 COMMENT '년월일',
    table_schema VARCHAR(64) NOT NULL DEFAULT '' COMMENT '스키마명',
    table_name   VARCHAR(64) NOT NULL DEFAULT '' COMMENT '테이블명',
    SIZE_BYTES   BIGINT(21) UNSIGNED NOT NULL    COMMENT '사이즈(데이터+인덱스)',
    PRIMARY KEY (yyyymmdd, table_schema, table_name)
) COMMENT='사이즈집계';

-- 2가지 방식(매주, 매일)으로 집계 이벤트 작성 (각 환경에 맞게 설정)
-- 1. 매주 토요일 사이즈 집계 이벤트 설정
DELIMITER $$
CREATE EVENT IF NOT EXISTS size_sum_scheduler
 ON SCHEDULE
  EVERY 1 WEEK
  STARTS '2022-09-07 00:00:00'
 ENABLE
 COMMENT "사이즈(데이터+인덱스) 집계 스케쥴러"
 DO
  BEGIN
    INSERT INTO zz_size_sum
       SELECT DATE_FORMAT(NOW(), '%Y%m%d') yyyymmdd
            , table_schema
            , table_name
            , IFNULL(data_length, 0) + IFNULL(index_length, 0) AS "size(bytes)"
         FROM information_schema.tables
        WHERE table_schema in ('스키마명')
          AND table_type = 'BASE TABLE'
        ORDER BY table_schema, table_name;
    COMMIT;
 END$$
DELIMITER;

-- 2. 매일 사이즈 집계 이벤트 설정
DELIMITER $$
CREATE EVENT IF NOT EXISTS size_sum_scheduler
 ON SCHEDULE
  EVERY 1 DAY
  STARTS '2022-09-07 00:00:00'
 ENABLE
 COMMENT "사이즈(데이터+인덱스) 집계 스케쥴러"
 DO
  BEGIN
    INSERT INTO zz_size_sum
       SELECT DATE_FORMAT(NOW(), '%Y%m%d') yyyymmdd
            , table_schema
            , table_name
            , IFNULL(data_length, 0) + IFNULL(index_length, 0) AS "size(bytes)"
         FROM information_schema.tables
        WHERE table_schema in ('스키마명')
          AND table_type = 'BASE TABLE'
        ORDER BY table_schema, table_name;
    COMMIT;
 END$$
DELIMITER;

-- 등록된 스케쥴러 확인
SELECT *
  FROM information_schema.events
 WHERE event_name = 'size_sum_scheduler';
  
-- 스케쥴러 삭제
DROP EVENT size_sum_scheduler;

 

2. 스키마별 월별, 일별 증가량 추이 쿼리

-- 일별 증가량 추이
SELECT yyyymmdd
     , table_schema
     , ROUND(SUM(size_bytes)/1024/1024,2) MB
  FROM zz_size_sum
 GROUP BY yyyymmdd, table_schema
 ORDER BY yyyymmdd, table_schema;
 
-- 월별 증가량 추이
SELECT left(yyyymmdd, 6) yyyymm
     , table_schema
     , ROUND(SUM(size_bytes)/1024/1024,2) MB
  FROM zz_size_sum
 GROUP BY left(yyyymmdd, 6), table_schema
 ORDER BY yyyymm, table_schema;

 

 

반응형

'Database > MySQL' 카테고리의 다른 글

MySQL initcap Function  (0) 2022.09.02
MySQL Utility MYSQLDIFF 사용법 (Schema 비교)  (0) 2022.09.01

댓글