Bir süre aradıktan sonra, bu soruyu bir cevap bulma eksikliği için göndermeye ve benzer bir soru / cevap varsa özür dilemeye karar verdim.
Aşağıdaki sorguyu benzer şekilde ayarlanmış iki SQL sunucusunda çalıştırırken, performansı etkileyen farklı yürütme planlarıyla karşılaşırız ve nedenini bulmak için yardıma ihtiyacımız vardır.
Sorgu:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
A sunucusunun yürütme planı
Sunucu B'nin uygulama planı Sunucu B http://s2.postimg.org/z9fjrfv4n/server_B.png
B sunucusunun gerçek yürütme planında TOP fiziksel işlemi olduğunu fark edeceksiniz ve nedenini anlamaya çalışıyoruz. Her iki sorgu da Dizin Aramasında aynı dizini kullanır.
Sunucu A ve sunucu B'nin bazı detayları
Sunucu A ve B'nin ikisi de
Windows Server 2008 R2 Standart Hizmet Paketi 1
24 GB RAM
64 bit işletim sistemi
( SELECT SERVERPROPERTY ('ProductVersion') ) kullanılarak elde edilen SQL Server 2012 Sürümleri
Sunucu A SQL sürümü 11.0.3000.0
Sunucu B SQL sürüm 11.0.5058.0
Ne denedik
Sunucu B'nin yürütme planında neden TOP var? Bu basit sorgu örneğinde gerçek bir sorun yoktur, ancak daha büyük bir sorguda TOP için maliyet artar ve bir performans artışı görürüz. Bu hata ayıklama ile ilgili herhangi bir yardım çok takdir edilecektir ve size yardımcı olması gerekebilecek ek bilgileri alabiliriz.
GO
Rowcount satırından sonra koyabilirsiniz . En İyi operatörün özelliklerini de gönderebilir misiniz?
TOP
Operatör sıfırdan farklı anlaşılacağıSET ROWCOUNT
önce bu bağlantı üzerinde idam edildi. Yürüttükten sonra tekrar deneyinSET ROWCOUNT 0;
. Ayrıca, gönderdiğiniz SQL sürümleri SQL 2008 R2 değildir.SELECT SERVERPROPERTY('ProductVersion');
Gerçek SQL Server sürümünü almak için 2 sunucuda çalıştırın .