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