大佬们求救,慢 SQL 问题

2020-08-03 15:40:22 +08:00
 zzhpeng

问题

描述:订单表,Innodb 存储引擎。排名前几个的慢 sql 语句,有些用了 count(*),弄到 rds 数据库 cpu 满了,服务器 502.

1 、慢 sql 排名图,如下:

2 、排名第一的慢 sql 执行情况:

3 、explain 排名第一的慢 sql:

自我分析:sql 23ms 也正常呀,难道是锁的问题吗?

6685 次点击
所在节点    MySQL
76 条回复
takemeaway
2020-08-03 15:42:16 +08:00
你确定是这一句?
fiypig
2020-08-03 15:44:17 +08:00
explain 看看啊
zzhpeng
2020-08-03 15:59:25 +08:00
@fiypig 第三张图哈,这个平台不支持放大图片,右键可以看清图
lovecy
2020-08-03 16:11:53 +08:00
你这个慢 SQL 排名用的是啥生成的?是读取的慢日志么
索引用的是 idx_storeid_isvirtual,强制指定一个合适的索引试试
wangyanrui
2020-08-03 16:13:58 +08:00
看不到图~
八成没有走索引导致的呗,想办法用上即可
zzhpeng
2020-08-03 16:14:38 +08:00
@lovecy 阿里云的 rds 的监控工具
lsongiu
2020-08-03 16:33:41 +08:00
我咋看截图里的时间单位是 秒? 这么吓人?
JasonLaw
2020-08-03 16:33:59 +08:00
我觉得你的 SQL 语句不太合理。

1. 为什么 LIMIT 1 和 COUNT(*)一起使用?
2. 为什么使用了 COUNT(*),还要进行无谓的 ORDER BY ?
pushback
2020-08-03 16:38:46 +08:00
表结构呢?
moonvstod
2020-08-03 16:38:56 +08:00
看索引
看有没有隐式转换
where 条件里面排除条目最多的条件排最前面
pushback
2020-08-03 16:40:17 +08:00
count(id),where 和 order 后的字段建立联合索引,然后你这 limit 1 ?
JasonLaw
2020-08-03 16:40:47 +08:00
sima_order.is_virtual 是不是只有 0 和 1 两种值?每个值对应的行数是多少?
JasonLaw
2020-08-03 16:49:02 +08:00
如果有人好奇“为什么加了 LIMIT 1,COUNT(*)还可以正常工作的话”,可以看一下 https://stackoverflow.com/questions/17020842/mysql-count-with-limit
zzhpeng
2020-08-03 16:51:38 +08:00
@JasonLaw
1. 为什么 LIMIT 1 和 COUNT(*)一起使用?
回复:框架 orm 自动加上
2. 为什么使用了 COUNT(*),还要进行无谓的 ORDER BY ?
回复:和订单列表数据共用了一个逻辑数据层并且解耦的有问题,但是这个影响我去掉在查通过数据响应时间看,影响不大
RadishWind
2020-08-03 16:54:09 +08:00
看看索引怎么加的
GTim
2020-08-03 16:54:21 +08:00
@lovecy ThinkPHP,看到 tp_count 太眼熟了
egfegdfr
2020-08-03 16:58:51 +08:00
感觉这个 sql 问题不大,就是一个简单查询, 你在确认下是不是找错了,可能是其他 sql 引起的
GTim
2020-08-03 17:00:35 +08:00
@JasonLaw 理解了 Limit 的作用范围就好理解了。如果没有聚合函数,select 是在 order by -> limit 后面执行的,但是有了聚合函数,select 会优于 order by -> limit 执行。

不知道我有没有记错,哎
wangritian
2020-08-03 17:01:05 +08:00
盯上了倒数第三行,扫描行数高一个数量级
Airon
2020-08-03 17:02:03 +08:00
这个 sql 只是执行次数大,rdsCPU100%之后,平均等待时间长。造成 cpu 飙升的应该不是这一句

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX