Linked Server Join Sorgu Performansı

SQL Server üzerinde tanımladığımız Linked Server yapıları uzak sunucuya manual bağlanmadan kolayca sorgular çalıştırmamıza imkan tanır. Linked Server aynı zamanda yerel bir kaynak ile uzak sunucudaki bir kaynağı çağraz sorgulamamızı da (Join) destekler.

SELECT a.*, b.* FROM T1 a
	INNER JOIN ABC.Aliveris.dbo.T2 b
         ON a.SatirKodu1 = b.SatirKodu2

Bu sorgu yereldeki T1 ile ABC isimli uzak sunucu üzerindeki T2 tablosunu Join edip iki taraftaki kolonları listeleyecektir. Fakat bu özelliği kullanırken performans sorunu yaşayabiliriz. Çünkü SQL Server JOIN işlemini yapmadan önce uzak sunucudaki T2 tablosunu kendi tarafına alacak ardından ana sorguyu çalıştıracaktır. Eğer karşı tablo küçük ve bağlantı hızlı ise çok sorun olmayacaktır. Ancak T2 tablosu büyükse veya ağ bağlantısı düşükse performans sorunu yaşayabiliriz. Bu yüzden yerel sunucu ile uzak sunucuyu doğrudan JOIN etmek yerine uzak sunucudaki verileri kendi tarafımıza geçici veya kalıcı bir tabloya aktardıktan sonra JOIN etmemiz daha doğru olacaktır. Hatta tüm tabloyu değil de filtre vererek çekmemiz sadece ihtiyaç duyulan verilerin taşınmasını sağlayacaktır.
Ayrıca uzak sunucu sorgularında Distributed Query yöntemi yerine OpenQuery yönteminin kullanılması her zaman daha hızlı olacaktır. Distributed Query yöntemi, klasik linked server yazım biçimini temsil eder. Yani sorguların SELECT * FROM UzakSunucu.UzakVeriTabani.Şema.TabloAdi şeklinde çalıştırılmasıdır. Bu durumda yerel Query optimizer yol haritasını kendisi belirleyecektir. OpenQuery ise sözkonusu sorgunun yorumlanmadan doğrudan uzak sunucu üzerinde çalıştırılmasını sağlayan bir fonksiyondur. Bu yöntemde tüm yükü uzak sunucu üstlenmiş oluyor.
Konuyla ilgili detayları SQL Server Linked Server (Bağlı Sunucu)
makalemde bulabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.