【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.1.0
简单的一个聚合查询,可以命中索引,但是查询时间超过1分钟,检查GC设置的是24h。
可见副本过多会导致查询慢么?
select aa,sum(c_amount) from table
where c_date > '2023-05-01'
and c_date < '2023-07-01'
group by aa
order by aa
limit 10
【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.1.0
简单的一个聚合查询,可以命中索引,但是查询时间超过1分钟,检查GC设置的是24h。
可见副本过多会导致查询慢么?
select aa,sum(c_amount) from table
where c_date > '2023-05-01'
and c_date < '2023-07-01'
group by aa
order by aa
limit 10
会,从一大串数据中去读取的时候,需要 skip,会减慢get 的速度
有需要的话,可以手动释放版本
还发现一个问题,为什么hashagg了两次 ![]()
一次 tikv,一次 tidb
每个tikv 节点 group by 拿到分组结果后,汇总到 tidb 在分组排序…
这样才能保证拿到正确的结果… (毕竟数据是分散在各个 tikv 上的,不能一次性完成分组汇总)
那为什么IndexRangeScan一遍,又TableRowIDScan了一遍?
当然会慢了,tidb的mvcc把历史数据和当前数据放一起了
有影响的。
TableRangeScan:带有范围的表数据扫描.
TableRowIDScan:根据上层传递下来的 RowID 扫描表数据。时常在索引读操作后检索符合条件的行。
具体来说就是通过c_date 列上的索引查到具体的rowid,然后,回表通过rowid查数据
1300万数据量加没有gc的数据快不了
回表了
强制用了一下TiFlash,1分钟变7秒,看来还是得强制用TiFlash啊
第一次是group by 第二次是limit。hashagg之后立刻topn这就是limit。
收到,已经决定用tiflash了
如何手动释放版本呢?
逻辑上数据被删除了,这个操作得有
然后通过手动控制 tikv 的 GC 来实现释放
参考文档:
https://docs.pingcap.com/zh/tidb/stable/tikv-control#手动-compact-单个-tikv-的数据
get~ ![]()
![]()
date和aa有组合索引?
没有,只有c_date有索引
尝试组合索引
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。