Skip to main content

Command Palette

Search for a command to run...

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

Published
2 min read
S

I’m a passionate software engineer specializing in SQL change management, database security, and DevOps automation. With over 17 years of experience in the banking sector, I focus on building tools and processes that make database deployments safer, more auditable, and automated.

As the creator of SQL Change Guard, I develop solutions that use risk scoring and AI-powered code analysis to detect dangerous SQL scripts before they reach production. I’m dedicated to helping teams minimize downtime and data loss through smarter change governance.

When I’m not coding, I enjoy sharing insights about secure development practices, WPF desktop applications, and integrating modern CI/CD pipelines.

Feel free to connect or reach out at info@sqlchangeguard.com

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

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

More from this blog

S

SQL Change Guard

81 posts