The scheduler
component is included in MySQL Enterprise Edition,
a commercial product. To learn more about commercial products,
see https://www.mysql.com/products/.
As of MySQL 8.0.34, 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_scheduler
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.