建立索引客户端不立即返回

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0
  • 【问题描述】:

修改参数建立索引,表大概有200G,建索引大概1个小时,还没有执行完,有没有可以看出并发效率,以及执行进度可视化

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

可以参考下这个帖子:

(1) 为什么我这个在建索引,需要1个多小时才会出现success 后,能再admin show ddl 看到的是已经执行成功的 (2) admin show ddl 中看到 并未返回sucess 的add index 的窗口执行的 正在执行的信息,而且不能看到并发进程的个数

TiDB 在处理 ddl 这边有两个队列,一个是 general 一个 add index 队列,这两个队列是并行的。这边调整的 tidb_ddl_reorg_worker_cnt 只是调整 add index 过程中 write reorg 回填数据的并行 worker 数量。具体关于 tidb online ddl 实现可以看看 sop 系列:

add index 有后台添加索引的命令嘛,

我看文档有一句: 由于添加索引时间跨度较长,发送相关的指令后,会在后台执行,TiDB Server 挂掉不会影响继续执行

执行建索引,我的返回sucess,就是相当于建索引建议完成

正如文档所说,add index 命令正常发出后,会返回到客户端,真正执行添加索引操作是在后台执行的,执行 admin show ddl jobs 可以查看 DDL 队列信息,当 add index 对应的 STATE 为 synced 表示已经创建成功。

如果 DDL 队列中找不到相关记录,检查下 tidb.log 是否 add index 报错日志信息。

我这边4.0 rc版本的,只有在创建索引完全成功后,才会返回sucess 呢,不是在命令正常发出后就返回客户端,所以我才会疑问???

确认了下,这个行为和之前版本是一样的,执行 add index 的命令的客户端会等待创建索引完成成功。

我这边不会立马返回成功呢,要完全建完索引,才会返回成功,建了5个索引,都要1个多小时才能建完,返回sucess同时admin show ddl job 也会建完

你说的不会立马返回成功是符合预期的,刚才确认了下 4.0 以及之前的版本都是这个行为,执行操作的命令返回 sucess,表示建索引完成。