MySQL에서 이벤트(Events)를 사용하여 계획 작업 완료

이벤트는 SQL 코드를 한 번 또는 일정 간격으로 실행하도록 지정할 수 있습니다.일반적으로 복잡한 SQL 문장을 저장 프로세스로 봉인한 다음에 주기적으로 저장 프로세스를 호출하여 일정한 임무를 완성한다.
이벤트는 서버 연결을 만들 필요가 없고, 독립된 이벤트 스케줄러 라인을 통해 초기화됩니다.이벤트는 입력 매개 변수도 반환 값도 없습니다. 연결이 없으면 입력과 출력이 존재하지 않기 때문입니다.활성화되면 서버 로그를 통해 실행 명령을 볼 수 있지만, 어떤 이벤트에서 왔는지 알 수 없습니다.정보도 조회할 수 있습니다_SCHEMA.EVENTS 테이블은 최근 실행 시간과 같은 이벤트 상태를 파악합니다.
저장 프로세스와 유사하고 사건도 유사한 문제를 고려해야 한다.우선, 이벤트는 MySQL 서비스 측의 추가 작업을 증가시켰다.이벤트 자체의 부하는 매우 작지만 이벤트 호출의 SQL 문장은 성능에 심각한 영향을 미칠 수 있습니다.또한 이벤트도 저장 프로세스처럼 문장 기반 복제가 가져오는 문제가 있다.이벤트가 비교적 좋은 응용은 주기적인 유지보수 작업, 캐시 재건, 데이터 통계, 모니터링과 진단의 상태값 저장 등 작업을 하는 것이다.
다음 예제에서는 스토리지 프로세스를 호출하여 매주 지정된 데이터베이스에서 데이터 테이블을 최적화하는 이벤트를 생성합니다.

CREATE EVENT optimize_somedb ON SCHEDULE EVERY 1 WEEK
DO 
CALL optimize_tables('somedb');
이벤트를 반복해서 실행해야 하는지 여부를 지정할 수 있습니다.어떤 경우에는 문제없지만, 어떤 경우에는 안 된다.위의 예를 들어 모든 복사본에서 OPTIMIZE TABLE 명령을 실행하고 싶을 수도 있습니다.그러나 알아야 할 것은 모든 복사본이 이 조작을 동시에 실행한다면 전체 서버 성능(예를 들어 잠금표)에 영향을 줄 수 있다는 것이다.그리고 주기적인 사건은 긴 사건이 걸려야 완성될 수도 있고, 심지어 다음 사건이 끝나기도 전에 새로운 사건이 다시 실행될 수도 있다.MySQL은 이러한 상황을 막지 못하기 때문에 같은 작업의 상호 배척을 위해 코드를 직접 작성해야 합니다.자물쇠를 넣는 방식으로 이 목적을 달성할 수 있다.

CREATE EVENT optimize_somedb ON SCHEDULE EVERY 1 WEEK
DO 
BEGIN
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
  	BEGIN END;
  IF GET_LOCK('somedb', 0) THEN
  	DO CALL optimize_tables('some_db');
  END IF;
  DO RELEASE_LOCK('somedb');
END
'여분'으로 보이는 continue handler는 이상이 있어도 자물쇠를 방출할 수 있습니다.
이벤트는 연결과 무관하지만 라인과 관련이 있습니다.MySQL Server에는 Server 구성에서 열 수 있는 기본 이벤트 스케줄링 라인이 있습니다.

SET GLOBAL event_handler := 1;
일단 활성화되면, 이 라인은 지정한 스케줄링 이벤트를 실행합니다.서비스 측의 오류 로그를 보고 이벤트 실행 정보를 알 수 있습니다.
이벤트 스케줄러는 단일 라인이지만 이벤트 자체는 동시에 실행할 수 있습니다.이벤트가 실행될 때마다 서버에서 새로운 프로세스를 만듭니다.이벤트 내부에서 CONNECTION_ 호출 가능ID () 는 고유한 값을 가져옵니다. (실제로 연결되지 않았지만) 실제 반환된 값은 스레드 id입니다.프로세스와 루틴은 이벤트가 끝난 후에 삭제됩니다.SHOW PROCESSLIST를 통해 볼 수 있으며 Command 열에 Connect로 표시됩니다.
프로세스가 실제 실행 이벤트의 루틴을 만들었지만 루틴은 이벤트가 끝난 후에 삭제되고 캐시에 저장되지 않기 때문에 Threads_created 이 상태 계수기는 증가하지 않습니다.
결어: 이벤트는 응용 프로그램, 또는 운영체제 수준의 정시 작업에 비해 SQL 연결이 구축되는 과정이 없기 때문에 효율이 높고 비용이 많이 들지 않습니다.주기적으로 실행해야 하는 SQL 스크립트 작업(예를 들어 데이터 테이블 최적화, 통계 보고서 데이터 생성 등)에 적용됩니다.그러나 사건 자체에 병발 문제가 존재할 수 있으므로 자물쇠를 채워 해결할 수 있음을 주의해야 한다.또한 만약에 사건이 반복적으로 집행되어야 한다면 너무 복잡하고 시간이 소모되는 임무를 집행하지 않는 것이 가장 좋다.
이상은 MySQL이 이벤트(Events)를 사용하여 계획 임무를 완성하는 상세한 내용입니다. 더 많은 MySQL이 이벤트로 계획 임무를 완성하는 것에 대한 자료는 저희 기타 관련 글을 참고하세요!

좋은 웹페이지 즐겨찾기