《MYSQL45讲》kill不掉的线程

kill query + 线程id :终止这个线程正在执行的语句

kill connection + 线程id :关闭这个线程的连接,也会先停止这个线程正在执行的语句。这个connection可以缺省。

本文讨论的情况是:使用了kill命令,却没有断开连接,show processlist命令执行结果中,被kill的线程显示killed,这个killed是什么意思?以及一些常见的命令误解

1.收到kill query命令后,线程会做什么?

1.MYSQL中有个处理的kill命令的线程,处理kill命令的线程首先会设置该线程的状态为KILL_QUERY

2.给该线程发送一个“你被kill了”的信号

一个语句的执行过程中有多处埋点,执行到埋点处就会判断自己的线程状态。

如果线程在等待某个资源,那这个等待必须是可以唤醒的,否则就无法到达埋点处。

执行kill query 线程id命令,处理kill命令的线程首先会设置该线程的状态为KILL_QUERY,然后给该线程发送一个信号,该线程收到信号后知道自己被kill了,如果正在锁等待,就停止等待。去处理这个KILL_QUERY状态。 如果不发信号,该线程就仍然在锁等待,不知道自己被kill了。

2.收到kill connection命令后,会发生什么?

1.将被kill线程的状态设置为Kill_Connection

2.关闭被kill线程的网络连接

3.由于最大并发线程数不够导致的新线程等待并且kill不掉

当线程数已经达到最大并发线程数(innodb_thread_concurrency),此时一个新的查询请求想进来,需要等待有空闲线程,所以会每隔10ms尝试进入一次,并没有去判断线程的状态,所以此时kill query这个线程是没用的,而kill connection是可以的,直接关闭网络连接,但是一查,该线程仍然在等待中,不过状态是KILLED,因为

如果一个线程的状态是KILL_CONNECTION,就会把Command列显示成Killed。

为什么这样设计,因为断开连接只是将客户端和服务端连接断开了,而服务端的线程还是存在的。

那么该线程什么时候才能停止呢?

答案是要等到该线程能够进入innodb时,才会判断出自己的状态是了KILL_QUERY或者KILL_CONNECTION,此时才会进入终止线程的逻辑。

4.由于耗时长导致的一段时间内线程kill不掉

情况1:大事务,被kill时要将前面的更改都回滚,耗时长。

情况2:大查询回滚。

情况3:DDL命令执行到最后时被kill。

关于客户端的3个误解

1.在一个查询语句长时间阻塞时,客户端直接执行ctrl+c可以终止这个线程吗?

是不可以的,执行ctrl+c时,是启动另一个线程向服务端发送kill query命令,而MYSQL是停等协议,也就是要等到客户端的操作只能影响你客户端的线程,你ctrl+c只是客户端线程终止,只是你客户端退出了,服务端的线程仍然在运行。

2.数据库的表特别多,客户端连接就会很慢

客户端连接服务端需要执行的步骤是TCP握手,用户账号密码校验,获取权限。

可以看出来与表的数量没有关系。

表越多连接越速度越慢的原因是

客户端在连接成功后,需要将“每个库有哪些表”存本地缓存,用于名称补全的。

使用-A可以取消掉这个操作。

3.-quick命令不会让服务端变快

MYSQL客户端发送请求后,接收服务端返回结果的方式有两种:

1.在本地开个缓存,先把结果存起来。

2.不缓存,读一个处理一个

默认是第一个,而使用-quick就算第2个设置。

如果不缓存,本地如果处理慢了,就会导致服务端的结果被阻塞(因为停等协议),就导致服务端变慢了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470575.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24/11/13 算法笔记<强化学习> DQN算法

DQN算法的主要特点包括: 神经网络代替Q表:在传统的Q学习中,需要维护一个Q表来存储每个状态-动作对的Q值。而在DQN中,使用神经网络来近似这些Q值,这使得算法能够处理具有大量状态和动作的问题。 经验回放(E…

Blender进阶:图像纹理节点和映射节点

13 图像纹理节点 13.1 图像纹理节点 图像纹理节点,用于加载一张贴图 加载图片后,可以从图片上取得一个像素点。 输入:一个坐标矢量 输出:该坐标的像素颜色 演示:使用合并xyz节点来指定坐标。。 13.2 多种贴图 一…

MYSQL 库,表 基本操作

相关的两个编码集(简单了解即可) 1.数据库编码集 :对将要存储的数据进行编码 2.数据库校验集:对将要执行的操作(增删查改)数据是对数据编码的校验,本质也是一种读取数据库中数据库采用的一种编码格式。 总结:数据库无论对数据做…

万字长文分析函数式编程

目录 一.认识函数式编程 一、函数式编程的定义 二、函数式编程的思想 三、函数式编程的特点 四、函数式编程的应用 二.Lambda表达式 三.Stream流 3.1 创建流对象 3.2 注意事项 3.3 Stream流的中间操作 filter map distinct sorted limit skip flatMap 3.4 St…

DOM 规范 — MutationObserver 接口

前言 最近在重学 JavaScript 中,再一次接触到了 MutationObserver 内容,接着联想到了 Vue 源码中有使用过这个接口,因此觉得有必要对 MutationObserver 接口进行相关了解和学习。 下面是 vue 源码中关于 MutationObserver 接口使用的代码&a…

灰狼优化算法

一、简介 1.1 灰狼优化算法-Grey Wolf Optimizer 通过模拟灰狼群体捕食行为,基于狼群群体协 作的机制来达到优化的目的。GWO算法具有结构简单、需 要调节的参数少、容易实现等特点,其中存在能够自适应调整 的收敛因子…

AI 写作(五)核心技术之文本摘要:分类与应用(5/10)

一、文本摘要:AI 写作的关键技术 文本摘要在 AI 写作中扮演着至关重要的角色。在当今信息爆炸的时代,人们每天都被大量的文本信息所包围,如何快速有效地获取关键信息成为了一个迫切的需求。文本摘要技术正是为了解决这个问题而诞生的&#x…

【 ElementUI 组件Steps 步骤条使用新手详细教程】

本文介绍如何使用 ElementUI 组件库中的步骤条组件完成分步表单设计。 效果图: 基础用法​ 简单的步骤条。 设置 active 属性,接受一个 Number,表明步骤的 index,从 0 开始。 需要定宽的步骤条时,设置 space 属性即…

尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了…

应用程序部署(IIS的相关使用,sql server的相关使用)

数据服务程序(API)部署 1、修改配置文件 打开部署包中的web.config配置文件,确认数据库登录名和密码正确 修改ip为电脑IP(winR输入cmd,输入ipconfig,IPv4对应的就是本机IP) 2、打开IIS&#x…

网页版五子棋——对战模块(服务器端开发②)

前一篇文章:网页版五子棋——对战模块(服务器端开发①)-CSDN博客 项目源代码:Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、创建并注册 GameAPI 类 1.创建 GameAPI 类 2.注册 GameAPI 类 …

STM32单片机WIFI语音识别智能衣柜除湿消毒照明

实践制作DIY- GC0196-WIFI语音识别智能衣柜 一、功能说明: 基于STM32单片机设计-WIFI语音识别智能衣柜 二、功能介绍: STM32F103C系列最小系统板LCD1602显示器ULN2003控制的步进电机(柜门开关)5V加热片直流风扇紫外消毒灯DHT11…

网络远程操控

1.给两个设备配上ip地址让他们能通 2.开启远程管理功能,打开telnet 3.创建远程管理的账号和密码,账号权限 输入system-view进入视图,不敲这个命令不能进行配置 配好ip后进入AR1ping一下AR2的ip看看通不通,接着进入AR2开启telnet权…

【go从零单排】Timer、Epoch 时间函数

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,time.Timer 是一个用于在指定时间后执行操作的计时器。…

鸿蒙自定义UI组件导出使用

上期讲解了在Entry入口写了一个系统的下拉列表组件,如果我们想要封装一个可供复用的组件供团队其他人使用,那么需要掌握一下自定义组件的写法: 1、自定义可导入组件 - export 声明模块 如果要定义一个在外部可使用的组件 , 需要再定义组件…

Web大学生网页作业成品——婚礼婚纱网页设计与实现(HTML+CSS)(6个页面)

🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…

时序数据库TimescaleDB安装部署以及常见使用

文章目录 一、时序数据库二、TimescaleDB部署1、repository yum仓库配置2、yum在线安装3、插件配置4、TimescaleDB使用登录pg创建插件使用超表 一、时序数据库 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库&#x…

Matlab: 生成对抗网络,使用Datastore结构输入mat格式数据

使用matlab的生成对抗网络(Generative Adversarial Network,GAN)以及条件CGAN时,案例中 的生成器的输入为图像,改为.mat格式输入遇到的问题。解决方法 官方资源 训练条件生成对抗网络 (CGAN)- MATLAB & Simulink-…

Linux kernel 堆溢出利用方法(二)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中off-by-null的利用手法。在通过讲解另一道相对来说比较困难的kernel off-by-null docker escape来深入了解这种漏洞的利用手法。(没了解过docker逃逸的朋友也可以看懂,毕竟有了root权限后&a…