Event Scheduler
mysql의 event scheduler는 주기적으로 데이터베이스에 작업을 해야 할 경우 사용한다. 지속적으로 쌓이는 temporary 데이터가 있을 때 해당 테이블을 자주 비워줌으로써 용량 차지가 되지 않게끔 해야한다.
매번 개발자가 테이블을 비울 필요 없이 데이터베이스 자체에 어떤 이벤트를 걸어주고 주기적으로 반복되게끔 할 수 있는 것이 event scheduler이다.
회원 테이블 생성하기
1
2
3
4
5
6
create table member
(
id varchar(20),
name varchar(20),
email varchar(20)
);
Event Scheduler 를 테스트하기 위해 간단한 회원 테이블을 생성한다
Event Scheduler 사용 확인하기
event scheduler 사용여부를 확인한다. Value가 ON으로 되어 있다.
1분마다 데이터가 등록되는 Event Scheduler
1
2
3
4
5
6
7
8
9
create event if not exists insert_event_minute
on schedule
every 1 minute
on completion not preserve
enable
comment 'insert member'
DO
insert into member (id, name, email)
VALUES ('1', 'name', 'email');
1분마다 동일한 회원 정보를 추가하였다.
이벤트 스키마의 테이블이다. 3번째 이벤트가 1분마다 실행되는 이벤트의 데이터이다. 시작 시간은 05:07이고 마지막으로 실행된 시간이 05:10이다. 1분 마다 정상적으로 실행 중인것을 확인할 수 있다.
현재 시각으로부터 5분 후 모든 데이터를 삭제하는 Event Scheduler
1
2
3
4
5
6
7
8
create event if not exists del_data
on schedule
AT DATE_ADD(now(), interval 5 minute)
on completion not preserve
enable
comment 'delete table'
do
truncate member;
현재 시각으로부터 5분 후 member의 데이터를 모두 삭제하는 쿼리이다. 정확한 5분을 위해 DATE_ADD()
를 사용해 now()
로부터 5분 후에 삭제하도록 구현하였다. member의 모든 데이터가 삭제된 것을 확인할 수 있다. completion not preserve
옵션으로 이벤트 수행 후 이벤트를 삭제하도록 했다.
특정 기간 동안만 반복 실행되는 Event Scheduler
1
2
3
4
5
6
7
8
9
create event if not exists insert_event_term
on schedule
every 1 minute starts now() ends DATE_ADD(now(), interval 5 minute)
on completion preserve
enable
comment 'insert member'
DO
insert into member (id, name, email)
VALUES ('1', 'name', 'email');
이벤트 정보 테이블이다. 4번째 이벤트가 실행 중이고, 특정 기간 동안만 반복하는 이벤트이다. 5분 동안 1분마다 회원 정보를 추가하는 쿼리로 실행하였다. 05:27에 시작하여 05:32에 종료되는 이벤트이다.
5분이 지난 후 이벤트가 DISABLED 상태로 되었다.
데이터 또한 정상적으로 추가된 것을 확인할 수 있다.
이벤트 테이블 정보
위에서 실행시켰던 이벤트들의 정보이다.