patternMinor
Does ALTER TABLE - ADD COLUMN lock the table?
Viewed 0 times
thecolumndoesaltertableaddlock
Problem
I have a question about the
On a Amazon RDS instance with MariaDB v10.2, I've noticed that
Shouldn't any DML statement that performs a write be queued until the
I'm posting this question because I've been asked to perform some test to verify whether it is possible to run
EDIT: Apparently this evaluation was too pessimistic. I've been doing several tests with
(It is probably worth of note that there is an Instant
ALTER TABLE ... ADD COLUMN DDL statement. On a Amazon RDS instance with MariaDB v10.2, I've noticed that
INSERT statements complete and the rows are correctly inserted in the table (as verified via SELECT) before an ALTER TABLE ... ADD COLUMN on the table finishes.Shouldn't any DML statement that performs a write be queued until the
ALTER TABLE operation finishes?I'm posting this question because I've been asked to perform some test to verify whether it is possible to run
ALTER TABLE ... ADD COLUMN on a live Production database in business hours, on a heavily-used database, on tables with several million rows -- which I find very ill-advised. Even if ALTER TABLE does not place a lock on the table, it will have to wait until any connection is not using the table anymore (due to the connection placing a metadata lock), which may happen much much later.EDIT: Apparently this evaluation was too pessimistic. I've been doing several tests with
mysqlslap performing heavy operations on the table (INSERT, UPDATE, DELETE statements, and SELECT statements with LIKE to avoid using indexes) on 150 simulated concurrent connections while ALTER TABLE ... ADD COLUMN runs; profiling shows metadata locks but with short waiting times (1 sec each), and table alteration completes in around 30 minutes, compared to 10 minutes with no SQL statements running. While this is satisfying, on the other hand I'd like to know whether it is safe to assume that DDL statements are non-blocking.(It is probably worth of note that there is an Instant
ADD COLUMN feature on InnoDB, which allows instant addition of a column to the table (under specific constraints), but it is not available before v10.3.2.)Solution
it actually depends on the specific alter table, but in any case I would suggest looking into online schema change tools like ghost (from GitHub) or pt-online-schema-change (by percona).
Both tools do the change on a separate table and switch with the original at the end - you can even keep the old one for fast rollback.
It’s a much safer route especially for heavy loaded tables
Both tools do the change on a separate table and switch with the original at the end - you can even keep the old one for fast rollback.
It’s a much safer route especially for heavy loaded tables
Context
StackExchange Database Administrators Q#211346, answer score: 4
Revisions (0)
No revisions yet.