网站死链如何修改,wordpress是怎么用的,免费安全正能量网站大全,谷歌google官网下载kill query 线程id :终止这个线程正在执行的语句
kill connection 线程id :关闭这个线程的连接#xff0c;也会先停止这个线程正在执行的语句。这个connection可以缺省。 本文讨论的情况是#xff1a;使用了kill命令#xff0c;却没有断开连接#xff0c;show processli…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大查询回滚。
情况3DDL命令执行到最后时被kill。 关于客户端的3个误解
1.在一个查询语句长时间阻塞时客户端直接执行ctrlc可以终止这个线程吗
是不可以的执行ctrlc时是启动另一个线程向服务端发送kill query命令而MYSQL是停等协议也就是要等到客户端的操作只能影响你客户端的线程你ctrlc只是客户端线程终止只是你客户端退出了服务端的线程仍然在运行。 2.数据库的表特别多客户端连接就会很慢
客户端连接服务端需要执行的步骤是TCP握手用户账号密码校验获取权限。
可以看出来与表的数量没有关系。
表越多连接越速度越慢的原因是
客户端在连接成功后需要将“每个库有哪些表”存本地缓存用于名称补全的。
使用-A可以取消掉这个操作。 3.-quick命令不会让服务端变快
MYSQL客户端发送请求后接收服务端返回结果的方式有两种
1.在本地开个缓存先把结果存起来。
2.不缓存读一个处理一个 默认是第一个而使用-quick就算第2个设置。
如果不缓存本地如果处理慢了就会导致服务端的结果被阻塞因为停等协议,就导致服务端变慢了。