50亿+的表添加索引,大家有做过的没

大家好,线上一个50亿的表添加二级索引用来优化查询,大家有实施过的没,有什么注意的点嘛

加过,admin show ddl jobs预估下总时长,注意关注duration是否有大幅波动以及对业务的影响

https://docs.pingcap.com/zh/tidb/stable/tidb-distributed-execution-framework/

当时大概加了多久

尽量在业务限时处理吧可以用ADMIN SHOW DDL或者ADMIN SHOW DDL JOBS;查看进度,必要时ADMIN PAUSE DDL;暂停或者取消

对集群的影响
1)TiKV CPU 升高

因为:

Scan Table
Encode Index Key
Write RocksDB

会导致:

tikv cpu ↑

尤其是:

coprocessor
raftstore
2)IO 升高

写入:

index key

进入:

rocksdb
raft log

磁盘压力会明显增加。

3)Region 调度增加

因为:

大量写入

可能触发:

split
balance

PD 调度会增加。

4)业务 SQL 变慢

原因:

资源竞争

尤其是:

OLAP
join
大查询

会明显感知。

2 个赞

可以使用方案:

分区 + 索引

或者:

影子表

方案:

新建表
create table new_big like big_big;
加索引
add index
同步

用:

TiCDC

同步数据。

最后:

rename table

切换。

这是 零影响方案。

2 个赞

只有在数据量大的时候,才能监测出性能

  • 50 亿表 TiDB 加索引完全安全,核心是限速 + 低峰 + 单索引
  • 必做:测试验证、集群巡检、限流参数、低峰执行
  • 全程监控,出现负载过高直接暂停 DDL
  • 完成后必须验证索引生效 + 业务监控

具体记不得了,肯定是超过10小时了

老板,索引加好了没?花了多长时间。期间性能波动怎么样

添加的结果怎么样啊,最后,耗时多久,资源情况怎么样呢

  • 不要直接执行 CREATE INDEX 默认配置下,加索引会抢占大量 CPU/IO/ 网络,直接打崩业务。
  • 不要在业务高峰期执行 哪怕限流,也必须选低峰期 / 凌晨开始。
  • 不要同时加多个索引 50 亿表一次只加一个,多个会导致资源翻倍耗尽。
  • 不要忽略集群负载 加索引前必须确认:集群无慢查询、无热点、无备份 / 导出任务。

没有,这个成本和风险都很高啊

索引呢

1 个赞

学习了

测试环境跑下就知道效果。

在 v6 版本做过百亿表的加索引,做了一周多,你这个已经 v8.5 版本了,开 dxf 问题不大,慢慢搞,有问题就暂停 DDL

加过,两天吧,尽量选择业务低峰期加

最后怎么搞的,是避开高峰期添加的吗