首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果关闭全局event_scheduler,运行事件会发生什么情况?

如果关闭全局event_scheduler,运行事件会发生什么情况?
EN

Stack Overflow用户
提问于 2015-11-09 06:50:42
回答 1查看 175关注 0票数 1

假设mysql中有一个名为event_data的事件,它调用一个存储过程data_spevent_data被触发,data_sp当前正在运行。现在我正在做SET GLOBAL event_scheduler = OFF; -基本上关闭全局事件调度器。

当前data_sp的执行会发生什么情况?是停下来还是继续跑?如果它将被停止,那么数据会被提交吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 10:36:55

作为概念的以下证明,存储过程将一直运行到活动正常结束为止:

代码语言:javascript
复制
mysql> SELECT VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 5.5.22-0ubuntu1 |
+-----------------+
1 row in set (0.00 sec)

mysql> SET @@GLOBAL.event_scheduler := ON;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP PROCEDURE IF EXISTS `data_sp`;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP EVENT IF EXISTS `event_data`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> DROP TABLE IF EXISTS `event_test`;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER //

mysql> CREATE TABLE `event_test`(
    ->     `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ->     `event_scheduler_on` CHAR(3),
    ->     `current_datetime` DATETIME
    -> )//
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE EVENT IF NOT EXISTS `event_data`
    ->     ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 3 SECOND
    ->     DO CALL `data_sp`(10)//
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE PROCEDURE `data_sp`(`max_iteration` TINYINT)
    -> BEGIN
    ->     DECLARE `iteration`, `event_scheduler_off` TINYINT DEFAULT 0;
    ->     SET `event_scheduler_off` := 3;
    ->     WHILE `iteration` < `max_iteration` DO
    ->         IF `iteration` > `event_scheduler_off` THEN
    ->             SET @@GLOBAL.event_scheduler := OFF;
    ->         END IF;
    -> 
    ->         INSERT INTO `event_test` (
    ->             `event_scheduler_on`, `current_datetime`
    ->         ) VALUES (
    ->             @@GLOBAL.event_scheduler, NOW()
    ->         );
    -> 
    ->         SET `iteration` := `iteration` + 1;
    ->         DO SLEEP(1);
    ->     END WHILE;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> SELECT @@GLOBAL.event_scheduler;
+--------------------------+
| @@GLOBAL.event_scheduler |
+--------------------------+
| OFF                      |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT
    ->     `id`,
    ->     `event_scheduler_on`,
    ->     `current_datetime`
    -> FROM
    ->     `event_test`;
+----+--------------------+---------------------+
| id | event_scheduler_on | current_datetime    |
+----+--------------------+---------------------+
|  1 | ON                 | 2010-01-01 04:00:00 |
|  2 | ON                 | 2010-01-01 04:00:01 |
|  3 | ON                 | 2010-01-01 04:00:02 |
|  4 | ON                 | 2010-01-01 04:00:03 |
|  5 | OFF                | 2010-01-01 04:00:04 |
|  6 | OFF                | 2010-01-01 04:00:05 |
|  7 | OFF                | 2010-01-01 04:00:06 |
|  8 | OFF                | 2010-01-01 04:00:07 |
|  9 | OFF                | 2010-01-01 04:00:08 |
| 10 | OFF                | 2010-01-01 04:00:09 |
+----+--------------------+---------------------+
10 rows in set (0.00 sec)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33603837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档