AWS AuroraDB, Mysql DB 에서 스케줄러 사용하는 방법 🕘


AWS AuroraDB에서 데이터 사용을 용이하게 하기 위해 스케줄러를 사용해봅시다.


AWS에서 사용하는 RDB 데이터베이스인 AuroraDB에서 스케줄러를 사용하는 방법을 설명합니다.

굉장히 많은 데이터가 일반 RDB에 쌓일 경우, 불가피하게 속도에 영향을 끼칠 수 있습니다.

한 예로, 1 번의 쿼리로 데이터를 삭제하기 너무 많은 시간이 필요할 수 있습니다.

스케줄러를 적절히 사용하면 데이터 관리를 용이하게 할 수 있을 것입니다.


이벤트 스케줄을 생성하는 기본 문법 ✏️


먼저 기본 문법을 알아봅시다. workbench 등을 통해 접근하여 다음과 같은 문법으로 이벤트를 생성할 수 있습니다.

CREATE EVENT IF NOT EXISTS [이벤트 ]
    ON SCHEDULE
        [수행, 반복  시간]
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT [코멘트]
    DO 
    [수행할 명령]


실제 쿼리를 작성해봅시다. ✏️


일단, 매 시간마다 데이터를 삭제하는 예제 쿼리를 작성해보겠습니다.

CREATE EVENT IF NOT EXISTS EVENT_DELETE_ROW_BEFORE_180DAY
    ON SCHEDULE
        # EVERY 1 MINUTE 1 마다
        EVERY 1 HOUR
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT '현재일로 부터 180일 전 데이터는 삭제'
    DO 

    # 수행할 이벤트
    DELETE FROM [테이블 ] WHERE date < date_sub(NOW(), INTERVAL 180 DAY) LIMIT 100


스케줄러 On/Off


쿼리 작성을 완료했다면, 해당 데이터베이스가 스케줄러가 작동가능한 지 확인해봅시다.

SHOW VARIABLES
WHERE VARIABLE_NAME = 'event_scheduler'

이벤트 확인

작동이 가능하지 않다면 아래 명령어를 통해 스케줄러 기능을 사용가능하게 바꿔주세요.

SET GLOBAL event_scheduler = ON;

AWS에서는 AuroraDB를 처음 만들었을 때, 파라미터 그룹(Parameter groups)이라는 설정값에 의해 스케줄러가 on/off를 할 수 없는 상태로 생성됬을 수도 있습니다.

AWS console에서 확인해 봅시다.

데이터 베이스의 파라미터 그룹을 확인해봅시다.

데이터 베이스 확인

default.aurora5.6라는 기본 파라미터 그룹으로 생성된 것을 알 수 있습니다.

파라미터 그룹 확인

이벤트 스케줄러가 변경이 가능하도록 되어있으나, 기본 파라미터 그룹은 값 변경이 되지 않습니다. 그렇기 때문에, 새 파라미터 그룹을 생성하고 데이터베이스 파라미터 그룹을 변경해야 합니다.

파라미터 변경

  1. 새로운 파라미터 그룹을 생성했다면 파라미터를 변경 후, 데이터베이스 파라미터 그룹을 생성한 파라미터 그룹으로 변경한다.
  2. 변경이 가능한 파라미터 그룹이라면 파라미터만 변경한다

적용 후, 데이터베이스 재부팅을 통해 파라미터가 변경이 적용되게 하세요.

재부팅

재부팅이 완료된 후, 다시 명령어로 확인해봅니다.

SHOW VARIABLES
WHERE VARIABLE_NAME = 'event_scheduler'


파라미터 변경 완료

이제 이벤트 스케줄러를 등록할 수 있습니다.


이벤트 스케줄러 등록 📅


예제 쿼리를 실행합니다.

CREATE EVENT IF NOT EXISTS EVENT_DELETE_ROW_BEFORE_180DAY
    ON SCHEDULE
        # EVERY 1 MINUTE 1 마다
        EVERY 1 HOUR
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT '현재일로 부터 180일 전 데이터는 삭제'
    DO 

    # 수행할 이벤트
    DELETE FROM [테이블 ] WHERE date < date_sub(NOW(), INTERVAL 180 DAY) LIMIT 100

등록된 이벤트는 다음 명령어로 확인할 수 있습니다.

SHOW EVENTS;

등록된 이벤트 보기

등록된 이벤트를 삭제하려면 다음 명령어로 삭제할 수 있습니다.

DROP event [이벤트 ];


그럼 20,000 👋