ProxySQL 定时调度
转载自: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 定时调度的更多相关文章
- Quartz定时调度框架
Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...
- Spring Quartz定时调度任务配置
applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...
- 定时调度框架Quartz随笔
最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...
- crontab 定时调度
crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...
- java 多线程——quartz 定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- java 多线程——一个定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- linux定时调度器每秒运行一次
linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...
- Spring中实现定时调度
1, 内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...
- springmvc+quartz简单实现定时调度
一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...
随机推荐
- nginx虚拟主机测试
一.基于域名的nginx虚拟主机 基于域名的nginx虚拟主机的操作步骤: 1 .为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "172.16.10.101 www. ...
- 串口通信:接受数据(仿真task写法)
1.功能描述 设计一个串口数据接收模块.能够以设定的波特率(与发射端口速率匹配)接收数据,并输出保存到一个寄存器中. 2.过程描述 ①边沿检测器,识别出起始位时让接收使能端有效.这里需要排除边沿脉冲的 ...
- 【新人福利】使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https://t.csdnimg.cn/PVqS
[新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:CSDN开发助手 [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https ...
- CF1593D2 Half of Same
题目大意: 给定一个包含 \(n\)(\(n\) 是偶数)个整数的数列 \(a_1,a_2,\ldots,a_n\). 考虑一个可能的正整数 \(k\),在每次操作中,你可以选定一个 \(i\),并将 ...
- 汽车锂电池行业为啥会选择钡铼BL200系列Profinet分布式IO
近年来,全球新能源汽车的蓬勃发展促进了锂电池行业的发展.随着锂电池标准化程度的提高,电池和模块规格的标准化是未来的发展趋势,也促进了自动化模块生产线的发展. 锂电池模块生产线通过涂胶-电池堆叠-组装- ...
- 关于Tornado5.1:到底是真实的异步和还是虚假的异步
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_107 我们知道Tornado 优秀的大并发处理能力得益于它的 web server 从底层开始就自己实现了一整套基于 epoll ...
- Blazor和Vue对比学习(进阶2.2.3):状态管理之状态共享,Blazor的依赖注入和第三方库Fluxor
Blazor没有提供状态共享的方案,虽然依赖注入可以实现一个全局对象,这个对象可以拥有状态.计算属性.方法等特征,但并不具备响应式.比如,组件A和组件B,都注入了这个全局对象,并引用了全局对象上的数据 ...
- Javaweb06-JDBC
1.jdbc.properties配置文件 jdbc.properties driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localho ...
- CAD参数化功能的一些构想
cad二次开发人员通常对设计的具体业务不够理解,而设计人员对程序开发的学习成本也较高. 可否将cad的参数化功能搭建为二次开发人员与设计人员之间的桥梁. 如设计人员提前利用参数化功能建立对应的动态块, ...
- 【java】学习路径18-Arrays中的sort、binarySearch使用注意
在使用Arrays.binarySearch()的时候要注意先对数组进行排序. Arrays.binarySearch()方法介绍: Searches the specified array of i ...