深圳小强
(ZGY)
1
一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题
【TiDB使用环境】生产环境
【TiDB版本】v8.5.7
【部署方式】物理机部署
【操作系统/CPU架构/芯片详情】CentOS7.9x86_64
【机器部署详情】TiKV节点:64核/12G/SASSSD
【集群数据量】待迁移大表约500GB
【集群节点数】TiDB×4,PD×3,TiKV×8,TiFlash×3
问题描述
原有Oracle大表采用Range分区,迁移到TiDB后未做特殊适配,业务等值、范围查询耗时相比Oracle上涨明显。已确认索引同步完整,数据迁移校验无丢失。
疑问
1.Oracle分区表迁移TiDB,二者分区/数据分布机制差异会对性能带来哪些影响?
2.针对这类迁移场景,有哪些低成本、可落地的优化手段?
期待建议
希望提供排查步骤、建表适配方案、参数或者索引优化建议。
kang
2
从你的描述看,索引和数据都没问题,那性能衰减大概率出在分区策略和TiDB的数据分布上。Oracle的Range分区是按值裁剪,TiDB的Range分区虽然语法兼容,但实际存储是打散的,分区裁剪效果有限。
建议先跑下EXPLAIN ANALYZE看下执行计划,重点看TableFullScan还是IndexLookUp,以及Region数量。如果扫描的Region太多,说明数据分布不理想。
Oracle 分区裁剪和 TiDB 的 Region 分布不是一回事,原样迁过来范围扫容易变宽。用 EXPLAIN ANALYZE 看是否扫了过多 Region,核对分区键是否出现在查询里。可补分区/索引、改写范围条件,或把分析查询丢 TiFlash。机器内存 12G 对 500GB 表也偏紧,先确认 TiKV 没在换页。
xfworld
(魔幻之翼)
4
适应性的问题,还是需要根据场景针对获取数据的方式做一些调整的,毕竟是两个完全不同的数据库产品,产品特点和特性上还是有差距的。
可以比对执行计划,看看 AI 能否给一些建设性的建议。(最好将实际的执行计划和结果也一并提交)