tidb 慢查询导致堵塞

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】4.x

【问题描述】

HouseDistribution表180万
HouseBasicInfo表140万
单次查询1.6s,都走了索引,没有全表扫描,今日高峰期200用户左右,出现耗时200s导致堵塞,应用程序超时!

当时的慢查询:

慢查询统计到下面的情况:

SQL语句如下:
SELECT h.*,e.AreaId,e.CityId,e.Subway,e.SchoolDistrict,e.Title AS EstateName,e.Image AS CoverImg
FROM HouseBasicInfo h
INNER JOIN Estate e ON h.EstateId=e.Id
WHERE h.EstateId IN (
SELECT EstateID FROM HouseDistribution WHERE DepartmentID = 1991 AND PropertyType = 11774
)
AND h.Status=58 AND h.IsDelete=0 AND h.HouseType=1 AND e.CityId IN (20)
GROUP BY h.CreateTime
ORDER BY h.CreateTime
DESC LIMIT 0,20;

建议查询一下表健康度,出现pseudo时一般时需要重新analyze一下

1 个赞

具体可参考这里
https://docs.pingcap.com/zh/tidb/v4.0/identify-slow-queries#搜索统计信息为-pseudo-的慢查询-sql-语句

1 个赞

好的~我去看看!

1 个赞

麻烦反馈下结果,analyze 后是否恢复,多谢。

1 个赞

analyze后只对查询计划有帮助,能更准确看到计划,根本问题还是优化慢查询,增加节点!

1 个赞

额,查看统计信息是因为执行计划中有 pseudo,所以执行计划可能不是最优。 所以建议先执行统计信息后,看看执行计划能否变快。 就相当于是优化sql了. 可以反馈下执行统计信息后的执行计划。

1 个赞

1、[quote=“Hacker_5icAWmjG, post:1, topic:92813”]
IN (
SELECT EstateID FROM HouseDistribution WHERE DepartmentID = 1991 AND PropertyType = 11774
)
[/quote]
是不是这个条件返回的记录比较多,建议把IN的写法改为EXISTS的方式,性能会有提升;
2、ORDER BY h.CreateTime DESC,这个是降序排序,如果你建索引是建的升序,可能利用索引GROUP BY之后,需要重新进行排序操作。