PolarDB这个慢SQL问题怎么解决?/FORCE_IMCI_NODES/
SELECT /+ SET_VAR(cost_threshold_for_imci=0) / log.id, o
.server_id
, o
.order_id
FROM account_pay_log
log
INNER JOIN v3_order
o
ON o.order_id = log.order_id
INNER JOIN v2_order_time
t
ON t.order_id = log.order_id
WHERE log
.status
IN (1, 2)
AND o
.order_status
IN (4, 5, 6, 20)
AND (log.has_refund < log.money)
AND log
.created_at
BETWEEN 1703433600 AND 1704938608
AND (t
.received_at
< 1704765808)
AND (log
.money_type
= 1)
AND (log
.enable_account
= 1)
AND (log
.id
< '21392532')
ORDER BY log
.id
DESC
LIMIT 100
pc-uf6k66fx7euc06w79
PolarDB慢SQL问题可以通过以下方法解决:
优化查询语句:检查查询语句中的JOIN操作、WHERE条件等,确保它们能够有效地过滤数据。可以使用EXPLAIN命令查看查询的执行计划,以便找到性能瓶颈。
调整参数设置:根据查询需求和硬件资源,调整PolarDB实例的参数设置,例如增加内存、调整并发连接数等。
使用索引:为经常用于查询条件的列创建索引,以提高查询速度。
分区表:将大表按照某个列进行分区,可以降低查询时需要扫描的数据量,提高查询速度。
读写分离:将读操作和写操作分开到不同的数据库实例上,可以提高查询速度。
使用阿里云PolarDB-X:阿里云PolarDB-X是针对OLAP场景优化的高性能数据库,可以满足复杂的数据分析需求。
监控和调优:定期监控PolarDB实例的性能指标,如QPS、延迟等,并根据监控结果进行调优。
试下hint指定走行存执行计划看下执行时间,也有可能是发到列存节点执行了,看着行存的执行计划是没问题的
SELECT /+ SET_VAR(use_imci_engine=0) / log.id, o
.server_id
, o
.order_id
FROM account_pay_log
log
INNER JOIN v3_order
o
ON o.order_id = log.order_id
INNER JOIN v2_order_time
t
ON t.order_id = log.order_id
WHERE log
.status
IN (1, 2)
AND o
.order_status
IN (4, 5, 6, 20)
AND (log.has_refund < log.money)
AND log
.created_at
BETWEEN 1703433600 AND 1704938608
AND (t
.received_at
< 1704765808)
AND (log
.money_type
= 1)
AND (log
.enable_account
= 1)
AND (log
.id
< '21392532')
ORDER BY log
.id
DESC
LIMIT 100;此回答整理自钉群“PolarDB 专家面对面 - 慢SQL索引选择优化器新特性”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。