文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  排程器組件

7.5.5 排程器組件

注意

scheduler 組件包含在 MySQL 企業版中,這是一項商業產品。若要深入了解商業產品,請參閱 https://mysql.dev.org.tw/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 檔案。