关于DDL的相关问题

执行完的ddl job会放到tidb_ddl_history中,这个表里面的数据什么时候会被清理呢?有内部开发人员可以解答下吗,谢谢

沙发一下,期待官方给予解答

应该不会自动删除

不会。

目前 tidb_ddl_history 中的记录还没有删除机制。

那不是会越来越多,占据磁盘空间

的确,101课程及官方文档,都没有提过。需要官方解释一下

你说的tidb_ddl_history 是mysql库里的表。这是持久化的数据,一般不会主动删除这里的数据的。队列的ddl历史肯定有删除机制,比如持久化后…具体实现需要深究。

Job : 每个单独的 DDL 操作可看做一个 job。在一个 DDL 操作开始时,会将此操作封装成一个 job 并存放到 job queue,等此操作完成时,会将此 job 从 job queue 删除,并在存入 history job queue,便于查看历史 job。
Worker :每个节点都有一个 worker 用来处理 job。
Owner :整个系统只有一个节点的 worker 能当选 owner 角色,每个节点都可能当选这个角色,当选 owner 后 worker 才有处理 job 的权利。owner 这个角色是有任期的,owner 的信息会存储在 KV 层中。worker定期获取 KV 层中的 owner 信息,如果其中 ownerID 为空,或者当前的 owner 超过了任期,则 worker 可以尝试更新 KV 层中的 owner 信息(设置 ownerID 为自身的 workerID),如果更新成功,则该 worker 成为 owner。在租期内这个用来确保整个系统同一时间只有一个节点在处理 schema 变更。

不会自动删

对啊 不符合逻辑

我理解应该会自动删

你说的job queue是server层的还是也会持久化在kv上,我看代码里job执行完会往tidb_ddl_history中插入

看起来不清理 :thinking:

不会自动删

强烈建议可以删除,或有自动清理策略。

不会删除

ddl会有很多吗,这么复杂的业务场景