并发建表例子

【 TiDB 使用环境】测试
【 TiDB 版本】
【复现路径】
分库分表创建需要建1024*30张表,发现效率很低
【遇到的问题:问题现象及影响】
参考了官方文档,说
“为了更快地建表,推荐通过并发发送多个 DDL 请求以达到最快建表速度。如果串行地发送 DDL 请求,并且没有发给 Owner 节点,则建表速度会很慢。”
请问哪位大佬有具体的例子?

升级到8.1版本,有ddl建表优化

写个脚本,比如python之类的多线程并发建表

1 个赞

tidb建表是串行的,并发不了

并发不了,但是可以并发请求放到执行队列里,这样会快

多个连接 不同的tidb实例 发送ddl,服务器性能不是问题。估计也不是一时半会创建好。

DDL执行就是队列串行的

也要适当调整并发度以避免过度负载

和运行主机的性能有没有关系呢,可以看下

既然是分库分表,表结构都是一样的吧,那么create table a like b是不是比较快点

升级8版本,有针对优化

串行执行的,建议升级8

DDL执行就是队列串行的

DDL 是队列呀 快不了吧

MySQL8.0版本,推出了INSTANT方式,只修改MetaData,不影响表数据,所以执行效率跟表大小几乎没有关系
全称叫“在线DDL之 快速增加列”(秒级别的),并不会造成业务抖动。该功能自 MySQL 8.0.12 版本引入,是由腾讯游戏DBA团队贡献,我国程序员还是挺厉害的 :call_me_hand: :call_me_hand: :call_me_hand:
参考 Functionality Added or Changed
InnoDB now supports ALGORITHM=INSTANT for the following ALTER TABLE operations:

  • Adding a column. This feature is referred to as “Instant ADD COLUMN”.
  • Adding or dropping a virtual column.
  • Adding or dropping a column default value.
  • Modifying the definition of an ENUM or SET column.
  • Changing the index type.
  • Renaming a table.
    https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html
    但是目前好像只支持ADD COLUMN和Renaming a table

感谢各位指导。我感觉原文的含义是先把所有建表DDL都先发送到队列里面统一等待,而不是串行的发送create table的DDL,得到成功后再发送。
实际上这里没有考虑这些建表语句可能存在依赖关系,譬如我创建b表的前提是a表创建成功了。

应该没问题吧

这种的只能业务上去控制吧,数据库应该控制不了。

建表串行,试试新版本的TiDB