İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • Geliştirici Araçları
  • Microsoft.Data.SqlClient ile Yerleşik Yeniden Deneme Mantığı
Bulut Altyapı Geliştirici Araçları Microsoft.Data.SqlClient, Polly, Retry Logic, SQL Server, Transient Hatalar Aşkın KILIÇ 29/08/2026 3 Yorumlar

Microsoft.Data.SqlClient ile Yerleşik Yeniden Deneme Mantığı

Microsoft.Data.SqlClient ile Yerleşik Yeniden Deneme Mantığı
📑 İçindekiler
  1. System.Data.SqlClient'tan Microsoft.Data.SqlClient'a geçiş
  2. Configurable Retry Logic nedir?
  3. Öne çıkan yetenekler
  4. Temel kullanım
  5. Polly ile karşılaştırma
  6. Nereden başlamalı?
  7. İlgili İçerikler
  8. Kaynaklar ve İleri Okuma
⏱️ 3 dk okuma📅 29 Ağustos 2026

SQL Server bağlantılarında geçici hatalar kaçınılmazdır. Uzun yıllardır System.Data.SqlClient ile yaşayan.NET uygulamaları için Microsoft, Microsoft.Data.SqlClient içine gömülü bir yeniden deneme (retry) altyapısı sunuyor. Bu yazıda bu yerleşik özelliğin ne işe yaradığını, nasıl kullanıldığını ve Polly gibi genel amaçlı kütüphanelerle karşılaştırıldığında hangi durumlarda öne çıktığını Jerry Nixon’ın Azure SQL Dev Corner blogundaki açıklamalarına dayanarak özetliyorum.

System.Data.SqlClient’tan Microsoft.Data.SqlClient’a geçiş

2002’de.NET Framework ile birlikte gelen System.Data.SqlClient, uzun yıllar SQL Server bağlantısı için standart sürücüydü. Microsoft 2019’da, aynı API uyumluluğunu büyük ölçüde koruyan yeni bir sürücü olarak Microsoft.Data.SqlClient‘ı tanıttı. Yeni namespace, eskisinin işlevlerini geriye dönük uyumluluk çerçevesinde sürdürüyor; güvenlik ve yetenek tarafında ise modern uygulamalara odaklanan yeni bir kod tabanı getiriyor.

Geçiş çoğu uygulama için oldukça basit: Projeye Microsoft.Data.SqlClient NuGet bağımlılığını eklemek ve using ifadelerini yeni namespace’e güncellemek genellikle yetiyor. Nixon’a göre telemetri verileri, hala eski sürücüde kalan uygulama sayısının şaşırtıcı derecede yüksek olduğunu gösteriyor; oysa yeni sürücü, aşağıda ele alacağımız Configurable Retry Logic gibi kayda değer özellikler barındırıyor.

Configurable Retry Logic nedir?

2021’de önizleme olarak duyurulan ve Microsoft.Data.SqlClient 4.0 sürümünde genel kullanıma açılan Configurable Retry Logic, SqlConnection ve SqlCommand için yerleşik bir dayanıklılık mekanizması sağlıyor. Amaç net: Kısa süreli ağ kesintileri, düşen bağlantılar ya da anlık erişilebilirlik sorunları gibi geçici (transient) hatalarda üçüncü parti bir kütüphaneye ihtiyaç duymadan sürücünün kendisi yeniden denesin.

Yeniden deneme, geçici hataların büyük bölümü için pratik bir çözüm. Ek bant genişliği, dead-letter kuyruğu veya ayrı bir yedeklilik katmanı gerektirmediği için basit ama etkili. Doğru tanımlanmış bir retry politikası, gerçek dünyanın kesintilerini oldukça temiz biçimde absorbe edebiliyor.

Öne çıkan yetenekler

Beklenen temel özelliklerin hepsi burada:

  • Sabit, artan (incremental) ve üstel (exponential) aralıklarla yeniden deneme.
  • Yapılandırılabilir deneme sayısı ve gecikme süreleri.
  • Hem SqlConnection hem de SqlCommand için destek.

Bunların ötesinde, sürücünün SQL Server’ı tanımasından doğan ek yetenekler var:

  • SQL’e duyarlı geçici hata tespiti.
  • Özelleştirilebilir geçici hata listeleri.
  • Komut filtreleme.
  • Retry olay bildirimleri.
  • Kod veya konfigürasyon üzerinden tanımlanabilen politikalar.

Ayrıca BaselineTransientErrors, sürücünün varsayılan geçici hata listesini erişilebilir kılıyor; bu da SQL-farkındalıklı retry davranışını genişletmeyi kolaylaştırıyor.

Temel kullanım

En basit haliyle bir üstel geri çekilme (exponential backoff) politikası tanımlayıp SqlConnection‘a bağlamak yeterli:

var options = new SqlRetryLogicOption
{
NumberOfTries = 5,
DeltaTime = TimeSpan.FromSeconds(1),
MaxTimeInterval = TimeSpan.FromSeconds(20)
};
var retryProvider =
SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
using var connection = new SqlConnection(connectionString)
{
RetryLogicProvider = retryProvider
};
await connection.OpenAsync();

OpenAsync() çağrısı, SqlClient’ın tanıdığı geçici hatalardan birine denk gelirse otomatik olarak yeniden deneniyor. NumberOfTries = 5 ifadesi bir ilk deneme ve ardından en fazla dört yeniden deneme demek. Üstel geri çekilme, dahili jitter ile birlikte uygulanıyor. Bir noktanın altını çizmek gerek: Retry davranışı varsayılan olarak kapalı, bağlantıya ya da komuta bir sağlayıcı atadığınızda devreye giriyor.

Polly ile karşılaştırma

Nixon’ın vurguladığı gibi, temelde SqlClient’ın retry sağlayıcısı Polly ile aynı problemi çözüyor. Ama sürücünün içinde çalışıyor olması bazı konularda avantaj sağlıyor:

  • SQL Server’a özgü geçici hataları zaten tanıyor.
  • Bir bağlantı mı yoksa komut mu yeniden denendiğini biliyor.
  • Aktif bir transaction içindeki komutları yeniden denemekten kaçınıyor.
  • SQL’e özel retry olayları ve konfigürasyon noktaları sunuyor.

Uygulama genelinde daha geniş bir dayanıklılık modeli gerektiğinde (circuit breaker, fallback, hedging veya birden fazla bağımlılığı kapsayan retry politikaları gibi) Polly hala daha uygun bir seçim. Yalnızca SQL retry ihtiyacı söz konusuysa SqlClient daha yalın, odaklı ve SQL-farkındalıklı bir yaklaşım sunuyor.

Sağlayıcının yeniden kullanılabilir olması da pratik bir kolaylık: Politikayı bir kez tanımlayıp aynı sağlayıcıyı farklı SqlConnection veya SqlCommand nesnelerine atayabilirsiniz. Böylece her veritabanı çağrısını ayrı bir dayanıklılık pipeline’ıyla sarmak zorunda kalmıyorsunuz; retry mantığı, bağlama en çok sahip olan sürücüye en yakın yerde çalışıyor.

Nereden başlamalı?

Hala System.Data.SqlClient kullanıyorsanız ilk adım güncelleme. 7.x sürümüne ulaşan Microsoft.Data.SqlClient, çoğu senaryoda drop-in bir yerine geçiş sunuyor; bazı durumlarda küçük bir refactoring gerekse de configurable retry gibi yeni özellikler bu eforu fazlasıyla karşılıyor.

Geçici hataların dağıtık sistemlerde hem uygulama hem de altyapı katmanında ele alınması gerektiğini düşünüyorsanız, tetikleme mekanizmalarında retry fırtınalarını kontrol altına almaya ilişkin şu yazıya da göz atabilirsiniz: Azure Functions’ta Retry Fırtınasını Durdurmak: Backoff ve Circuit Breaker.

İlgili İçerikler

  • Microsoft Build of OpenJDK Ağustos 2026 Güncellemesi
  • Microsoft.Testing.Platform ile Test Raporlama Rehberi
  • Gateway API’yi kind ile Yerelde Deneme Rehberi

Kaynaklar ve İleri Okuma

  • Try the new SqlClient and Retry connections natively — Jerry Nixon, Azure SQL Dev Corner
  • Configurable retry logic in Microsoft.Data.SqlClient (Microsoft Learn)
  • Introduction to Microsoft.Data.SqlClient namespace (Microsoft Learn)
  • Azure SQL Dev Corner blogu
🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

Visual Studio Build 2026: Ajanlar, Modernizasyon ve Yeni Akış
Visual Studio Build 2026: Ajanlar, Modernizasyon ve Yeni Akış7 Tem 2026
Azure IaaS’ta Performans: VM’den Çok Daha Fazlası Var
Azure IaaS’ta Performans: VM’den Çok Daha Fazlası Var31 May 2026
Azure NetApp Files ile EDA Yükünü Bulutta Taşımak: Neden İşe Yarıyor?
Azure NetApp Files ile EDA Yükünü Bulutta Taşımak: Neden İşe Yarıyor?23 May 2026
controller-runtime Cache Nasıl Çalışır?
controller-runtime Cache Nasıl Çalışır?2 Ağu 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket Microsoft.Data.SqlClient Polly Retry Logic SQL Server Transient Hatalar
Önceki yazı

Yönetilen PostgreSQL mi, Kendi Sunucunda mı? Kritik Kararlar

Sonraki yazı

Visual Studio’da GitHub Copilot: Ağustos 2026 Güncellemesi

İlginizi Çekebilir

Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
Aşkın KILIÇ 0

Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü

03/09/2026
GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
Aşkın KILIÇ 0

GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor

03/09/2026
Visual Studio'da Çözüm Bazlı Renk Teması Nasıl Ayarlanır
Aşkın KILIÇ 1

Visual Studio’da Çözüm Bazlı Renk Teması Nasıl Ayarlanır

02/09/2026

3 comments

comments user
Merve Ş. 29/08/2026 13:01

Bunu daha önce manuel olarak implement etmek için Polly kullanıyordum, meğer kütüphanenin içinde varmış. SqlCommand seviyesinde de çalışıyor olması güzel, sadece bağlantı için değil sorgu bazında da retry tanımlayabilmek işleri epey kolaylaştırır.

Yanıtla
comments user
Hakan G. 29/08/2026 22:12

Bunu daha önce manuel olarak implement etmeye çalışmıştım, Polly kullanmak zorunda kalmıştım. SqlClient’in bunu artık yerleşik getirmesi gerçekten işe yarar, özellikle Azure SQL kullananlara büyük kolaylık.

Yanıtla
comments user
Derya E. 30/08/2026 00:45

Configurable Retry Logic’i daha önce manuel implement etmiştik Polly ile, oldukça uğraştırmıştı. SqlClient’ın bunu yerleşik sunması gerçekten işleri kolaylaştırıyor. Üstel geri çekilme politikasını production’da kullandınız mı, pratikte ne kadar fark yaratıyor?

Yanıtla

Yorum gönder Yanıtı iptal et

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • Gemini 3.8 Flash GitHub Copilot'ta Kullanıma Sunuldu
    03/09/2026 Gemini 3.8 Flash GitHub Copilot’ta Kullanıma Sunuldu
  • Kubernetes v1.37 HPA ile İş Yüklerini Sıfıra İndiriyor
    03/09/2026 Kubernetes v1.37 HPA ile İş Yüklerini Sıfıra İndiriyor
  • Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
    03/09/2026 Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
  • GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
    03/09/2026 GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
  • Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad
    03/09/2026 Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad
  • Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
    11/04/2026 Copilot Cloud Agent Metriği: Kullanımı Ölçmek Kolaylaştı
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
    07/04/2026 GitHub Code Scanning’de Toplu Düzeltme: PR’lar Hızlandı
  • GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
    03/04/2026 GitHub Copilot Cloud Agent İçin Runner Kontrolü: Kurumsal Düzen
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

SİZİN İÇİN DERLEDİK

Gemini 3.8 Flash GitHub Copilot'ta Kullanıma Sunuldu
Microsoft Azure Yapay Zeka

Gemini 3.8 Flash GitHub Copilot’ta Kullanıma Sunuldu

03/09/2026 Aşkın KILIÇ
Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü
Bulut Altyapı Geliştirici Araçları Veri & Analitik

Microsoft SQL’de Hibrit Arama: Metin ve Vektörün Gücü

03/09/2026 Aşkın KILIÇ
GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor
Bulut Altyapı Geliştirici Araçları Yapay Zeka

GitHub Copilot AI Kodlamada Maliyeti Nasıl Düşürüyor

03/09/2026 Aşkın KILIÇ
Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad
Kurumsal Teknoloji Yapay Zeka

Ajanik Yapay Zekâ Terimleri: Loop, Harness ve Squad

03/09/2026 Aşkın KILIÇ
Visual Studio'da Çözüm Bazlı Renk Teması Nasıl Ayarlanır
Geliştirici Araçları Microsoft Azure

Visual Studio’da Çözüm Bazlı Renk Teması Nasıl Ayarlanır

02/09/2026 Aşkın KILIÇ
SPFx Dev Skills: Ajanların Bildiği ve Kaçırdığı Detaylar
DevOps Geliştirici Araçları Yapay Zeka

SPFx Dev Skills: Ajanların Bildiği ve Kaçırdığı Detaylar

02/09/2026 Aşkın KILIÇ
Microsoft Entra ID için Bicep Şablonları Genel Kullanıma
DevOps Güvenlik & Kimlik Microsoft Azure

Microsoft Entra ID için Bicep Şablonları Genel Kullanıma

02/09/2026 Aşkın KILIÇ
Kubernetes v1.37: etcd RangeStream ile Bellek Dostu Liste
Bulut Altyapı Konteyner & Kubernetes

Kubernetes v1.37: etcd RangeStream ile Bellek Dostu Liste

02/09/2026 Aşkın KILIÇ
Visual Studio'da GitHub Pull Request İnceleme Rehberi
DevOps Geliştirici Araçları Yapay Zeka

Visual Studio’da GitHub Pull Request İnceleme Rehberi

01/09/2026 Aşkın KILIÇ
Python in Visual Studio Code – November 2025 Release
Bulut Altyapı Geliştirici Araçları

Python in Visual Studio Code – November 2025 Release

01/09/2026 Aşkın KILIÇ
Azure SRE Agent'ı Connector Namespace ile Güçlendirmek
Bulut Altyapı Microsoft Azure Yapay Zeka

Azure SRE Agent’ı Connector Namespace ile Güçlendirmek

01/09/2026 Aşkın KILIÇ
Enterprise Live Migrations is now in public preview
Bulut Altyapı DevOps

Enterprise Live Migrations is now in public preview

01/09/2026 Aşkın KILIÇ

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları ASP.NET Core Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps azure sdk Azure SQL bulut bilişim C++ CI/CD CodeQL code review copilot Copilot CLI DevOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Foundry otomasyon performans Pull Request RAG SEO uyumlu verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka yapay zeka ajanları Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 432 yazı 🏗️ Bulut Altyapı 345 yazı 🤖 Yapay Zeka 289 yazı 🔧 DevOps 242 yazı ☁️ Microsoft Azure 231 yazı 🔒 Güvenlik & Kimlik 199 yazı 🏢 Kurumsal Teknoloji 83 yazı 📊 Veri & Analitik 62 yazı 🐳 Konteyner & Kubernetes 53 yazı 📧 Microsoft 365 22 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← Yönetilen PostgreSQL mi, Kendi...
    Visual Studio’da GitHub ... →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS