Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add description on admin pause ddl jobs and admin resume ddl jobs #13897

Merged
merged 11 commits into from
Jun 26, 2023
2 changes: 2 additions & 0 deletions TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -673,7 +673,9 @@
- [`ADMIN CHECKSUM TABLE`](/sql-statements/sql-statement-admin-checksum-table.md)
- [`ADMIN CHECK [TABLE|INDEX]`](/sql-statements/sql-statement-admin-check-table-index.md)
- [`ADMIN CLEANUP`](/sql-statements/sql-statement-admin-cleanup.md)
- [`ADMIN PAUSE DDL`](/sql-statements/sql-statement-admin-pause-ddl.md)
- [`ADMIN RECOVER INDEX`](/sql-statements/sql-statement-admin-recover.md)
- [`ADMIN RESUME DDL`](/sql-statements/sql-statement-admin-resume-ddl.md)
- [`ADMIN SHOW DDL [JOBS|JOB QUERIES]`](/sql-statements/sql-statement-admin-show-ddl.md)
- [`ADMIN SHOW TELEMETRY`](/sql-statements/sql-statement-admin-show-telemetry.md)
- [`ALTER DATABASE`](/sql-statements/sql-statement-alter-database.md)
Expand Down
8 changes: 8 additions & 0 deletions ddl-introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,14 @@ When TiDB is adding an index, the phase of backfilling data will cause read and

If a completed DDL task is canceled, you can see the `DDL Job:90 not found` error in the `RESULT` column, which means that the task has been removed from the DDL waiting queue.

- `ADMIN PAUSE DDL JOBS job_id [, job_id]`: Used to pause the DDL tasks that are being executed. After the command is executed, the SQL statement that executes the DDL task is displayed as being executed, and the background task is paused. For details, refer to [`ADMIN PAUSE DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md). (Experimental feature)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tasks ----> jobs

We'd better keep the concept identical.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"After the command is executed"
---->
"After the command was executed"

假设语句要用虚拟语气

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"displayed as being executed, and the background task is pause"

---->

"displayed as executing, while the background job has been paused"

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Used to pause the DDL tasks that are being executed."

---->

"Used to pause the DDL tasks that are being executing." 感觉这样要更好些

ran-huang marked this conversation as resolved.
Show resolved Hide resolved

You can pause only DDL tasks that are in progress or still in the queue. Otherwise, the `Job 3 can't be paused now` error is shown in the `RESULT` column.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"only" 感觉放在 "pause" 前面更好些

ran-huang marked this conversation as resolved.
Show resolved Hide resolved

- `ADMIN RESUME DDL JOBS job_id [, job_id]`: Used to resume the DDL tasks that have been paused. After the command is executed, the SQL statement that executes the DDL task is displayed as being executed, and the background task is resumed. For details, refer to [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md). (Experimental feature)

You can only resume a paused DDL task. Otherwise, the `Job 3 can't be resumed` error is shown in the `RESULT` column.

## Common questions

For common questions about DDL execution, see [SQL FAQ - DDL execution](/faq/sql-faq.md#ddl-execution).
16 changes: 14 additions & 2 deletions error-codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -468,12 +468,24 @@ TiDB is compatible with the error codes in MySQL, and in most cases returns the

* Error Number: 8252

The complete error message is as follows:
The complete error message is as follows:

`ERROR 8252 (HY000) : Exceeded resource group quota limitation`

This error is returned when the attempted consumption exceeds the resource group limit. This error is usually caused by a single transaction that is too large or too many concurrent transactions. You need to adjust the transaction size or reduce the number of concurrent clients.

* Error Number: 8260

DDL operations cannot be paused by `ADMIN PAUSE`.

* Error Number: 8261

DDL operations cannot be resumed by `ADMIN RESUME`.

* Error Number: 8262

DDL is paused by `ADMIN PAUSE` and cannot be paused again.

* Error Number: 9001

The complete error message: `ERROR 9001 (HY000): PD Server Timeout`
Expand Down
51 changes: 51 additions & 0 deletions sql-statements/sql-statement-admin-pause-ddl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
title: ADMIN PAUSE DDL
summary: An overview of the usage of ADMIN PAUSE DDL for the TiDB database.
---

# ADMIN PAUSE DDL
Copy link
Collaborator

@hfxsd hfxsd Jun 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

需要统一成 ADMIN PAUSE DDL JOBS 吗?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

ran-huang marked this conversation as resolved.
Show resolved Hide resolved

`ADMIN PAUSE DDL` allows you to pause a running DDL job. The `job_id` can be found by running [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md).

You can use this statement to pause a DDL job that is committed but not yet completed executing. After the pause, the SQL statement that executes the DDL job does not return immediately, but looks like it is still running. If you try to pause a DDL job that has already been completed, you will see the `DDL Job:90 not found` error in the `RESULT` column, which indicates that the job has been removed from the DDL waiting queue.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"committed" seems not correct.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

中文原文中的“已提交”是指已提到后端的意思,刚刚已改为“已发起”

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"If you try to pause a DDL job that has already been completed, you will see the DDL Job:90 not found error in the RESULT column, which indicates that the job has been removed from the DDL waiting queue."

这里用上了虚拟语气,可能需要保持一致

ran-huang marked this conversation as resolved.
Show resolved Hide resolved

ran-huang marked this conversation as resolved.
Show resolved Hide resolved
> **Warning:**
>
> This feature is an experimental feature. It is not recommended that you use it in the production environment. This feature might be changed or removed without prior notice. If you find a bug, you can report an [issue](https://github.com/pingcap/tidb/issues) on GitHub.

## Synopsis

```ebnf+diagram
AdminStmt ::=
'ADMIN' ( 'SHOW' ( 'DDL' ( 'JOBS' Int64Num? WhereClauseOptional | 'JOB' 'QUERIES' NumList )? | TableName 'NEXT_ROW_ID' | 'SLOW' AdminShowSlow ) | 'CHECK' ( 'TABLE' TableNameList | 'INDEX' TableName Identifier ( HandleRange ( ',' HandleRange )* )? ) | 'RECOVER' 'INDEX' TableName Identifier | 'CLEANUP' ( 'INDEX' TableName Identifier | 'TABLE' 'LOCK' TableNameList ) | 'CHECKSUM' 'TABLE' TableNameList | 'CANCEL' 'DDL' 'JOBS' NumList | 'PAUSE' 'DDL' 'JOBS' NumList | 'RESUME' 'DDL' 'JOBS' NumList | 'RELOAD' ( 'EXPR_PUSHDOWN_BLACKLIST' | 'OPT_RULE_BLACKLIST' | 'BINDINGS' ) | 'PLUGINS' ( 'ENABLE' | 'DISABLE' ) PluginNameList | 'REPAIR' 'TABLE' TableName CreateTableStmt | ( 'FLUSH' | 'CAPTURE' | 'EVOLVE' ) 'BINDINGS' )

NumList ::=
Int64Num ( ',' Int64Num )*
```

## Examples

`ADMIN PAUSE DDL JOBS` pauses the currently running DDL job and returns whether the job is paused successfully. The job can be resumed by `ADMIN RESUME DDL JOBS`.

```sql
ADMIN PAUSE DDL JOBS job_id [, job_id] ...;
```

If the pause fails, the specific reason for the failure is displayed.

> **Note:**
>
> + This statement can pause a DDL job, but other operations and environment changes (such as machine restarts and cluster restarts) do not pause DDL jobs except for cluster upgrades.
> + During the cluster upgrade, the ongoing DDL jobs are paused, and the DDL jobs initiated during the upgrade are also paused. After the upgrade, all paused DDL jobs will resume. The pause and resume operations during the upgrade are taken automatically. For details, see [TiDB Smooth Upgrade](/smooth-upgrade-tidb.md).
> + This statement can pause multiple DDL jobs. You can use the [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) statement to obtain the `job_id` of a DDL job.
> + If the job to be paused has already been completed or is about to be completed, the pause operation will fail.

## MySQL compatibility

This statement is a TiDB extension to MySQL syntax.

## See also

* [`ADMIN SHOW DDL [JOBS|QUERIES]`](/sql-statements/sql-statement-admin-show-ddl.md)
* [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md)
* [`ADMIN RESUME DDL`](/sql-statements/sql-statement-admin-resume-ddl.md)
51 changes: 51 additions & 0 deletions sql-statements/sql-statement-admin-resume-ddl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
title: ADMIN RESUME DDL
summary: An overview of the usage of ADMIN RESUME DDL for the TiDB database.
---

# ADMIN RESUME DDL
ran-huang marked this conversation as resolved.
Show resolved Hide resolved

`ADMIN RESUME DDL` allows you to resume a paused DDL job. You can find the `job_id` by running [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md).

You can use this statement to resume a paused DDL job. After the resume is complete, the SQL statement that executes the DDL job continues to show as being executed. If you try to resume a DDL job that has already been completed, you will see the `DDL Job:90 not found` error in the `RESULT` column, which indicates that the job has been removed from the DDL waiting queue.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

complete ----> completed

ran-huang marked this conversation as resolved.
Show resolved Hide resolved

ran-huang marked this conversation as resolved.
Show resolved Hide resolved
> **Warning:**
>
> This feature is an experimental feature. It is not recommended that you use it in the production environment. This feature might be changed or removed without prior notice. If you find a bug, you can report an [issue](https://github.com/pingcap/tidb/issues) on GitHub.

## Synopsis

```ebnf+diagram
AdminStmt ::=
'ADMIN' ( 'SHOW' ( 'DDL' ( 'JOBS' Int64Num? WhereClauseOptional | 'JOB' 'QUERIES' NumList )? | TableName 'NEXT_ROW_ID' | 'SLOW' AdminShowSlow ) | 'CHECK' ( 'TABLE' TableNameList | 'INDEX' TableName Identifier ( HandleRange ( ',' HandleRange )* )? ) | 'RECOVER' 'INDEX' TableName Identifier | 'CLEANUP' ( 'INDEX' TableName Identifier | 'TABLE' 'LOCK' TableNameList ) | 'CHECKSUM' 'TABLE' TableNameList | 'CANCEL' 'DDL' 'JOBS' NumList | 'PAUSE' 'DDL' 'JOBS' NumList | 'RESUME' 'DDL' 'JOBS' NumList | 'RELOAD' ( 'EXPR_PUSHDOWN_BLACKLIST' | 'OPT_RULE_BLACKLIST' | 'BINDINGS' ) | 'PLUGINS' ( 'ENABLE' | 'DISABLE' ) PluginNameList | 'REPAIR' 'TABLE' TableName CreateTableStmt | ( 'FLUSH' | 'CAPTURE' | 'EVOLVE' ) 'BINDINGS' )

NumList ::=
Int64Num ( ',' Int64Num )*
```

## Examples

`ADMIN RESUME DDL JOBS` resumes the currently paused DDL job and returns whether the job is resumed successfully.

```sql
ADMIN RESUME DDL JOBS job_id [, job_id] ...;
```

If the resume fails, the specific reason for the failure is displayed.

> **Note:**
>
> + During the cluster upgrade, the ongoing DDL jobs are paused, and the DDL jobs initiated during the upgrade are also paused. After the upgrade, all paused DDL jobs will resume. The pause and resume operations during the upgrade are taken automatically. For details, see [TiDB Smooth Upgrade](/smooth-upgrade-tidb.md).
> + This statement can resume multiple DDL jobs. You can use the [`ADMIN SHOW DDL JOBS`](/sql-statements/sql-statement-admin-show-ddl.md) statement to obtain the `job_id` of a DDL job.
> + A DDL job in other status (other than `paused`) cannot be resumed and the resume operation will fail.
> + If you try to resume a job more than once, TiDB reports an error `Error Number: 8261`.

## MySQL compatibility

This statement is a TiDB extension to MySQL syntax.

## See also

* [`ADMIN SHOW DDL [JOBS|QUERIES]`](/sql-statements/sql-statement-admin-show-ddl.md)
* [`ADMIN CANCEL DDL`](/sql-statements/sql-statement-admin-cancel-ddl.md)
* [`ADMIN PAUSE DDL`](/sql-statements/sql-statement-admin-pause-ddl.md)
8 changes: 6 additions & 2 deletions sql-statements/sql-statement-admin-show-ddl.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ The `ADMIN SHOW DDL JOBS` statement is used to view all the results in the curre
- `synced`: indicates that the operation has been executed successfully and all TiDB instances have been synchronized to this state.
- `rollback done`: indicates that the operation has failed and the rollback has been completed.
- `rollingback`: indicates that the operation has failed and is rolling back.
- `cancelling`: indicates that the operation is being canceled. This state only appears when you use the `ADMIN CANCEL DDL JOBS` command to cancel the DDL job.
- `cancelling`: indicates that the operation is being canceled. This state only appears when you use the [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) command to cancel the DDL job.
- `paused`: indicates that the operation has been paused. This state only appears when you use the [`ADMIN PAUSED DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) command to pause the DDL job. You can use the [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) command to resume the DDL job.

</CustomContent>

Expand All @@ -93,7 +94,8 @@ The `ADMIN SHOW DDL JOBS` statement is used to view all the results in the curre
- `synced`: indicates that the operation has been executed successfully and all TiDB instances have been synchronized to this state.
- `rollback done`: indicates that the operation has failed and the rollback has been completed.
- `rollingback`: indicates that the operation has failed and is rolling back.
- `cancelling`: indicates that the operation is being canceled. This state only appears when you use the `ADMIN CANCEL DDL JOBS` command to cancel the DDL job.
- `cancelling`: indicates that the operation is being canceled. This state only appears when you use the [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) command to cancel the DDL job.
- `paused`: indicates that the operation has been paused. This state only appears when you use the [`ADMIN PAUSED DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) command to pause the DDL job. You can use the [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) command to resume the DDL job.

</CustomContent>

Expand Down Expand Up @@ -224,3 +226,5 @@ This statement is a TiDB extension to MySQL syntax.
## See also

* [ADMIN CANCEL DDL](/sql-statements/sql-statement-admin-cancel-ddl.md)
* [ADMIN PAUSE DDL](/sql-statements/sql-statement-admin-pause-ddl.md)
* [ADMIN RESUME DDL](/sql-statements/sql-statement-admin-resume-ddl.md)
7 changes: 5 additions & 2 deletions sql-statements/sql-statement-admin.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ This statement is a TiDB extension syntax, used to view the status of TiDB and c

| Statement | Description |
|------------------------------------------------------------------------------------------|-----------------------------|
| [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) | Cancels a currently running DDL jobs. |
| [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) | Cancels the currently running DDL jobs. |
| [`ADMIN PAUSE DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) | Pauses the currently running DDL jobs. |
| [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) | Resumes the paused DDL jobs. |
| [`ADMIN CHECKSUM TABLE`](/sql-statements/sql-statement-admin-checksum-table.md) | Calculates the CRC64 of all rows + indexes of a table. |
| [<code>ADMIN CHECK [TABLE\|INDEX]</code>](/sql-statements/sql-statement-admin-check-table-index.md) | Checks for consistency of a table or index. |
| [<code>ADMIN SHOW DDL [JOBS\|QUERIES]</code>](/sql-statements/sql-statement-admin-show-ddl.md) | Shows details about currently running or recently completed DDL jobs. |
Expand Down Expand Up @@ -245,7 +247,8 @@ ADMIN SHOW DDL JOBS 5 WHERE state != 'synced' AND db_name = 'test';
* `synced`: it indicates that the operation has been performed successfully and all TiDB instances have been synced to this state.
* `rollback done`: it indicates that the operation has failed and has finished rolling back.
* `rollingback`: it indicates that the operation has failed and is rolling back.
* `cancelling`: it indicates that the operation is being cancelled. This state only occurs when you cancel DDL jobs using the `ADMIN CANCEL DDL JOBS` command.
* `cancelling`: it indicates that the operation is being cancelled. This state only occurs when you cancel DDL jobs using the [`ADMIN CANCEL DDL JOBS`](/sql-statements/sql-statement-admin-cancel-ddl.md) command.
* `paused`: it indicates that the operation has been paused. This state only appears when you use the [`ADMIN PAUSED DDL JOBS`](/sql-statements/sql-statement-admin-pause-ddl.md) command to pause the DDL job. You can use the [`ADMIN RESUME DDL JOBS`](/sql-statements/sql-statement-admin-resume-ddl.md) command to resume the DDL job.

## MySQL compatibility

Expand Down