MySQL-状态Waiting on empty queue引申

Posted cyt1153

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-状态Waiting on empty queue引申相关的知识,希望对你有一定的参考价值。

mysql 事件调度器示例演示

我们大家都知道MySQL 事件调度器是在 MySQL 5.1 中新生的一个较为特殊的功能,其可以作为定时任务调度器,来取代部分原先只能用操作系统任务调度器才能完成的定时功能。望以下的文章会给你提供更全面的知识。

一、概述

事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能。例如,Linux 中的 crontabe 只能精确到每分钟执行一次,而 MySQL 事件调度器则可以实现每秒钟执行一个任务,这在一些对实时性要>求较高的环境下就非常实用了。

事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制MySQL 事件调度器是否启用。

  1. (root:localhost:)test> SET GLOBAL event_scheduler = ON;   
  2. (root:localhost:)test> show processlist\G  

4. row

  1. Id: 46147   
  2. User: event_scheduler   
  3. Host: localhost   
  4. db: NULL   
  5. Command: Daemon   
  6. Time: 1   
  7. State: Waiting on empty queue   
  8. Info: NULL 

 

如上,该线程的所有者是 event_scheduler。

二、MySQL 事件调度器的应用案例

本案例是利用 event scheduler 的特性,每秒钟调用一次存储过程,用于判断 SLAVE 是否正常运行,如果发现 SLAVE 关闭了,忽略 0 次错误,然后重新启动 SLAVE。

首先创建存储过程

 

  1. delimiter //   
  2. create procedure `Slave_Monitor`()   
  3. begin  
  4. SELECT VARIABLE_VALUE INTO @SLAVE_STATUS   
  5. FROM information_schema.GLOBAL_STATUS   
  6. WHERE VARIABLE_NAME=‘SLAVE_RUNNING‘;  
  7. IF (‘ON‘ != @SLAVE_STATUS) THEN   
  8. SET GLOBAL SQL_SLAVE_SKIP_COUNTER=0;   
  9. SLAVE START;   
  10. END IF;  
  11. end; //   
  12. delimiter ;  

 

由于存储过程中无法调用类似 SHOW SLAVE STATUS 这样的语句,因此无法得到确切的复制错误信息和错误代码,不能进一步的处理 SLAVE 停止的各种情况。

接着,创建任务

 

  1. CREATE EVENT IF NOT EXISTS `Slave_Monitor`   
  2. ON SCHEDULE EVERY 5 SECOND   
  3. ON COMPLETION PRESERVE   
  4. DO   
  5. CALL Slave_Monitor(); 

创建了一个任务,每 5秒钟 执行一次,任务结束后依旧保留该任务,而不是删除。当然了,在本例中的任务不会结束,除非将它手动禁止了。

如果在运行中想要临时关闭一下某个任务,执行 ALTER EVENT 语句即可:

 

  1. (root:localhost:)test> alter event `Slave_Monitor` ON   
  2. COMPLETION PRESERVE DISABLE;   
  3. (root:localhost:)test> alter event `Slave_Monitor` ON   
  4. COMPLETION PRESERVE ENABLE; 

以上的相关内容就是对MySQL 事件调度器(Event Scheduler) 的介绍,望你能有所收获

 

原文blog:http://www.codesky.net/article/201006/147600.html

以上是关于MySQL-状态Waiting on empty queue引申的主要内容,如果未能解决你的问题,请参考以下文章

MySQL进程处于Waiting for table flush的分析

MySQL线程处于Waiting for table flush的分析

MySQL线程处于Waiting for table flush的分析

MySQL出现Waiting for table metadata lock的原因以及解决方法

MySQL Waiting for table metadata lock的解决方法

MySQL出现Waiting for table metadata lock的原因以及解决方法(转)