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