tidb-一场select in百万参数引发的血案

一、背景

最近的tidb突然出现了写入极慢的原因,这时候就要排查下为什么了,我们一步步看看解决的方法

二、排查

整体写入慢的排查思路可以看下官网

1.解决中

我们按照排查步骤一步步排查,最重要的监控就是查看raft io了,这里可以看到commit的耗时严重异常

tikv details -> raft io -> commit log duration

那么这个耗时为什么会这么长,这就需要排查慢日志了,慢日志的排插,排查出一些写入的sql后我们发现了下面这条主要的sql

bash 复制代码
select a,b,c from table_a where info="456" and info_id in (123,45,6,3453,4534,....,sdfs) group by abc

这个问题的重点是in里面有上百万个参数,而这个大的慢sql又导致了执行计划超过1G,这个慢查询写入到日志里就会占用大量的磁盘性能,调用查看慢查询的时候也会占用大量磁盘的性能,而tidb和tikv也有一台机器进行了混步,整体的raft log同步也会变得较慢

2.解决后

现在我们看看将这条sql优化后的情况,可以看到commit log的耗时已经变得非常低了,这时候我们的写入也变得正常了

三、总结

当然,中间的排查结果并不是这么顺利的,调整了很多参数,都没有太起作用,最后才定位到这个慢sql,主要是没有想到这个慢sql的执行计划这么大,造成了如此大的影响

相关推荐
毕设源码-钟学长1 分钟前
【开题答辩全过程】以 基于Java的医药进出口交易系统设计与实现为例,包含答辩的问题和答案
java·开发语言
Touch&2 分钟前
Windows11多个JDK版本(Java8、Java11、Java17、Java21)下载安装和切换
java·jdk·jdk多个版本切换
清水白石0085 分钟前
Python 性能优化全景解析:当 Big O 骗了你——深挖常数开销、内存与解释器黑盒
开发语言·python·性能优化
oi..9 分钟前
python Get/Post请求练习
开发语言·经验分享·笔记·python·程序人生·安全·网络安全
星夜夏空9911 分钟前
C语言进阶项目——搭建内存池
c语言·开发语言
帮我吧智能服务平台11 分钟前
装备制造企业售后服务数字化:从成本中心到利润中心背景
java·前端·制造
历程里程碑12 分钟前
Proto3 三大高级类型:Any、Oneof、Map 灵活解决复杂业务场景
java·大数据·开发语言·数据结构·elasticsearch·链表·搜索引擎
蜜獾云13 分钟前
DDD 架构分层,MQ消息要放到那一层处理?
java·jvm·架构
夫礼者16 分钟前
【极简监控】核弹级排障利器:仿 Jenkins Script Console 打造免重启诊断“黑科技”
java·jenkins·监控·排错
小杍随笔18 分钟前
【Rust Exercism 练习详解:Anagram + Space Age + Sublist(附完整代码与深度解读)】
开发语言·rust·c#