# [Know Issue] TiDB 执行 DDL hang 且无法 cancel

## Key Words

ddl,cancelling,hang,blocking

## Description

1. 有很多添加索引的操作，添加索引产生排队。
2. 对 t1 表执行添加索引操作，排队等待中。
3. 对 t1 表执行 rename 操作，这个时候也会被 block。
4. cancel t1 表的 rename 和 add index 操作失败，state 处于 cancelling。
5. 接下来所有表的 ddl 都会被 block 直到 t1 表索引操作添加完成。

## Root Cause

1. TiDB 对于每个单独的 DDL 操作可看做一个 job。在一个 DDL 操作开始时，会将此操作分类成两种类型，分别是 general job 和 add index job，并封装成一个 job 存放到 general job queue 或者 add index job queue。等此操作完成时，会将此 job 从对应的 job queue 中删除，并存入 history job queue，便于查看历史 job。但是有个现在同一张表的 DDL 是有先后顺序的，因此当 t1 add index 被 block 后，再对 t1 表进行 rename 操作会堵住 general job queue，导致后续对于其他表的放在  general job queue 的 ddl 操作都被堵住。
2. Cancelling 状态的因为是 DDL 队列是有序的， cancel 队尾的操作需要等前序 ddl 完成才能 kill 成功。

## Diagnostic Steps

N/A

## Resolution

升级到新版本 tidb（[并行 DDL](https://docs-archive.pingcap.com/zh/tidb/v6.2/release-6.2.0)）

## Workaround

1. 等待前序 add index 操作完成，整个 block 情况会解决。
2. kill 最开始 block 队列的 add index 操作（kill 队头的 ddl 操作）。

## Affected Versions

<v6.2
