文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 文件。