文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  调度程序组件

7.5.5 调度程序组件

注意

scheduler 组件包含在 MySQL 企业版(一种商业产品)中。要了解有关商业产品的更多信息,请参阅 https://www.mysqlserver.cn/products/

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

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

  • URN:file://component_sheduler

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

scheduler 组件使用以下元素实现服务

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

  • 已注册、活动任务的列表。

  • 后台线程

    • 如果没有任务或顶级任务需要更多时间才能运行,则休眠。它会定期唤醒以检查是否该结束了。

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

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

当调用方调用 mysql_scheduler.create() 服务时,它会创建一个新的计划任务实例以添加到队列中,该队列会向后台线程的信号量发出信号。新任务的句柄将返回给调用方。调用代码应保留此句柄和对调度服务的引用,直到调用 mysql_scheduler.destroy() 服务之后。当调用方调用 destroy() 并传入从 create() 接收到的句柄时,服务将等待任务变为非活动状态(如果正在运行),然后将其从非活动队列中删除。

组件服务将每个应用程序提供的回调(函数指针)调用到同一个调度程序线程中,一次一个,并按升序排列,具体取决于每个回调需要运行的时间。

希望将调度程序排队功能合并到应用程序、组件或插件中的开发人员应查阅 MySQL 源代码发行版中的 mysql_scheduler.h 文件。