Online DDL: ALGORITHM=INSTANT / INPLACE, LOCK=NONE ve ilerleme takibi
MySQLOnline İşlemlerKomut
-- ALGORITHM/LOCK'u acikca yaz: desteklenmiyorsa ALTER hemen hata verir, sessizce COPY'ye dusmez
ALTER TABLE shop.orders ADD COLUMN status TINYINT NOT NULL DEFAULT 0, ALGORITHM=INSTANT;
ALTER TABLE shop.orders RENAME COLUMN note TO remark, ALGORITHM=INSTANT;
ALTER TABLE shop.orders ADD INDEX ix_status (status), ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE shop.orders MODIFY remark VARCHAR(200), ALGORITHM=INPLACE, LOCK=NONE;
-- INSTANT row version sayaci (64'e ulasinca INSTANT reddedilir, rebuild sifirlar)
SELECT NAME, TOTAL_ROW_VERSIONS FROM information_schema.INNODB_TABLES WHERE NAME = 'shop/orders';
-- Uzun ALTER'in ilerlemesi (instrument'lari bir kez ac)
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_stages_%';
SELECT t.PROCESSLIST_ID, s.EVENT_NAME, s.WORK_COMPLETED, s.WORK_ESTIMATED,
ROUND(100 * s.WORK_COMPLETED / NULLIF(s.WORK_ESTIMATED, 0), 1) AS pct_done
FROM performance_schema.events_stages_current s
JOIN performance_schema.threads t ON t.THREAD_ID = s.THREAD_ID
WHERE s.EVENT_NAME LIKE 'stage/innodb/alter%';Ne yapar?
INSTANT yalnız data dictionary'yi değiştirir, tablo boyutundan bağımsız anında biter. INPLACE + LOCK=NONE tabloyu yerinde işlerken eşzamanlı okuma / yazmaya izin verir. Son sorgu çalışan ALTER'in hangi aşamada ve yüzde kaçta olduğunu gösterir.
Ne zaman kullanılır?
Production tablosunda şema değişikliği öncesi; hangi işlemin kesintisiz yapılabileceğini netleştirmek ve uzun ALTER'in ne zaman biteceğini tahmin etmek için.
Dikkat
INSTANT ve INPLACE de başta ve sonda kısa bir exclusive metadata lock alır; tabloda uzun açık transaction varsa ALTER bekler ve arkasındaki tüm sorgular kuyruğa girer (bkz. metadata lock teşhisi). Oturumda lock_wait_timeout'u düşür (SET SESSION lock_wait_timeout = 5). INPLACE sırasında gelen DML innodb_online_alter_log_max_size kadar log'lanır; aşılırsa ALTER sonunda geri alınır. Kolon tipi değişikliği, charset dönüşümü ve PK değişikliği COPY gerektirir ve yazmaları bloklar; büyük tabloda gh-ost / pt-online-schema-change kullan. Replikada ALTER aynı süre boyunca tek thread'de çalışır; büyük INPLACE ALTER replica lag üretir, INSTANT üretmez.