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
檔案。