Genel
MySQL Alter Table
MySQL veri tabanlarında, özellikle büyük tablolarla uğraşırken, yapısal değişiklikler bazen DBA’ların başını ağrıtabilir. Bu yazımızda ALTER TABLE işlemleri sırasında oluşabilecek sorunları, nedenlerini ve çözümlerini inceleyeceğiz.
MySQL’de ALTER TABLE ifadesi, mevcut bir tablonun yapısını değiştirmeye olanak tanır.
ALGORITHM ifadesi, MySQL’in değişikliği nasıl gerçekleştireceğini belirtir. ALGORITHM için üç olası değer vardır:
ALGORITHM = INPLACE
Tablonun bir kopyasını oluşturmadan, değişikliği mevcut veri dosyası üzerinde gerçekleştirir.
Kullanım alanları:
Index ekleme veya düşürme, kolon adı değiştirme, kolon veri tiplerini değiştirme, partition tablolara yeni partition ekleme veya düşürme, partition COALESCE veya REORGANIZE işlemleri.
Performans:
Tablonun kopyasını oluşturmadığı için daha hızlıdır ve ekstra disk alanı gerektirmez; bu durum büyük tablolar için büyük avantaj sağlar. Ayrıca, ikinci bir tablo kopyası yazılmadığı için DML işlemleri (INSERT, UPDATE, DELETE) süreç boyunca devam edebilir.
Ancak INPLACE işlemleri sırasında oluşabilecek çökme durumları dosya bozulmasına sebep olabilir, bu risk göz ardı edilmemelidir.
Örnek:
ALGORITHM = COPY
Bu algoritma, tablonun geçici bir kopyasını oluşturur ve değişiklikleri o kopya üzerinde uygular. Bu süre boyunca tablo üzerinde DML işlemleri yapılamaz.
İşlem tamamlandığında, MySQL orijinal tabloyu değiştirilmiş kopya ile değiştirir ve eski tabloyu siler.
Bu yöntem, daha uzun ve karmaşık işlemler için tercih edilir; örneğin primary key değişiklikleri, STORED kolon eklemek veya kolon sırasını değiştirmek gibi tablonun tamamen yeniden yazılması gereken durumlar.
Tablonun bir kopyası yazıldığı için işlem daha uzun sürer ve tablo boyutu kadar ekstra disk alanı kullanır.
Ancak orijinal tablo, işlem tamamlanana kadar değişmediği için çökme durumlarında daha güvenlidir.
Örnek:
Büyük tablolar için COPY algoritması ile ALTER işlemleri yavaş olabilir.
Kesintinin tolere edilemeyeceği sistemlerde, pt-online-schema-change kullanılması önerilir.
ALGORITHM = DEFAULT
Bu seçenek, MySQL’in kendisi için en uygun algoritmayı (INPLACE veya COPY) seçmesini sağlar.
Hangi algoritmayı kullanacağınızdan emin değilseniz, seçimi MySQL’e bırakmak genellikle daha güvenli bir tercihtir.






