暂无图片
TDSQL 分布式数据库不支持call 存储过程
我来答
分享
Amy_liu923
2024-05-28
TDSQL 分布式数据库不支持call 存储过程

TDSQL 分布式数据库,我需要建3万张单表用于测试,表复制information_schema.tables即可。 我创建了存储过程,用于批量建表。 但是 proxy 不支持call 存储过程。 于是我我用透传到第一个分片的方式,/*sets: 第一个分片ID*/ call createtable(); 这样存储过程调用成功了,表也都创建了。但是问题也来了,只能用/*sets :第一个分片id*/ select * from table_name; 才能查到。如果 直接查select * from table_name;  新建的表提示不存在,查不到。 /*proxy*/ show table without shardkey  也查不到这些表。  各位老师,这个如何解决,谢谢。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
吾亦可往

以下是一些可能的解决思路:


  1. 检查路由配置:确保分布式数据库的路由规则设置正确,可能需要重新审视和调整分片策略以及相关配置,以确保能正确路由到所有创建的表。
  2. 确认存储过程的执行范围:虽然通过特定分片调用成功了,但要确认是否所有分片都正确执行了建表操作,可能需要进一步排查存储过程在各个分片上的执行情况。
  3. 数据同步问题:考虑是否存在数据同步延迟或不一致的情况,检查数据库的数据同步机制是否正常工作。
  4. 与数据库技术支持沟通:联系 TDSQL 的技术支持团队,详细描述遇到的问题,获取他们专业的建议和解决方案。
  5. 重新设计建表方式:也许当前的建表方式存在一些局限性,可以考虑其他更合适的建表策略或方法,避免出现这种不一致的情况。
暂无图片 评论
暂无图片 有用 1
lianR

这个问题的原因在于,你通过存储过程在一个分片上创建了大量的表,但是这些表的元数据并没有同步到TDSQL的元数据管理模块,因此在其他分片上是无法查询到这些表的。

解决这个问题的方法有两种:
1.  通过TDSQL的API或者管理控制台手动同步元数据。这种方法比较简单,但是需要手动操作,如果表的数量非常大,可能会比较麻烦。
2.  修改你的存储过程,让它在每个分片上都创建表。这种方法比较复杂,需要你对存储过程进行修改,但是可以避免手动同步元数据的麻烦。

总的来说,如果你只是为了测试而创建大量的表,我建议你使用第一种方法,因为它更简单。如果你在生产环境中需要创建大量的表,我建议你使用第二种方法,因为它可以避免手动同步元数据的麻烦。

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏