-
Notifications
You must be signed in to change notification settings - Fork 205
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
Docs: INSTANT
DDL and RANGE PARTITIONING
support for managed schema migrations
#1899
Changes from 11 commits
9f6aa54
e6d43ac
c732d86
edaa628
5e64133
a8451bf
4b9a4cd
b1cac39
1f0f429
be4e02b
256f165
d11d212
42ed757
e28b3ca
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
--- | ||
title: INSTANT DDL migrations | ||
weight: 15 | ||
aliases: ['/docs/user-guides/schema-changes/instant-ddl-migrations/'] | ||
--- | ||
|
||
MySQL's [INSTANT DDL](https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html) is accessible in both unmanaged and managed vitess migrations. | ||
|
||
`INSTANT` DDL refers to `ALTER TABLE ... ALGORITHM=INSTANT` which runs near-instantaneously, though some locking is still witnessed in heavy workloads. It is limited to a subset of operations. The [documentation](https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html) lists the general limitations but does not cover the precise range of scenarios. | ||
|
||
A common naive approach to using `INSTANT` DDL is to optimistically attempt an `ALTER TABLE ... ALGORITHM=INSTANT`, and if that turns to be unsupported by `INSTANT` DDL, resort to standard `ALTER TABLE`. | ||
|
||
## INSTANT DDL in unmanaged schema changes | ||
|
||
A user may thus submit an `ALTER TABLE ... ALGORITHM=INSTANT` migration via `ApplySchema` with `direct` or `mysql` [strategies](../ddl-strategies), or plainly from their VTGate connection. | ||
|
||
## INSTANT DDL in managed schema changes | ||
|
||
With the `vitess` strategy, Vitess always prefers an Online DDL migration, which then allows [revertibility](../revertible-migrations). However, the `--prefer-instant-ddl` DDL strategy flag suggests to Vitess that, where possible, it should use `INSTANT` DDL. | ||
|
||
Vitess can predict whether a schema change is eligible to `INSTANT` DDL based on the existing table schema and the requested change. It is aware of the MySQL limitations (some of which are listed in the documentation) and can devise a plan for each distinct migration. If eligible for `INSTANT` DDL, and if `--prefer-instant-ddl` is specified, Vitess will automatically add `ALGORITHM=INSTANT` to the statement. Otherwise any `ALGORITHM` directive is ignored. | ||
|
||
If chosen to run as `INSTANT` DDL, the migration has no shadow table and is not revertible. | ||
only to actually execute hours later. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This line seems like a leftover. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. removed. |
||
|
||
## Example | ||
|
||
```sql | ||
|
||
mysql> set @@ddl_strategy='vitess --prefer-instant-ddl'; | ||
|
||
-- The migration is tracked, but the ALTER process won't start running. | ||
mysql> alter table corder add column name varchar(32); | ||
+--------------------------------------+ | ||
| uuid | | ||
+--------------------------------------+ | ||
| f0070c6e_abe1_11ef_a809_b27afeff3c85 | | ||
+--------------------------------------+ | ||
``` | ||
|
||
Migrations executed with `--prefer-instant-ddl` are visible on `show vitess_migrations` just like any other migration: | ||
|
||
|
||
```sql | ||
mysql> show vitess_migrations like 'f0070c6e_abe1_11ef_a809_b27afeff3c85' \G | ||
*************************** 1. row *************************** | ||
id: 1 | ||
migration_uuid: f0070c6e_abe1_11ef_a809_b27afeff3c85 | ||
keyspace: commerce | ||
shard: 0 | ||
mysql_schema: vt_commerce | ||
mysql_table: corder | ||
migration_statement: alter table corder add column `name` varchar(32) | ||
strategy: vitess | ||
options: --prefer-instant-ddl | ||
added_timestamp: 2024-11-26 12:33:55 | ||
requested_timestamp: 2024-11-26 12:33:55 | ||
ready_timestamp: NULL | ||
started_timestamp: 2024-11-26 12:33:57 | ||
liveness_timestamp: 2024-11-26 12:33:57 | ||
completed_timestamp: 2024-11-26 12:33:56.652159 | ||
cleanup_timestamp: NULL | ||
migration_status: complete | ||
log_path: | ||
artifacts: | ||
retries: 0 | ||
tablet: zone1-0000000101 | ||
tablet_failure: 0 | ||
progress: 100 | ||
migration_context: vtgate:e1131b44-abe1-11ef-a809-b27afeff3c85 | ||
ddl_action: alter | ||
message: | ||
... | ||
special_plan: {"operation":"instant-ddl"} | ||
``` | ||
|
||
Note the migration has not `artifacts`, and that it is executed with `special_plan: {"operation":"instant-ddl"}`. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. has no There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fixed. |
||
|
||
## PARTITIONING notes | ||
|
||
MySQL partitioning changes sometimes exhibit behaviors similar to `INSTANT` DDL, although partition management really operates on entire hidden tables. | ||
|
||
Vitess specifically addresses the common use case of [`RANGE` partitioned](https://dev.mysql.com/doc/refman/8.0/en/partitioning-management-range-list.html) tables and partition rotation. | ||
|
||
The operation `ALTER TABLE ... ADD PARTITION` creates a new empty hidden table, which implements the new partition. The operation is as fast as `CREATE TABLE`. It is wasteful to run this operation with Online DDL because the existing data is completely unaffected. Vitess always opts to run `ADD PARTITION` directly against MySQL, much like an `INSTANT` DDL, and the operation is not revertible. This behavior is not controlled by any flags. | ||
|
||
The operation `ALTER TABLE ... DROP PARTITION` drops one or more partitions, hence effectively drops one or more tables imlementing those partitions. It would be a logical error to run this operation with Online DDL, because the intended outcome is to drop rows of data, where an Online DDL operation would just copy those rows of data onto the next compatible partition. Vitess thus always opts to run `DROP PARTITION` directly against MySQL, and the operation is not revertible. This behavior is likewise not controlled by any flags. | ||
|
||
Vitess does not offer any special behavior for other types of partitioning schemes and operations. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would remove the
/8.0/
part of the URLs so that we don't need to update them later. That will redirect to the latest GA LTS version page.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done