我们有个比较简单的读sql,单独执行时1s多就能出结果,这个sql并发执行之后得20多s,但是这条sql并发执行的时候数据负载也没有明显升高,有什么办法优化sql执行时长吗
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
这个贴一下
当一个 SQL 在并发执行时,执行时间明显增加,但数据负载并没有明显升高的情况下,可以尝试以下方法来优化 SQL 的执行时长:
-
检查索引:确保表中的相关字段都有适当的索引。索引可以加快查询的速度,减少查询的执行时间。可以使用
EXPLAIN
命令来查看 SQL 的执行计划,确认是否使用了正确的索引。 -
调整并发度:尝试调整并发执行的线程数,可以通过修改数据库的配置参数来实现。适当增加并发度可以提高查询的并发执行能力,减少查询的执行时间。
-
优化 SQL 语句:检查 SQL 语句是否可以进行优化,例如使用更合适的查询方式、避免不必要的子查询、减少数据的扫描范围等。可以通过分析 SQL 的执行计划和查询日志来找到潜在的优化点。
-
数据库参数调优:根据实际情况,适当调整数据库的配置参数,例如调整缓存大小、调整查询优化器的参数等。可以根据数据库的性能指标和监控数据来确定需要调整的参数。
-
数据库版本升级:如果您正在使用的是较旧的数据库版本,可以考虑升级到最新的版本。新版本通常会有性能优化和 bug 修复,可能会改善查询的执行性能。
请注意,优化 SQL 的执行时长是一个综合性的工作,需要结合具体的业务场景和数据库配置来进行调整。建议您根据实际情况进行尝试,并在优化过程中进行性能测试和监控,以确保优化的效果和稳定性。
看看并发执行20夺秒的执行计划和1s的执行计划对比一下,看看区别在哪里
执行计划完全一样的
EXPLAIN ANALYZE 分别 看下,20S的耗时在哪里
完整的执行计划发一下
初步来看,两次12W的回表把read pool搞得压力很大,要考虑下这2个索引的合理性
收集了下统计信息可以了
在dashboard看看有慢sql吗
肯定有啊,这还用问
是执行计划的问题吗
嗯,统计信息不准确,走了错误的执行计划
还是要定期跑一下统计信息的
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。