tidb6.5.11版本更新视图后,没有完整生效,部分查询仍然使用老视图语句

【TiDB 使用环境】生产环境 /测试/ Poc
【TiDB 版本】V6.5.3
【操作系统】CentOS
【部署方式】阿里云ECS上使用K8S部署
【集群数据量】千万级别
【集群节点数】2
【问题复现路径】

  1. 创建一个视图,使用语句CREATE OR REPLACE VIEW isolarerp.ERP_DEP_CODE_PS_MAPPING AS select f1, f2, f3 from ERP_DEP_CODE_PS_MAPPING_old
  2. 使用定时任务构造一张新表ERP_DEP_CODE_PS_MAPPING_new
  3. 更新视图,使用新表CREATE OR REPLACE VIEW isolarerp.ERP_DEP_CODE_PS_MAPPING AS select f1, f2, f3 from ERP_DEP_CODE_PS_MAPPING_new,让业务无需改动SQL的情况下,直接切换到新表查询
    【遇到的问题:问题现象及影响】
    java服务使用ERP_DEP_CODE_PS_MAPPING 视图查询时,报错Table ‘isolarerp.ERP_DEP_CODE_PS_MAPPING_old’ doesn’t exist
    【资源配置】

【复制黏贴 ERROR 报错的日志】
j.sql.SQLException: Schema change caused error: [schema:1146]Table ‘isolarerp.ERP_DEP_CODE_PS_MAPPING_old’ doesn’t exist
【其他附件:截图/日志/监控】


SHOW VIEW isolarerp.ERP_DEP_CODE_PS_MAPPING 看下还是不是old

部分查询?如果是的,说明你更新成功了,看下没成功的应该端连接是不是正确;其次应用重启下试下,清理下缓存

找不到对象的话,看看是不是权限问题

退出重新进下库,在查询试试

重启大法,重启java服务,是不是有缓存

可能是TiDB 视图元数据缓存机制:TiDB 执行 CREATE OR REPLACE VIEW 后,元数据会立即更新,但部分场景(如活跃会话、PD 元数据同步延迟)可能导致短时间内仍读取旧元数据。

只是提示了一个对象不存在啊

TiDB v6.5 及更早版本 中:

视图的依赖变更(如底层表名变化)不会自动使 plan cache 失效

这意味着:

  • 即使你 DROP TABLE ERP_DEP_CODE_PS_MAPPING_old
  • 已缓存的 prepared statement 仍会尝试访问它,
  • 直到 plan cache 被手动清除或连接重建。

官方 issue 参考(类似问题):

该问题在 TiDB v7.0+ 中有改进(通过依赖追踪自动失效 plan cache),但在 v6.5.3 中仍存在。

可能是 TiDB 节点间元数据同步延迟

重启强制 PD 重新协调全局元数据, 重启最简单粗暴了呗

看起来是权限问题