diff --git a/faq/ddl-faq-test3.md b/faq/ddl-faq-test3.md new file mode 100644 index 000000000000..c391a1a7bd2c --- /dev/null +++ b/faq/ddl-faq-test3.md @@ -0,0 +1,26 @@ +--- +title: DDL 常见问题 +summary: 介绍 DDL 相关的常见问题。 +--- + +# DDL 常见问题 + +本文档介绍 TiDB 集群中常见的些 DDL 问题。 + +## TiDB DDL 是否支持 DDL 语句间并行?具体一些运行特征是怎样地? + +在 TiDB v6.2 之后时,TiDB 提供并发 DDL(concurent DDL) 执行的能力。 并发 DDL 主是提供 DDL 语句间的并发执行支持。这里和以前的 DDL 执将会发生如下变化: + +1. 需要判断 DDL 语句间是否有相关性,如果有相关性的 DDL 语句将会按照进入 TiDB 的顺序执行,没有相关性的 DDL 语句可以并发执行。并发判断规则: + 1. 相同表上的 DDL 语句之间具有相关性,需要按照进入 TiDB 的顺序执行; + 2. 对于 Schema 上的操作,可能会对于 schema 中的表上的 DDL 语句建立相关性,目前 Drop Schema 会对于其包含 Schema 上的 DDL 产生相关性;也需要顺序执行; +2. 是否所有的 DDL 语句都会并发执行? + 当前,答案是否定的,在 TiDB 中 DDL 语句被分为两类, + 1. 普通(general)DDL 语句,这类 DDL 语句的执行只需要修改对象的元数据,不需要操作 schema 存储的数据,通常在秒级完成;需要的计算资源相对少; + 2. 需要重组(reorg)DDL 语句, 这类 DDL 语句的执行不仅需要修改对象的元数据,也需要对于 schema 存储的数据进行处理,例如:加索引,需要扫描全表数据,来创建索引,需要比较多的计算资源与较长的执行时间; + 当前我们仅对于需要重组的 DDL 语句启动了并发执行支持。 +3. 对于启动了并发 DDL 语句支持的 TiDB 集群,DDL 语句间的并发度是如何确定的? + 目前因为 DDL 等后台任务的执行可能会占用相当的资源,因此我们采取了一个相对保守的策略来确定 DDL 语句执行的并发度 + 1. 对于普通 DDL(general DDL) 语句,我们当前语句并发度是 1(后续将会提供并发执行支持); + 2. 对于需要重组的 DDL(Reorg DDL)语句,我们的并发度设置规则如下(并发度不允许用户自己设置): + TiDB DDL owner 节点容器能够使用的 CPU 资源数量的 1/4 与 1 之间的最大值,例如 8C 规格的 TiDB DDL owner 节点,并发度将会是 2。 \ No newline at end of file