【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
大家遇到过同一个Tidb集群中,不同的tidb-server,执行同一条sql语句,执行计划不一样
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
大家遇到过同一个Tidb集群中,不同的tidb-server,执行同一条sql语句,执行计划不一样
能贴下两个执行计划吗?是分别走到tikv和tiflash了吗?
马上贴出执行计划
1.通过navicat客户端连接10.3.72.95的tidb-server,执行查看相同Sql的执行计划,如下:
2.通过navicat客户端连接10.3.72.94的tidb-server,执行查看相同Sql的执行计划,如下:
show config like ‘%engine%’;
看下两个tidb-server的配置是不是不一样啊,一个配了tiflash,一个没配?
show variables like ‘%tidb_isolation_read_engines%’;
看下
那这个也看下
1、重启下试试
2、 可以通过information_schema.cluster_config对比下参数差异
3、去每个tidb 查询variables_info 对比差异
集群没升级过吧
没升级过,直接安装的v6.5.0版本
已经结案了,我在10.3.72.95的tidb-server上,把5张表都执行了下:
ANALYZE table es_charge_incoming_fee;
ANALYZE table es_charge_incoming_data;
ANALYZE table es_charge_voucher_project_set;
ANALYZE table es_charge_pay_mode;
ANALYZE table es_info_object_and_owner;
执行完成后,再查看2个tidb-server,这次,执行计划一样了。
服务部署资源不一样吧,看两个tidb上加载的表分析健康状态
也就是说不同tidb server的统计信息缓存有差别
统计信息难道是不是存在pd上的,对两个tidb还有区别?
只能怀疑是本来表的统计信息就过期了,然后tidb执行sql用了伪随机数收集了统计信息,然后两个tidb随机出的不一样
统计信息region信息等pd存,但是tidb也得缓存这些数据,否则效率太低了
应该有执行计划缓存吧 类似于Oracle硬解析软件解析 如果统计信息各个节点都需要缓存 那面对一个负载高更新频繁节点多的数据库 这个缓存的更新机制就不太好设计了
执行计划是依赖统计信息的 统计信息不准执行计划就会变
就很奇怪
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。