7.5.5 Компонент планировщика
Компонент scheduler входит в MySQL Enterprise Edition, коммерческий продукт. Чтобы узнать больше о коммерческих продуктах, посетите https://www.mysql.com/products/.
Компонент scheduler предоставляет реализацию сервиса mysql_scheduler, который позволяет приложениям, компонентам или плагинам настраивать, запускать и отключать задачи каждые N секунды. Например, плагин сервера audit_log вызывает компонент scheduler при инициализации и настраивает регулярную повторяющуюся очистку кэша памяти (см. Включение задачи очистки журнала аудита).
Назначение: Реализует системную переменную
component_scheduler.enabled, которая управляет активным выполнением задач планировщиком. При запуске компонентschedulerрегистрирует таблицуperformance_schema.component_scheduler_tasks, которая перечисляет текущие запланированные задачи и некоторые данные о выполнении каждой из них.URN:
file://component_scheduler
Инструкции по установке см. в разделе 7.5.1 «Установка и удаление компонентов».
Компонент scheduler реализует сервис, используя следующие элементы:
Очередь с приоритетами зарегистрированных неактивных запланированных задач, отсортированных по времени следующего запуска (в порядке возрастания).
Список зарегистрированных активных задач.
-
Фоновый поток, который:
Переходит в состояние ожидания, если нет задач или текущая задача требует больше времени для запуска. Периодически пробуждается, чтобы проверить, не пора ли завершить работу.
Составляет список задач, которые нужно выполнить, перемещает их из очереди неактивных задач в очередь активных задач и выполняет каждую задачу по отдельности.
После выполнения списка задач удаляет задачи из активного списка, добавляет их в список неактивных задач и вычисляет время следующего запуска.
При вызове сервиса mysql_scheduler.create() вызывающая сторона создает новую экземпляра запланированной задачи для добавления в очередь, что сигнализирует семафору фонового потока. Вызывающая сторона получает дескриптор новой задачи. Код вызывающей стороны должен сохранить этот дескриптор и ссылку на сервис планирования до выполнения сервиса mysql_scheduler.destroy(). При вызове destroy() с передачей дескриптора, полученного из create(), сервис ожидает, пока задача станет неактивной (если она запущена), а затем удаляет ее из очереди неактивных задач.
Сервис компонента вызывает каждый предоставленный приложением обратный вызов (указатель на функцию) в том же потоке планировщика, по одному за раз и в порядке возрастания, в зависимости от времени, необходимого для выполнения каждой задачи.
Разработчики, которые хотят включить возможности очереди планировщика в приложение, компонент или плагин, должны обратиться к файлу mysql_scheduler.h в дистрибутиве исходного кода MySQL.
© 2025 Oracle
Licensed under the GPLv2 License.