Sayfalar

Translate

24 Nisan 2015 Cuma

SQL Server - REMOTE JOIN - Performans

Bir tabloyu(Tablo1) Arsiv deki başka bir tablo(Tablo2History) ile JOIN lemek istiyoruz. Ana makinedeki Tablo1 de 1000 kayıt olsun. Arsiv Makinesinde bulunan  Tablo2History tablosunda da 10 milyon kayıt olsun. JOIN işleminde Link Server kullanalım ve kullanacağımız Link Server ismi ArsivDB olsun.

Normalde aşağıdaki gibi bir sorgu yazarız. JOIN işleminde Tablo2History deki tablodan sadece birkaç kayıt geleceğini biliyor olalım.

SELECT * FROM Tablo1 T WITH(NOLOCK)
INNER JOIN ArsivDB.dbo.Tablo2History TH WITH(NOLOCK) ON (TH.Tarih = T.Tarih)

Yukardaki sorkuda işleyiş şu şekilde oluyor:

1- Tablo2History tablosunda bulunan 10 milyon kayıt Arşiv Makinasından Ana Makineye taşınıyor.
2- JOIN işlemi Ana Makinede yapılıyor ve eşleşen bir kaç kayıt listeleniyor.

Yani bir kaç kayıt listelemek için 10 milyon kaydı ana makineye taşıyarak çok büyük külfet vermiş ve süreyi çok uzatmış oluyoruz.

Bunun yerine REMOTE komutunu sorguya ekleyerek performansı arttırmış oluruz.
Aşağıdaki gibi bir sorgu yazarsak

SELECT * FROM Tablo1 T WITH(NOLOCK)
INNER REMOTE JOIN ArsivDB.dbo.Tablo2History TH WITH(NOLOCK) ON (TH.Tarih = T.Tarih)

işleyiş şu şekilde oluyor:

1- Tablo1 tablosunda bulunan 1000 kayıt Ana Makinadan Arşiv Makinesine taşınıyor.
2- JOIN işlemi Arşiv Makinesinde yapılıyor ve eşleşen bir kaç kayıt Ana Makineye taşınarak listeleniyor.


REMOTE komutu sorguya şu görevi veriyor: JOIN işlemi sağdaki tablonun bulunduğu remote makinede yapılsın.

Hiç yorum yok:

Yorum Gönder