Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Scheduler Component

7.5.5 调度器组件

Note

调度器组件是 MySQL Enterprise Edition 的一部分,属于商业产品。要了解更多关于商业产品的信息,请参阅 https://www.mysql.com/products/

调度器组件提供了一个实现 mysql_scheduler 服务的实现,该服务使应用程序、组件或插件能够每 N 秒配置、运行和卸载任务。例如,audit_log 服务器插件在其初始化时调用调度器组件,并配置了其内存缓存的定期刷新(参阅 启用审核日志刷新任务)。

  • 目的:实现 component_scheduler.enabled 系统变量,该变量控制调度器是否活动执行任务。在启动时,调度器组件注册了 performance_schema.component_scheduler_tasks 表,该表列出了当前计划的任务和每个任务的一些运行时数据。

  • URN:file://component_sheduler

有关安装说明,请参阅 第 7.5.1 节,“安装和卸载组件”

调度器组件使用以下元素实现服务:

  • 一个优先级队列,包含已注册的、非活动的计划任务,按下一次运行时间排序(升序)。

  • 一个列表,包含已注册的活动任务。

  • 一个后台线程:

    • 如果没有任务或顶部任务需要更多时间来运行,则休眠。它周期性地醒来检查是否到了结束时间。

    • 编译一个需要运行的任务列表,将它们从非活动队列中移出,添加到活动队列中,并单独执行每个任务。

    • 执行任务列表后,删除活动列表中的任务,添加到非活动列表中,并计算下一次需要运行的时间。

当调用者调用 mysql_scheduler.create() 服务时,它创建一个新的计划任务实例,以添加到队列中,并信号后台线程的信号量。调用者将收到新任务的句柄,并将其保留到调用 mysql_scheduler.destroy() 服务时。调用者调用 destroy() 并传递从 create() 中收到的句柄时,服务将等待任务变为非活动(如果正在运行),然后从非活动队列中删除它。

组件服务按时间顺序调用每个应用程序提供的回调函数(函数指针),一次一个,基于每个任务需要的运行时间。

开发者如果想将调度器队列功能集成到应用程序、组件或插件中,应该查看 MySQL 源代码分布中的 mysql_scheduler.h 文件。