Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Scheduler Component

7.5.5 调度器组件

Note

MySQL Enterprise Edition中包括scheduler组件。要了解更多关于商业产品,请见https://www.mysql.com/products/

scheduler组件提供了mysql_scheduler服务的实现,使得应用程序、组件或插件可以配置、运行和取消任务,每N秒。例如,audit_log服务器插件在初始化时调用scheduler组件,并配置了定期、重复的内存缓存刷新(见Enabling the Audit Log Flush Task)。

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

  • URN:file://component_sheduler

安装指南,请见Section 7.5.1, “Installing and Uninstalling Components”

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

  • 一个优先队列,包含已注册、不活动的排定任务,按下一个任务的执行时间排序(升序)。

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

  • 一个背景线程:

    • 如果没有任务或当前任务需要更多时间,它睡眠。它周期性地检查是否需要结束。

    • 编译一个任务列表,移动它们从不活动队列到活动队列,然后执行每个任务。

    • 执行任务列表后,移除任务从活动列表,添加到不活动列表,并计算下一个执行时间。

当调用者调用mysql_scheduler.create()服务时,它创建了一个新的排定任务实例,并将其添加到队列中,信号背景线程的信号。返回给调用者的任务句柄。调用代码应该保留这个句柄和服务引用,直到调用mysql_scheduler.destroy()服务。调用者在调用destroy()时,传入之前从create()接收的句柄,服务等待任务变为不活动(如果正在运行),然后从不活动队列中移除它。

组件服务在同一个调度线程中调用每个应用程序提供的回调(函数指针),按升序顺序执行,每个任务的执行时间。

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