转载自:https://www.jianshu.com/p/410ff5897c27

Scheduler是 v1.2.0 引入的特性。
ProxySQL的Scheduler是一个类似于定时任务系统(cron-like)的实现,粒度可精细到毫秒级。只能在Admin管理接口对Scheduler进行配置:暂时不支持在配置文件中进行配置。
为什么加入Scheduler特性 Scheduler允许ProxySQL以一定的时间间隔运行自定义的脚本,可用于多种目的。主要动机是在此类脚本探测到某些外部事件时对ProxySQL进行重新配置。
Implementation 当前Scheduler通过两个表来实现调度功能:
Admin> SHOW TABLES LIKE '%scheduler%';
+-------------------+
| tables |
+-------------------+
| scheduler |
| runtime_scheduler |
+-------------------+
2 rows in set (0.00 sec) 详细一点的描述: scheduler表是配置scheduler的地方。
runtime_scheduler表(只读)是runtime时scheduler的实际表示。
(译注:scheduler表用于配置,runtime_scheduler存放的是正在运行或等待运行的定时调度任务)
scheduler表的结构如下: Admin> SHOW CREATE TABLE scheduler\G
*************************** 1. row ***************************
table: scheduler
Create Table: CREATE TABLE scheduler (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
interval_ms INTEGER CHECK (interval_ms>=100 AND interval_ms<=100000000) NOT NULL,
filename VARCHAR NOT NULL,
arg1 VARCHAR,
arg2 VARCHAR,
arg3 VARCHAR,
arg4 VARCHAR,
arg5 VARCHAR,
comment VARCHAR NOT NULL DEFAULT '')
1 row in set (0.00 sec) 每个字段的详细解释如下: id:scheduler任务的唯一标识id。
active:如果设置为1,则表示该调度任务是激活的,否则该调度任务是未激活的,不会加载到runtime去运行。
interval_ms:调度任务的调度时间间隔(单位毫秒),允许的最小时间间隔为100毫秒。
filename:待执行脚本的绝对路径。
arg1 到 arg5:传递给任务脚本的参数,最多允许传递5个参数。
comment:用于说明这个调度任务是干嘛的,可随意写。
runtime_scheduler的表结构和scheduler表的结构相同: Admin> SHOW CREATE TABLE runtime_scheduler\G
*************************** 1. row ***************************
table: runtime_scheduler
Create Table: CREATE TABLE runtime_scheduler (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
interval_ms INTEGER CHECK (interval_ms>=100 AND interval_ms<=100000000) NOT NULL,
filename VARCHAR NOT NULL,
arg1 VARCHAR,
arg2 VARCHAR,
arg3 VARCHAR,
arg4 VARCHAR,
arg5 VARCHAR,
comment VARCHAR NOT NULL DEFAULT '')
1 row in set (0.00 sec) ProxySQL中的其它配置表,在修改了配置后都需要将它们加载到runtime使其生效,保存到disk使配置持久化。
基于此,ProxySQL为了支持scheduler也能实现这些功能,特地添加了几个新的命令: LOAD SCHEDULER TO RUNTIME和LOAD SCHEDULER FROM MEMORY:加载内存数据库中的main.scheduler表到runtime的数据结构中,也就是说让配置立即生效;
LOAD SCHEDULER TO MEMORY和LOAD SCHEDULER FROM DISK:将磁盘数据库中的disk.scheduler表加载到内存数据库中的main.scheduler表;
SAVE SCHEDULER FROM RUNTIME和SAVE SCHEDULER TO MEMORY:将runtime数据结构中的scheduler持久化到内存数据库中的main.scheduler表中;
SAVE SCHEDULER FROM MEMORY和SAVE SCHEDULER TO DISK:将内存数据库中的main.scheduler表持久化到磁盘数据库中的disk.scheduler表中。 scheduler是通过调用fock()然后execve()实现的。如果execve()失败,将会向错误日志中报告该错误。

ProxySQL 定时调度的更多相关文章

  1. Quartz定时调度框架

    Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...

  2. Spring Quartz定时调度任务配置

    applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...

  3. 定时调度框架Quartz随笔

    最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...

  4. crontab 定时调度

    crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...

  5. java 多线程——quartz 定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  6. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  7. linux定时调度器每秒运行一次

    linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...

  8. Spring中实现定时调度

    1,   内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...

  9. springmvc+quartz简单实现定时调度

    一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...

随机推荐

  1. 迭代阈值收缩算法ISTA,背后的思想与具体推到过程

  2. labview从入门到出家6(进阶篇)--移位寄存器的使用

    前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...

  3. 记一次删除k8s namespace无法删除的问题

    在用longhorn工具做k8s存储卷动态预配的时候,需要修改longhorn.yaml的一个默认参数,修改完成需要重新加载longhorn.yaml,结果重新加载出错了,修改的参数没有生效,于是执行 ...

  4. hexo-yilia主题支持twikoo评论系统

    如果图片无法加载,可到 我的博客 中,查看完整文章 yilia-more 已经增加对 twikoo 的支持,可直接使用 代码修改 layout/_partial/post 路径下新建 twikoo.e ...

  5. C#枚举器/迭代器

    一.枚举器 1.为什么foreach可以顺序遍历数组? 因为foreach可以识别可枚举类型,通过访问数组提供的枚举器对象来识别数组中元素的位置从而获取元素的值并打印出来. 2.什么是枚举器?可枚举类 ...

  6. 多云部署多主模式的MGR集群,每个云一个MGR 节点,满足业务单元化改造的需求

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  7. RocketMQ的push消费方式实现的太聪明了

    大家好,我是三友,我又来了~~ 最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶 ...

  8. 「vijos-bashu」lxhgww的奇思妙想(长链剖分)

    倍增离线,预处理出爹和孙子们.查询\(O(1)\) #include <cstdio> #include <cstring> #include <numeric> ...

  9. PySpark 大数据处理

    本文主要介绍Spark的一些基本算子,PySpark及Spark SQL 的使用方法. 虽然我从2014年就开始接触Spark,但几年来一直没有真正地学以致用,时间一久便忘了如何使用,直到在工作中用到 ...

  10. openstack 创建虚拟机失败

    虚拟机创建失败    用户创建一台虚拟机,虚拟机使用4个网络平面,所以虚拟机选择了4个不同平面的网络,创建虚拟机一直在孵化的过程中,最后创建虚拟机失败. 失败后返回的报错日志 Build of ins ...