Why we cannot perform an alter table directly to update schema?
How mysql performs alter table:
- Lock the table
- Make a copy of the table
- Modify the copy (the "new table")
- Copy all the rows into the new table
- Swap the old and new table
- Unlock the table
The key issue here is that lock time will be quite long for large table, whick blocks online transaction.
Percona‘s solution:
- pt-online-schema-change tool:
How pt-online-schema-change performs alter table?
- Make a copy of the table
- Modify the copy (the "new table")
- Copy all the rows into the new table (do in small chunks, insert .. select)
- Add triggers to keep track of changes
- Swap the old and new table
Pros:
Remove the Lock/unlock steps, no longer blocking
Replication-Awareness
Load awareness -> chunk size is auto adjusted
Cons:
About 4th slower than alter table directly
Limitation:
Cannot handle foreign key perfectly
xtrabackup
时间: 2024-12-23 04:48:38