请问打散表的同时是不是有必需和索引一起打散?
- split index是不是只有热点索引才去split?
- 能不能只split table而不split index
- split index还要区分索引类型,实际是太麻烦和复杂,假如一个组合索引包含数学列和日期列,像这样是什么类型进行split呢?文档真的仅仅只是文档,讲的不全面。
请问打散表的同时是不是有必需和索引一起打散?
不是只热点索引才 split index:冷索引如需均衡分片也能手动 split,热点是最常用场景。
这个当然,我意思是如果热点表split后,索引是不是也要一起split,如果单独split表是不是也是可以的。
TiDB 打散表(如通过 SHARD_ROW_ID_BITS 或 DISTRIBUTE TABLE )仅作用于表数据的 Region 分布,索引会自动随表数据一起打散,无需单独操作。
我的理解是,不管是表,还是索引,都是遇到问题了或场景有热点等的风险再考虑split,如果索引没有热点,就只split表就可以。毕竟split之后region变多也加重pd等的调度。
现在是已经有数据了且创建表的时候没有添加参加。所以现在只能手工打散。
我也是这样认为的,但官方只字不提,官方文档只是空理论,很多不切实际。
当发现索引成为性能瓶颈时,无论是由于热点问题还是其他原因(如索引过大、查询效率低下等),都可以考虑进行索引拆分
无索引热点只需拆分数据表,索引不用手动 split;过多 Region 会加剧 PD 调度开销,按需拆分即可。
TiDB 加索引是异步 DDL,内部通过 Online DDL 的 reorg 阶段渐进式构建。如果表数据量大,reorg 阶段会持续扫描和回填,这个过程中要保证集群有足够的 IOPS 资源。可以用 ADMIN SHOW DDL 监控进度。
Size Split(容量满自动拆):所有索引 Region 写到 96MB 左右强制分裂,不管冷热,冷索引数据膨胀照样自动切 Region;
Load-Base-Split(负载分裂):只针对读写超标热点索引 Region 自动拆分,冷索引无访问不会触发负载分裂
非热点索引随表 split 自动拆分,仅索引单点热点时手动 split index
支持只拆主键、不拆索引:原生分开命令,表和索引 Region 相互独立。
创建个新表,把数据搬过去就行了,看看效果在决定保留哪个
就是浪费点空间,可以的
容量分裂看数据大小,冷热全拆;负载分裂看访问流量,只拆热点。
TiDB 加索引是异步 DDL,内部通过 Online DDL 的 reorg 阶段渐进式构建。如果表数据量大,reorg 阶段会持续扫描和回填,这个过程中要保证集群有足够的 IOPS 资源。可以用 ADMIN SHOW DDL 监控进度。
手工打散
TiDB 中组合索引(含数学列和日期列)的 Region Split 是按索引值的字节序编码后进行 Range 切分的,类型本身不决定分裂方式,而是由索引列的编码顺序和值的字典序决定。
热点表 / 索引可分开手动分裂,索引支持按各类字段切分;集群默认 96MB 自动分 Region,热点索引会负载分裂;大索引 DDL 异步执行,留意 IO 压力。
打散表不是必须同步打散索引,仅当索引存在读写热点时,才需要执行SPLIT INDEX做索引打散,无热点的冷索引无需额外操作。