Mysql cancel分析
最近看了下mysql jdbc的cancel功能的源码,做个笔记记录下
Jdbc:mysql-connector-java-8.0.18.jar
mysql-connector源码中有个CancelQueryTask(CancelQueryTaskImpl)定时任务,CancelQueryTaskImpl继承了TimerTask同时实现了CancelQueryTask接口。
在ClientPreparedStatement.executeInternal方法里面会通过this.startQueryTimer()方法去生成这个CancelQueryTask
CancelQueryTask这个对象是用于将执行中的SQL取消掉的任务对象,当SQL执行前,通过StatementImpl.setQueryTimeout(int)(参数单位为秒)这个参数的值只要不是0,
它就会在JDBC内部与MySQL通信前会创建一个任务(当前connection新建一个CancelQueryTaskImpl对象)并设置延迟执行的时间(timeout的时间),
然后会将这个任务放入到一个Timer的任务队列中,等待触发执行。如果是0就会返回null(CancelQueryTask为null)
cancel任务:
run方法里面会新建一个SocketConnection
然后通过NativeSession.sendCommand()发送消息来做cancel的操作发送kill query命令,同时标记状态。
后面会通过localQueryToCancel.setCancelStatus(CancelStatus.CANCELED_BY_TIMEOUT);对当前TimerTask任务中的Query对象,将CancelStatus设置为TIMEOUT。
这就是一次因为timeout而做的cancel。
1.主动cancel
调用StatementImpl.cancel()方法在获取一些本地信息后会新建一个SocketConnection
然后通过NativeSession.sendCommand()发送消息来做cancel的操作发送kill query命令,同时标记状态。
后面也会通过localQueryToCancel.setCancelStatus(CancelStatus.CANCELED_BY_USER); 对当前TimerTask任务中的Query对象,将CancelStatus设置为.CANCELED_BY_USER。
2.被动cancel
当执行完execSQL以后
如果CancelQueryTask不为null,SQL语句一直未响应,CancelQueryTask在达到设置的timeout值时会被Timer调度
会执行stopQueryTimer()方法内部去调用CancelQueryTask.cancel();此时的timeoutTask.cancel()并不是真正的去执行cancel操作,
只是将state设置为了CANCELLED仅仅对状态做了标记而已,后面的purge()方法,发现状态为取消,会去真正移除该任务。
在从Timer的任务队列将CancelQueryTask任务cancel掉,然后从此Timer的任务队列中删除所有已取消的任务。
Mysql cancel分析相关推荐
- Mysql元数据分析
Mysql元数据分析 一.information_schema库 information_schema库中的表,保存的是Mysql的元数据. 官网元数据表介绍 InnoDB相关的表介绍 库中有表: + ...
- MYSQL:explain分析
mysql explain分析 通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈.通过expalin可以得到: 1. 表的读取顺序 2.表的读取操作的操作类型 3.哪 ...
- MySQL索引分析和优化(转)
MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符 ...
- mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...
对Mysql进行深入的分析对于发现mysql性能瓶颈和寻找优化策略是十分必要的. 我们可以从不同的粒度上对Mysql进行分析:可以整体分析服务器,或者检查单个查询或批查询. 通过分析,我们得到的如下信 ...
- MySQL性能分析及explain的使用
MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explai ...
- MySQL 索引分析除了 EXPLAIN 还有什么方法?
作者 | adrninistrat0r 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 前言 对于非数据库开发人员而言,难以对MySQL源码进行分析或调试,接近一个黑盒,但MySQL提供 ...
- (3.13)mysql基础深入——mysql日志分析工具之mysqlsla【待完善】
(3.13)mysql基础深入--mysql 日志分析工具之mysqlsla 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢查询日志分析工具 ...
- MySQL 性能分析 之 联合索引(复合索引)实践分析
MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...
- php mysql索引原理_加速PHP动态网站 关于MySQL索引分析优化
本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...
最新文章
- 在单元测试时指定HttpContext的各种Path
- 酷我音乐盒里的MV怎么下载
- Spring Boot (4)---配置文件详解
- Win-MASM64汇编语言-LEA指令
- C++中指针和引用区别
- SpringCloud学习5-如何创建一个服务提供者provider
- android 蓝牙与单片机通信原理图,单片机结合蓝牙模块串口通信
- Java开发微信小程序(三)用小程序给用户推送服务消息
- 图解多线程设计模式pdf_图解Java多线程设计模式pdf
- 置信区间的临界值_在进行区间估计时,若要求置信水平为95%,则相应的临界值为...
- u8、u16、u32、s8、s16、s32、Size_t是什么类型?
- Mysql数据库操作语句总结(一)
- 大学书信选3(新年心语)
- 渲染吃显卡还是CPU,如何高效3D渲染?
- 免费获得minecraft账号,快来试试!!!
- 女神节,CRMEB向女神致敬!官方特别设计免费ui小图标来了!
- 手把手教你搭建惊艳的博客
- 微信开放平台--》网站应用开发 微信登录网站接口(https://open.weixin.qq.com/)
- 网络:TCP的滑动窗口与流量控制和拥塞控制
- 【定时任务】Spring Boot 定时执行任务详解,每天定时几点钟执行任务
热门文章
- sketch制作Android动画,Sketch制作GIF动画——基础篇(改良版)
- spring cloud、gradle、父子项目、微服务框架搭建---搭建Eureka注册中心(一)
- ipad一直显示连接app服务器出错,iPad显示无法连接到App Store怎么办 打开不了解决方法...
- 无限循环抛出 No method found for class [B 这个异常
- 在几何画板中如何制作圆柱的侧面展开动画_几何画板如何制作圆柱体形成的过程动画...
- html tr固定行高列宽,HTML表格固定格式:行高列宽
- idea中搭建基于maven的ssm整合框架
- java 当前时间加12小时_Java设置时间的24或12小时机制
- Anaconda prompt 提示系统找不到指定路径
- 哈工大软件构造Lab2实验