Yerel ağda bir saniyeden kısa sürede açılan bir form, VPN üzerinden beş saniye sürerken aynı hat üzerindeki dosya kopyası tam hızda akar. Fark bant genişliği değil. Form bir yanıt dizisini bekler ve her adımda tam gidiş dönüşü öder, dosya kopyası ise baytları sürekli uçuşta tutar. Erişim hattına dokunmadan önce o beklemeleri sayın.

Belirti bir sorgu değil, bir ekrandır

O ekrandaki her sorgu hızlı olabilir ve ekran yine de yavaş olabilir, çünkü toplam, yürütme sürelerinin toplamı değil beklemelerin toplamıdır. İki milisaniyede çalışan bir ifade, istemci sonucu alıp sonrakini göndermek zorunda kaldığında yine tam bir gidiş dönüşe mal olur. Kırk milisaniye gecikmeli bir yolda yüz bağımlı çağrı, herhangi bir çizim işi başlamadan önce yaklaşık dört saniyeye ulaşır. Bu aritmetik beklemenin bir modelidir, hattınızın ölçümü değil.

Bu yüzden hız testi masum görünür. Toplu aktarım verimi ölçer, konuşkan form gecikmeyi ölçer ve bir VPN birinde mükemmel olup diğerinde sıradan kalabilir. Dolayısıyla ekranı teşhis etmek, hattı değil ekranı ölçmek demektir.

Herhangi bir şeyi değiştirmeden önce tek bir kullanıcı eyleminin uçtan uca süresini kaydedin. Sonraki bir düzeltmenin işe yarayıp yaramadığını söyleyebilecek tek referans o sayıdır.

Tek bir kullanıcı eyleminde sıralı beklemeleri sayın

Tahmin etmek yerine istemciye ölçüm yerleştirin. psql içinde \timing on her ifadenin geçen süresini yazdırır ve EXPLAIN (ANALYZE, BUFFERS) o sürenin ne kadarını sunucunun gerçekten işe harcadığını gösterir.

Bu iki sayı arasındaki fark sizin ağ ve istemci yükünüzdür. Bir ifade iki milisaniyede çalışıp istemci altmış kaydediyorsa, kalan elli sekiz yolculuk ve yerel işlemedir ve hiçbir dizin onları kaldırmaz. Bu karşılaştırmayı ekranın gönderdiği her ifade için tekrarlayın ve yürütme sürelerini değil farkları toplayın.

Sonucu sıralı bekleme sayısı olarak yazın. Sonraki iki bölümün azaltabileceği büyüklük tam olarak budur ve bu, kanıtla tartışabileceğiniz bir sayıdır.

Bağımsız çağrıları toplu işleyin, bağımlı olanları koruyun

Birbirinin sonucunu okumayan iki ifade birlikte yol alıp bir kez toplanabilir, bu da iki beklemeyi bire indirir. İkincisinin birincinin değerine ihtiyaç duyduğu iki ifade bunu yapamaz, çünkü bağımlılık gerçektir ve toplu işlemek programın ne yaptığını değiştirir. Herhangi bir şeyi yeniden yazmadan önce çağrıları o iki yığına ayırın; her yığının boyutu neyin mümkün olduğunu söyler.

Küme tabanlı iş, beklemeleri toplu işlemeden daha eksiksiz kaldırır. Bir döngünün tek tek çektiği satırları döndüren tek bir sorgu, hem döngüyü hem de gidiş dönüşleri ortadan kaldırır. Önce döngüyü arayın, çünkü genellikle daha büyük kazanç ve gözden geçirmesi daha kolay değişikliktir.

Bir toplu iş yine de hata işlemeyi ve işlem sınırlarını korumalıdır. İlgisiz ifadeleri tek bir dizgede birleştirmek güvenli bir iyileştirme değildir ve başarısız bir ifadeyi başarılı bir gönderimin arkasına saklayan bir toplu iş, tasarruf ettiği beklemelerden daha kötüdür.

Bant genişliği satın almadan önce bağlantıları yeniden kullanın

Yeni bir bağlantı ad çözümlemesi, TCP el sıkışması, TLS görüşmesi ve kimlik doğrulamaya mal olur ve yüksek gecikmeli bir yolda bunların her biri ilk sorgu çalışmadan önce bir gidiş dönüş daha demektir. Bağlantı havuzları bu maliyeti çağrı başına değil süreç başına bir kez ödemek için vardır.

ADO.NET içinde havuzdaki bir bağlantıyı kapatmak veya dispose etmek, yeni bir fiziksel bağlantı açmak yerine onu yeniden kullanım için geri verir, bu yüzden sızıntı gibi görünen desen çoğu zaman doğru kullanımdır. Havuzun gerçekten kullanıldığını varsaymak yerine doğrulayın: fiziksel bağlantı oluşturmayı günlüğe kaydedin veya ekran çalışırken sunucudaki oturum sayısını izleyin. SQL performans rehberi gidiş dönüşleri azaltma ve sık yapılan ad hoc çağrıları toplu işleme konusunda aynı noktayı söyler; kendi dağıtımınıza uyarlamanız gereken hizmete özgü örneklerle birlikte.

Havuzlama kurulum maliyetini kaldırır ve sıralı sorgu beklemelerini olduğu gibi bırakır. Kendi başına bir düzeltme değil, temiz bir ölçüm için ön koşuldur.

Yürütmeyi veriye yaklaştırmayı tartın

Uygulamayı veritabanına yakın çalıştırmak, birçok uzak veritabanı alışverişini tek bir uzak görüntü oturumuyla değiştirir. Konuşkan bir iş yükü için bu büyük bir değişiklik olabilir ve bir performans değişikliği olduğu kadar operasyonel bir değişikliktir: oturum yönetimi, erişim denetimi, yazılım dağıtımı ve kullanıcı deneyimi uygulamayla birlikte hareket eder.

Herhangi bir yönün daha hızlı olduğunu varsaymadan önce gerçek arayüzü ve aktardığı veriyi ölçün. Uzak masaüstü oturumu pikselleri taşır ve yoğun grafikli bir ekran aynı yolda, yerine geçtiği sorgulardan daha kötü performans gösterebilir; özellikle istemci sürekli yeniden çizerken.

Sonra özgün eylemi yineleyin ve üç sayıyı karşılaştırın: sıralı beklemeler, sonuç hacmi ve uçtan uca tamamlanma süresi. Veri doğruluğunu ve erişim ilkesini korurken ölçülen kullanıcı görevini değiştiren iyileştirme, tutulmaya değer olanıdır.

İlgili makaleler