# SQL Server'da Büyük Veri Değişiklikleri: Milyonlarca Satırı Güvenli Güncelleme

Milyonlarca satırı güncellemek gerekiyor. Tek bir UPDATE ile mi yapmalısınız? Kesinlikle hayır.

* * *

## Neden Tek Seferde Büyük UPDATE Riskli?

**Transaction log şişmesi**

Tek bir büyük UPDATE tüm satırları tek transaction içinde günceller. Her satır değişikliği transaction log'a yazılır. Milyonlarca satır için bu log'u inanılmaz şişirebilir. Disk dolabilir, sistem yavaşlayabilir.

**Uzun süreli kilit**

Büyük UPDATE tabloyu uzun süre kilitler. Bu süreçte aynı tabloya erişmeye çalışan sorgular bekler. Production'da bu dakikalar sürebilir.

**Rollback zorluğu**

Bir hata oluştu, geri alınması gerekiyor. Milyonlarca satır güncellendiyse rollback aynı süreyi alır, hatta daha uzun sürebilir.

**Timeout riski**

Uygulama katmanında ya da bağlantı düzeyinde timeout ayarları varsa büyük UPDATE yarıda kesilebilir. Kısmen güncellenmiş tablo tutarsız durumda kalır.

* * *

## Batch Update Yaklaşımı

Büyük güncellemeleri küçük parçalara bölmek hem güvenli hem de kontrol edilebilir.

sql

```sql
DECLARE @BatchSize INT = 10000;
DECLARE @UpdatedRows INT = 1;
DECLARE @TotalUpdated INT = 0;

WHILE @UpdatedRows > 0
BEGIN
    UPDATE TOP (@BatchSize) Siparisler
    SET Durum = 'Arsivlendi'
    WHERE Durum = 'Tamamlandi'
        AND TamamlanmaTarihi < '2023-01-01';

    SET @UpdatedRows = @@ROWCOUNT;
    SET @TotalUpdated = @TotalUpdated + @UpdatedRows;

    -- Her batch arasında kısa bekleme
    -- Sisteme nefes aldırır
    WAITFOR DELAY '00:00:01';

    PRINT 'Güncellenen toplam satır: ' + CAST(@TotalUpdated AS VARCHAR);
END

PRINT 'İşlem tamamlandı. Toplam: ' + CAST(@TotalUpdated AS VARCHAR) + ' satır güncellendi.';
```

Bu yaklaşımla her 10.000 satır ayrı bir transaction. Log yönetilebilir boyutta kalır, kilitler kısa süreli, iptal edilirse sadece son batch geri alınır.

* * *

## Büyük Veri Değişikliklerinde Değişiklik Yönetimi

Büyük veri değişiklikleri standart deployment'lardan farklı değerlendirme gerektirir.

**Etki analizi zorunlu:** Kaç satır etkilenecek? Hangi tablolar? Bağımlı process'ler var mı?

**Zaman planlaması kritik:** Milyonlarca satır güncelleme kaç batch alır, her batch ne kadar sürer? Deployment penceresi yeterli mi?

**Geri alma planı net olmalı:** Bir sorun çıkarsa nasıl geri dönülecek? Backup alındı mı?

**Ekibe bilgi verilmeli:** Uzun süren bir operasyon sistemde yavaşlığa yol açabilir. İlgili ekipler önceden haberdar edilmeli.

* * *

## Sonuç

Büyük veri değişiklikleri değişiklik yönetiminin en kritik senaryolarından biri. Batch yaklaşımı ve kapsamlı hazırlık bu operasyonları kontrol altında tutar.

Detaylı bilgi için: [sqlchangeguard.com](http://sqlchangeguard.com)
