执行建表语句较慢(且表数量越多越慢)

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本:redhat7.5
  • TiDB 版本:2.1.6
  • 集群节点:3
  • 问题描述(我做了什么): 搭建了多套TiDB集群,发现有个共性问题就是执行建表语句比较慢,一般在1.5-2秒左右,当某个database中表的数量较多时,在该database下建表需要5秒,这个速度在某些场景下会影响业务。 我记得在github上曾经看到过一个类似的issue(大意是描述DDL语句执行比较慢),不知道这个问题是否已经解决。或者是否其他解决方法。 欢迎大伙来交流下~
1赞

之前的版本如果在做 add index 操作,那么 create table 需要排队。现在 create table 和 add index 是两个不同的队列。建议可以升级下 ,例如升级到 2.1.15 版本。 最近我们有修复一个 DDL 相关的问题。 infoschema 更新比较慢的问题,https://github.com/pingcap/tidb/pull/11340

我们为了排除了add index和并发DDL的影响,单独搭建了一个测试集群专门用来测试建表,建表语句为: create table if not exists test_table_xxx(a varchar(40),b varchar(50),c int, d datetime) 并保证同一时间只有一个建表语句,发现随着表数量的上升(目前已经建了1W+),建表时间从800ms上升到2000ms。 想进一步确认以下问题:

  1. 是否建表语句性能会随着表数量变大而下降?,虽然实测发现有这个趋势,但是不知道原理上是否是这样的。
  2. 如果想单纯提升单条DDL语句的执行速度,是否升级2.1.15版本无法起作用
  3. 目前是否有优化单条DDL语句的方法,如调整一些参数
  4. https://github.com/pingcap/tidb/pull/11340, 这个issue是否还没有发布?这个issue提升后的建表性能大概是怎么样的。
  1. 数量比较多的情况下,创建表比较慢,的确是这样。
  2. 升级对 DDL 的执行速度没有改善。
  3. add index 可以尝试通过调整 tidb_ddl_worker_reorg 相关的参数提速。create table 目前没有办法。可以参考 PingCAP 官网的这个测试 https://pingcap.com/docs-cn/dev/benchmark/add-index-with-load/
  4. 没有发布,TiDB 4.0 才会有。