7.5.5 调度器组件
The scheduler
component is included in MySQL Enterprise Edition, a commercial product. To learn more about commercial products, see https://www.mysql.com/products/.
The scheduler
component provides an implementation of the mysql_scheduler
service that enables applications, components, or plugins to configure, run, and unconfigure tasks every N
seconds. For example, the audit_log
server plugin calls the scheduler
component at its initialization and configures a regular, recurring flush of its memory cache (see Enabling the Audit Log Flush Task).
-
Purpose: Implements the
component_scheduler.enabled
system variable that controls whether the scheduler is actively executing tasks. At startup, thescheduler
component registers theperformance_schema.component_scheduler_tasks
table, which lists the currently scheduled tasks and some runtime data about each one. -
URN:
file://component_sheduler
For installation instructions, see Section 7.5.1, “Installing and Uninstalling Components”.
The scheduler
component implements the service using these elements:
-
A priority queue of the registered, inactive scheduled tasks sorted by the next time to run (in ascending order).
-
A list of the registered, active tasks.
-
A background thread that:
-
Sleeps if there are no tasks or if the top task needs more time to run. It wakes periodically to check whether it is time to end.
-
Compiles a list of the tasks that need to run, moves them from the inactive queue, adds them to the active queue, and executes each task individually.
-
After executing the task list, removes the tasks from the active list, adds them to the inactive list, and calculates the next time they need to run.
-
When a caller invokes the mysql_scheduler.create()
service, it creates a new scheduled task instance to add to the queue, which signals the semaphore of the background thread. A handle to the new task is returned to the caller. The calling code should keep this handle and the service reference to the scheduling service until after calling the mysql_scheduler.destroy()
service. When the caller invokes destroy()
and passes in the handle it received from create()
, the service waits for the task to become inactive (if running) and then removes it from the inactive queue.
The component service calls each application-provided callback (function pointer) into the same scheduler thread, one at a time and in ascending order, based on the time each requires to run.
Developers who wish to incorporate scheduler-queueing capabilities into an application, component, or plugin should consult the mysql_scheduler.h
file in a MySQL source distribution.