暂无图片
分享
吾念
2019-09-22
我有一个session commond是killed state是sending date

是一条查询语句,是个大表,请问如果不重启,怎么干掉这个session。

5270 | fl_prod | 172.18.251.103:51356 | flow | Killed | 358618 | Sending data

收藏
分享
7条回答
默认
最新
Cui Hulong

一般情况下就死kill,   kill执行后,一个线程特定的kill flag会被设置(THD::killed)。大多数情况下,线程消亡可能是需要花一点时间的,因为kill flag是以特定的间隔被检查的。这时候也可能会出现hang 住的情况。先尽快解决的话,主备切换,或直接重启mysql。

暂无图片 评论
暂无图片 有用 0
吾念
上传附件:stak.txt
暂无图片 评论
暂无图片 有用 0
吾念

已经好几天了,目前mysql性能没有出现问题,想知道mysql现在卡在哪个地方么,有么有方法促进或者加快mysql去执行kill这个动作。

因为我看书上写的是,kill  thread_id  其实是执行了2个动作 :

(1) THD::KILL_QUERY(将变量 killed 赋值为 THD::KILL_QUERY);

(2)给 session  的执行线程发一个信号。

在这mysql kill session 用的是pthread_cond_timedwait 这个函数,我收集了pstack文件,但是我还是不是很能看懂,大佬可以帮分析分享,现在如果不重启,可以调

什么参数或者做什么动作,能加快mysql去清理这个线程。


暂无图片 评论
暂无图片 有用 0
吾念

而且我这只是一个select count(1) from  dddd 这种语句

暂无图片 评论
暂无图片 有用 0
吾念

微信图片_20190922215205.png

暂无图片 评论
暂无图片 有用 0
Cui Hulong

1.大致看了pstack 信息。

应该跟  kill thread 跟 io 出现冲突,都需要抢占 mutex lock 导致的 或 kill thread 碰上bug 了

#0  0x00007f479bb96d12 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0

#1  0x0000000001edf715 in os_event::timed_wait (this=this@entry=0x7f3de8a74c38, abstime=abstime@entry=0x7f3d87aa92e0) at ../../../mysql-8.0.15/storage/innobase/os/os0event.cc:287


#1  0x0000000000e1812b in native_cond_wait (mutex=0x35e98a0 <Per_thread_connection_handler::LOCK_thread_cache>, cond=0x35e9860 <Per_thread_connection_handler::COND_thread_cache>) at ../../mysql-8.0.15/include/thr_cond.h:109


2.参数调整看看

innodb_buffer_pool_size= 总内存 50%~60%

innodb_buffer_pool_instances=8 (按照cpu核数设置,最多16个)

thread_cache_size=64

innodb_io_capacity=400 (机械硬盘300,SSD 2000)

innodb_lru_scan_depth=256

read_rnd_buffer_size = 2M

innodb_flush_method                = O_DIRECT



暂无图片 评论
暂无图片 有用 0
吾念
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏