Kesintisiz Şema Değişikliği: Canlı Veritabanına Sütun Eklemek

Canlı veritabanında kilitsiz şema değişikliği: genişlet-daralt deseni, dizin ekleme ve uygulama öncesi kontroller. Kesintisiz Şema Değişikliği: Canlı…

Kesintisiz Şema Değişikliği: Canlı Veritabanına Sütun Eklemek
İçindekiler
  1. Neden Kilitleniyor?
  2. Önce Ölçün
  3. Genişlet-Daralt Yöntemi
  4. Sütun Adı Değiştirmek
  5. Dizin Eklemek
  6. Yardımcı Araçlar
  7. Uygulama Öncesi Kontrol Listesi
  8. Sonuç
  9. Sıkça Sorulan Sorular (SSS)
  10. Hangi değişiklikler tehlikeli?
  11. Genişlet-daralt deseni nedir?
  12. Dizin eklerken site kesintiye uğrar mı?
  13. Çoğaltma kullanıyorsam ne değişir?

Kesintisiz Şema Değişikliği: Canlı Veritabanına Sütun Eklemek

Yeni özellik için tabloya bir sütun eklemeniz gerekiyor. Geliştirme ortamında komut bir saniyede bitti. Canlıda aynı komut tabloyu kilitledi ve site on dakika boyunca yanıt vermedi.

Bu yazı, çalışan bir veritabanında şema değişikliğini ele alıyor.

Neden Kilitleniyor?

Şema değişiklikleri farklı maliyetler taşır:

İşlem Tipik maliyet
Boş sütun ekleme Genellikle hızlı
Varsayılan değerli sütun ekleme Sürüme göre değişir
Sütun türü değiştirme Tablo yeniden yazılır
Dizin ekleme Tablo boyutuna bağlı
Sütun silme Genellikle hızlı

Üçüncü satır en pahalı olandır: sütun türü değiştirmek tablonun tamamının yeniden yazılmasını gerektirir ve bu süre boyunca tablo yazmaya kapalı kalır.

Milyonlarca satırlı bir tabloda bu işlem dakikalarca sürer. Geliştirme ortamındaki bin satırlık kopya bu süreyi hiç göstermez.

İkinci satır ise veritabanı sürümüne göre çok değişir. Yeni sürümler varsayılan değerli sütun eklemeyi anında yapabilirken, eski sürümler tabloyu yeniden yazar.

Önce Ölçün

Değişikliği uygulamadan önce bilinmesi gerekenler:

  • Tablo kaç satır?
  • Disk üzerindeki boyutu ne?
  • Bu tabloya yazma sıklığı ne?
  • Veritabanı sürümü bu işlemi nasıl yapıyor?

Üçüncü madde riski belirler: saniyede yüzlerce yazma alan bir tabloyu kilitlemek, kilit süresi kısa olsa bile birikmiş isteklerle sunucuyu boğar.

Az yazma alan bir tabloda aynı işlem fark edilmeden geçebilir.

Dördüncü madde ise en kritik bilgidir ve belgeden okunur. Aynı komut, iki farklı sürümde tamamen farklı davranabilir.

Genişlet-Daralt Yöntemi

Kesintisiz değişikliğin standart deseni şudur:

  1. Genişlet: Yeni yapıyı ekle, eskiyi bırak.
  2. Çift yazma: Uygulama ikisine de yazsın.
  3. Geriye dönük doldur: Eski kayıtları aktar.
  4. Okumayı yeniye çevir.
  5. Daralt: Eski yapıyı kaldır.

Bu desenin gücü, her adımın geri alınabilir olmasıdır: herhangi bir aşamada sorun çıkarsa bir önceki adıma dönebilirsiniz, çünkü eski yapı hâlâ oradadır ve çalışmaktadır.

Tek adımda yapılan bir değişiklikte ise geri dönüş, ikinci bir riskli işlem demektir.

Üçüncü adım büyük tablolarda parça parça yapılmalıdır. Milyonlarca satırı tek bir güncellemeyle doldurmak, tam da kaçınmaya çalıştığınız kilidi üretir.

Beşinci adım aceleye getirilmemelidir. Eski sütunu birkaç gün beklettikten sonra kaldırmak, fark edilmemiş bir bağımlılığı yakalama şansı verir.

Sütun Adı Değiştirmek

En tehlikeli görünen değişiklik aslında en kolay yönetilenidir:

Yaklaşım Sonuç
Doğrudan yeniden adlandırma Eski kod anında kırılır
Yeni sütun ekleyip taşıma Güvenli ama uzun
Görünüm katmanı kullanma Geçiş süresi kazandırır

Birinci satır klasik bir yayına alma kazasıdır: sütun adı değiştiğinde eski uygulama sürümü hâlâ çalışıyorsa, o sürüme gelen her istek hata verir — kademeli yayına alma yapıyorsanız kullanıcıların bir kısmı anında etkilenir.

Bu nedenle adlandırma değişiklikleri de genişlet-daralt deseniyle yapılmalıdır.

Dizin Eklemek

Dizinler özel bir dikkat gerektirir:

  • Eşzamanlı oluşturma seçeneğini kullanın.
  • Düşük trafik saatinde yapın.
  • Gerçekten gerekli mi kontrol edin.
  • Kullanılmayan dizinleri kaldırın.

Birinci madde çoğu veritabanında mevcuttur: eşzamanlı dizin oluşturma seçeneği tabloyu kilitlemeden çalışır — daha uzun sürer ama site kesintiye uğramaz.

Dördüncü madde ise ters yönde bir kazançtır. Her dizin yazma işlemlerini yavaşlatır; kullanılmayan bir dizin saf maliyettir.

Üçüncü madde ise sık atlanır. Mevcut bir dizin sorgunuzu zaten karşılıyor olabilir.

Yardımcı Araçlar

Büyük tablolarda özel araçlar kullanılır:

  1. Gölge tablo oluşturur.
  2. Veriyi parça parça kopyalar.
  3. Değişiklikleri tetikleyiciyle takip eder.
  4. Son anda tabloları değiştirir.

Bu yöntemin avantajı, uzun işlemin tamamının kilitsiz geçmesidir: yalnızca son takas anında çok kısa bir kilit alınır, geri kalan saatlerce süren kopyalama sırasında site normal çalışır.

Dezavantajı ise disk alanı ihtiyacıdır. İşlem sırasında tablonun iki kopyası aynı anda diskte durur.

Bu nedenle işlem öncesi disk alanının en az tablo boyutu kadar boş olduğu doğrulanmalıdır.

Uygulama Öncesi Kontrol Listesi

Kontrol Neden
Yedek alındı mı? Geri dönüş yolu
Benzer boyutta test edildi mi? Süre tahmini
Disk alanı yeterli mi? Çift kopya ihtiyacı
Geri alma planı var mı? Sorun çıkarsa
Kopya sunucular etkilenir mi? Gecikme oluşabilir

Beşinci satır çoğaltma kullananları ilgilendirir ve sıkça sürpriz yapar: uzun süren bir şema değişikliği kopya sunucularda ciddi gecikme yaratır ve okuma trafiğini alan kopyalar güncel olmayan veri döndürmeye başlar.

Bu, "veriyi kaydettim ama görünmüyor" şikayetlerinin nedenidir.

İkinci satır ise en değerli hazırlıktır. Üretim boyutuna yakın bir kopyada test etmeden süre tahmini yapılamaz.

Yeterli disk alanı ve kaynak planlaması için sunucu kapasitenizi önceden gözden geçirmeniz gerekir; VDS sunucu hizmetleri kapsamında disk ve bellek kaynakları ihtiyaca göre yükseltilebilir.

Sonuç

Şema değişikliklerinde asıl tehlike, geliştirme ortamının gerçeği göstermemesidir — sütun türü değiştirmek tablonun tamamının yeniden yazılmasını gerektirir ve bin satırlık bir kopya bu süreyi hiç göstermez. Güvenli yöntem genişlet-daralt desenidir: her adım geri alınabilir çünkü eski yapı hâlâ çalışmaktadır. Sütun adı değiştirirken de aynı deseni kullanın; doğrudan yeniden adlandırma, hâlâ çalışan eski uygulama sürümünü anında kırar. Ve çoğaltma kullanıyorsanız kopya gecikmesini hesaba katın.

Sıkça Sorulan Sorular (SSS)

Hangi değişiklikler tehlikeli?

En pahalısı sütun türü değiştirmektir; tablonun tamamı yeniden yazılır ve bu süre boyunca tablo yazmaya kapalı kalır. Dizin ekleme tablo boyutuna bağlıdır. Boş sütun ekleme ve sütun silme genellikle hızlıdır. Varsayılan değerli sütun ekleme ise veritabanı sürümüne göre çok değişir.

Genişlet-daralt deseni nedir?

Yeni yapıyı ekleyip eskiyi bırakmak, bir süre ikisine de yazmak, eski kayıtları parça parça doldurmak, okumayı yeniye çevirmek ve en son eskiyi kaldırmak. Gücü şudur: her aşamada bir önceki adıma dönebilirsiniz çünkü eski yapı hâlâ çalışmaktadır.

Dizin eklerken site kesintiye uğrar mı?

Eşzamanlı oluşturma seçeneğini kullanırsanız uğramaz. Bu seçenek tabloyu kilitlemeden çalışır; daha uzun sürer ama site normal hizmet verir. Ayrıca eklemeden önce mevcut bir dizinin sorguyu zaten karşılayıp karşılamadığını kontrol edin.

Çoğaltma kullanıyorsam ne değişir?

Uzun süren şema değişiklikleri kopya sunucularda ciddi gecikme yaratır ve okuma trafiğini alan kopyalar güncel olmayan veri döndürmeye başlar. Bu, "veriyi kaydettim ama görünmüyor" şikayetlerinin klasik nedenidir. Değişikliği planlarken bu gecikmeyi hesaba katın.