Navicat 部落格

2018 年 6 月 26 日,由 Robert Gravelle 撰寫

簡單來說,事件(event)是可以根據排程執行的任何工作。許多受歡迎的DBMS 都支援事件。這些也稱為「排定的事件」或「時態觸發器」,因為事件是由時間觸發的,而不是由資料庫操作(例如資料表更新)調用的觸發器。資料庫事件可用於各種工作,例如將資料庫資料表最佳化、清理記錄、封存資料或在非尖峰時間產生報告。

在本篇文章中,我們將學習如何檢視和啟用資料庫事件。在隨後的文章中,我們將學習如何為各種工作配置事件。

事件與排程工作比較

雖然資料庫事件類似於 UNIX 中的 cron 工作或 Windows 工作排程器,但它們的不同之處在於,事件在資料庫層級進行管理和調用,而不是作業系統(OS)。因此,資料庫事件是使用資料庫的資料定義語言(DDL)配置,而 cron 工作和排程工作是使用該作業系統的特定命令和/或工具定義。

配置 Event Scheduler(事件排程器)執行緒

事件由一個特殊執行緒執行。如果你具有 PROCESS 權限,則可以在 mysql> 命令提示字元下輸入「SHOW PROCESSLIST」命令來查看事件排程器執行緒及其目前的狀態:

mysql>  SHOW PROCESSLIST;
+----+-----------------+-----------------+--------+---------+------+-----------------------------+------------------+
| Id | User            | Host            | db     | Command | Time | State                       | Info             |
+----+-----------------+-----------------+--------+---------+------+-----------------------------+------------------+
|  2 | event_scheduler | localhost:49670 | NULL   | Daemon  |    3 | Waiting for next activation |                  |
|  3 | root            | localhost:49671 | NULL   | Sleep   |   43 |                             | NULL             |
|  4 | root            | localhost:49672 | NULL   | Sleep   |  180 |                             | NULL             |
|  5 | root            | localhost:56134 | sakila | Query   |    0 | starting                    | SHOW PROCESSLIST |
|  6 | root            | localhost:56136 | sakila | Sleep   | 1025 |                             | NULL             |
+----+-----------------+-----------------+--------+---------+------+-----------------------------+------------------+
5 rows in set (0.01 sec)

啟用事件排程器

事件排程器的啟動和啟用都是透過全域 event_scheduler 系統變數完成的。你可以為其指派以下三個值的其中一個:

  • ON:這啟動了事件排程器。事件排程器排程器執行所有排定的事件。這是預設值。

    當事件排程器為 ON 時,事件排程器執行緒在 SHOW PROCESSLIST 的輸出中列為常駐程式處理程序,其狀態表示為「Waiting for next activation」(等待下一次激活),如上面的輸出所示。

    「ON」或其相等數字 1 都是可接受的值。因此,你可以在 mysql 用戶端中使用以下 4 個語句中的任何一個來開啟事件排程器:

    • SET GLOBAL event_scheduler = ON;
    • SET @@global.event_scheduler = ON;
    • SET GLOBAL event_scheduler = 1;
    • SET @@global.event_scheduler = 1;

  • OFF:停止事件排程器。事件排程器執行緒沒有執行,沒有顯示在 SHOW PROCESSLIST 的輸出中,並且不執行任何排定的事件。

    當 event_scheduler 變數設定為 OFF(事件排程器停止)時,可以將 event_scheduler 的值設定為 ON 來(重新)啟動它。

    你也可以使用 0 代替「OFF」,這 4 個語句中的任何一個都可用於關閉事件排程器:

    • SET GLOBAL event_scheduler = OFF;
    • SET @@global.event_scheduler = OFF;
    • SET GLOBAL event_scheduler = 0;
    • SET @@global.event_scheduler = 0;

  • DISABLED:此值將事件排程器執行緒置於休眠狀態,事件排程器無法作業。此外,當以事件排程器為 DISABLED 時,事件排程器執行緒不會出現在 SHOW PROCESSLIST 的輸出中。

    請注意,事件排程器已停用時,無法在執行階段變更其狀態。

顯示 event_scheduler 值

雖然 ON 和 OFF 具有相等數字,但 DISABLED 沒有。因此,SELECT 或 SHOW VARIABLES 產生的 event_scheduler 值始終使用完整文字顯示,即「OFF」、「ON」或「DISABLED」。因此,在設定 event_scheduler 變數時,建議優先使用「ON」和「OFF」而不是 1 和 0。

mysql> SHOW VARIABLES like 'event_%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.02 sec)
Navicat 文章
頻道記錄
分享
部落格封存檔