前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pt-kill 查询中包含中文字符 导致工具失效的排查

pt-kill 查询中包含中文字符 导致工具失效的排查

作者头像
保持热爱奔赴山海
发布2022-07-28 09:19:58
3240
发布2022-07-28 09:19:58
举报
文章被收录于专栏:饮水机管理员饮水机管理员

生产环境遇到几个YearningSQL平台触发的慢查询(该sql产生的笛卡尔积太大,出不来结果,研发在前端界面再次触发查询),最终把数据库的CPU拖高的情况。

DBA紧急介入后,根据mysql服务器上show full processlist抓取到相关sql,执行时间已经超过120s。先记录下现场,然后kill掉相关query。

query类似如下:

代码语言:javascript
复制
select 
aa AS A列,
bb as B列
FROM sbtest.sbtest1
where aa = 'abcdefg'
order by update_time desc
LIMIT 100;

对比了下后台操作日志,确认这就是研发同学在YearningSQL查询界面多次提交的query。

但是,我们几个月前就上线了pt-kill 定时任务,针对于YearningSQL平台的用户查询做了60秒的查询超时熔断。理论上即便出现这类慢sql也不会执行时间过长。

查了下pt-kill 的最近日志,发现里面有一些提示:

Wide character in print at pt-kill line 7373

翻下对应的代码段,如下部分:

pt-kill 查询中包含中文字符 导致工具失效的排查_pt-kill
pt-kill 查询中包含中文字符 导致工具失效的排查_pt-kill

根据上面的sql,基本可以判断是perl脚本执行过程中遇到中文字符处理失败导致的。

找到了原因,解决方法也很简单:

代码语言:javascript
复制
在pt-kill的文件头部,加2行代码:

use utf8;
use open ":encoding(utf8)",":std";

另外对于一些复杂的查询,有些建议给到研发同学:

1、执行前建议先explain自行评估下

2、查询中,可以显式定义60秒超时时间,例如 SELECT /*+ MAX_EXECUTION_TIME(60000) */ * FROM t1 INNER JOIN t2 WHERE ... 【5.7及以上版本生效】

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档