Loading...
MySQL 9.5 Reference Manual 9.5의 7.5.5 Scheduler Component의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
참고
scheduler component는 상용 제품인 MySQL Enterprise Edition에 포함되어 있습니다. 상용 제품에 대해 더 알아보려면 https://www.mysql.com/products/를 참조하십시오.
scheduler component는 mysql_scheduler service의 구현을 제공하여 애플리케이션, component 또는 plugin이 N 초마다 task를 설정(configure), 실행(run), 설정 해제(unconfigure)할 수 있도록 합니다. 예를 들어, audit_log server plugin은 초기화 시점에 scheduler component를 호출하여 자신의 메모리 캐시를 정기적으로 반복 flush하도록 설정합니다( Enabling the Audit Log Flush Task 참조).
목적: scheduler가 task를 적극적으로 실행할지 여부를 제어하는
component_scheduler.enabled
시스템 변수를 구현합니다. 시작 시점에
scheduler component는
performance_schema.component_scheduler_tasks
테이블을 등록합니다. 이 테이블은 현재 스케줄링된 task와 각 task에 대한 일부 런타임 데이터를 나열합니다.
URN: file://component_scheduler
설치 지침은 Section 7.5.1, “Installing and Uninstalling Components”를 참조하십시오.
scheduler component는 다음 요소들을 사용하여 service를 구현합니다:
다음 실행 시각(오름차순) 기준으로 정렬된, 등록되었지만 비활성 상태인 스케줄링된 task의 우선순위 큐(priority queue).
등록된 활성 task의 목록(list).
다음을 수행하는 백그라운드 스레드:
task가 없거나, 가장 먼저 실행될 task가 실행까지 더 많은 시간이 필요한 경우 sleep합니다. 종료할 시점인지 확인하기 위해 주기적으로 wake up합니다.
실행이 필요한 task의 목록을 작성하고, 이들을 비활성(inactive) 큐에서 제거하여 활성(active) 큐에 추가한 다음, 각 task를 개별적으로 실행합니다.
task 목록을 실행한 후에는 해당 task들을 활성 목록에서 제거하고 비활성 목록에 추가한 뒤, 다음 실행 시각을 계산합니다.
호출자가 mysql_scheduler.create() service를 호출하면 큐에 추가할 새로운 스케줄링된 task 인스턴스를 생성하고, 이는 백그라운드 스레드의 세마포어에 시그널을 보냅니다. 새 task에 대한 핸들이 호출자에게 반환됩니다. 호출 코드는 mysql_scheduler.destroy() service를 호출한 이후까지 이 핸들과 scheduling service에 대한 service reference를 유지해야 합니다. 호출자가 destroy()를 호출하고 create()에서 받은 핸들을 전달하면, service는 해당 task가 비활성 상태(실행 중인 경우)를 될 때까지 기다렸다가 비활성 큐에서 제거합니다.
component service는 각 애플리케이션에서 제공하는 콜백(함수 포인터)을 동일한 scheduler 스레드 내에서, 한 번에 하나씩, 각 콜백이 실행에 필요로 하는 시간에 따라 오름차순으로 호출합니다.
scheduler-queueing 기능을 애플리케이션, component 또는 plugin에 통합하고자 하는 개발자는 MySQL 소스 배포본에 포함된 mysql_scheduler.h 파일을 참고해야 합니다.
7.5.4 Query Attribute Components
7.5.6 Replication Components