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.enabledsystem variable that controls whether the scheduler is actively executing tasks. At startup, the- schedulercomponent registers the- performance_schema.component_scheduler_taskstable, 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.