Kütləvi SQL tətbiqi VPN üzərindən niyə gecikir və nəyi toplu şəkildə göndərmək lazımdır
Yüz asılı sorğu göndərən ekran gediş-gəliş haqqını yüz dəfə ödəyir. Gözləmələri say, müstəqilləri toplu göndər, sonra icranı köçür.
Lokal şəbəkədə bir saniyədən az vaxtda açılan forma VPN üzərindən beş saniyə çəkir, halbuki eyni xətdə fayl köçürməsi tam sürətlə gedir. Fərq buraxılış zolağında deyil. Forma cavablar ardıcıllığını gözləyir və hər addımda tam gediş-gəliş haqqı ödəyir, fayl köçürməsi isə baytları davamlı olaraq yolda saxlayır. Giriş xəttinə toxunmazdan əvvəl bu gözləmələri say.
Simptom sorğu deyil, ekrandır
Həmin ekrandakı hər sorğu sürətli ola bilər, ekran isə yenə də yavaş qala bilər, çünki cəm icra vaxtlarının deyil, gözləmələrin cəmidir. İki millisaniyədə işləyən ifadə, müştəri nəticəni almalı və sonra növbətini göndərməlidirsə, yenə də tam gediş-gəliş bahasına başa gəlir. Qırx millisaniyə gecikməsi olan yolda yüz asılı çağırış hər hansı çəkmə işi başlamazdan əvvəl təxminən dörd saniyəyə çatır. Bu hesab gözləmənin modelidir, xəttinizin ölçməsi deyil.
Sürət testinin günahsız görünməsi buna görədir. Kütləvi köçürmə ötürmə qabiliyyətini ölçür, danışqan forma gecikməni ölçür və VPN birində əla ola bilər, digərində isə adi qalır. Deməli, ekranı diaqnoz etmək xətti deyil, ekranı ölçmək deməkdir.
Nəyisə dəyişməzdən əvvəl bir istifadəçi hərəkətinin başdan-başa vaxtını qeyd et. Yalnız bu rəqəm sonrakı düzəlişin işləyib-işləmədiyini deyə bilər.
Bir istifadəçi hərəkətində ardıcıl gözləmələri say
Təxmin etmək əvəzinə müştərini ölç. psql-də \timing on hər ifadənin keçən vaxtını çap edir, EXPLAIN (ANALYZE, BUFFERS) isə serverin bu vaxtın nə qədərini həqiqətən işə sərf etdiyini göstərir.
Bu iki rəqəm arasındakı fərq sizin şəbəkə və müştəri yükünüzdür. Bir ifadə iki millisaniyədə icra olunursa və müştəri altmış qeyd edirsə, qalan əlli səkkiz yol və yerli emaldır və heç bir indeks onları aradan qaldırmaz. Bu müqayisəni ekranın göndərdiyi hər ifadə üçün təkrarla və icra vaxtlarını deyil, fərqləri topla.
Nəticəni ardıcıl gözləmələrin sayı kimi yaz. Növbəti iki bölmənin azalda biləcəyi kəmiyyət budur və bu, dəlillə mübahisə edə biləcəyiniz bir rəqəmdir.
Müstəqil çağırışları toplu göndər, asılı olanları saxla
Bir-birinin nəticələrini oxumayan iki ifadə birlikdə gedə və bir dəfə yığıla bilər, bu da iki gözləməni birinə çevirir. İkincisi birincinin dəyərinə ehtiyac duyan iki ifadə bunu edə bilməz, çünki asılılıq həqiqidir və onu toplamaq proqramın nə etdiyini dəyişərdi. Nəyisə yenidən yazmazdan əvvəl çağırışları bu iki yığına ayır; hər yığının ölçüsü nəyin mümkün olduğunu sizə deyir.
Çoxluq əsaslı iş gözləmələri toplu göndərmədən daha köklü şəkildə aradan qaldırır. Dövrənin bir-bir gətirdiyi sətirləri qaytaran bir sorğu həm dövrəni, həm də gediş-gəlişləri ləğv edir. Əvvəlcə dövrəni axtar, çünki adətən daha böyük qazanc və nəzərdən keçirməsi daha asan dəyişiklik odur.
Toplu göndəriş yenə də xəta idarəetməsini və tranzaksiya sərhədlərini qorumalıdır. Əlaqəsiz ifadələri bir sətirdə birləşdirmək təhlükəsiz optimallaşdırma deyil və uğursuz ifadəni uğurlu təqdimetmə arxasında gizlədən toplu, qənaət etdiyi gözləmələrdən pisidir.
Buraxılış zolağı almaqdan əvvəl bağlantıları təkrar istifadə et
Yeni bağlantı ad həllinə, TCP əl sıxışmasına, TLS razılaşmasına və autentifikasiyaya başa gəlir və yüksək gecikməli yolda bunların hər biri ilk sorğu işləməzdən əvvəl başqa bir gediş-gəlişdir. Bağlantı hovuzları bu xərci hər çağırışda deyil, hər prosesdə bir dəfə ödəmək üçün mövcuddur.
ADO.NET-də hovuzlu bağlantının bağlanması və ya silinməsi yeni fiziki bağlantı açmaq əvəzinə onu təkrar istifadəyə qaytarır, buna görə sızma kimi görünən naxış çox vaxt düzgün istifadədir. Hovuzun həqiqətən istifadədə olduğunu yoxla, güman etmə: fiziki bağlantı yaradılmasını jurnalda qeyd et və ya ekran işləyərkən serverdə sessiya sayını izlə. SQL performans tövsiyələri də gediş-gəlişlərin azaldılması və tez-tez ad hoc çağırışların toplanması barədə eyni fikri deyir və öz yerləşdirmənizə tətbiq etməli olduğunuz xidmətə xas nümunələr verir.
Hovuzlaşdırma qurulum xərcini aradan qaldırır və ardıcıl sorğu gözləmələrini toxunulmaz qoyur. Bu, təkbaşına bir düzəliş deyil, təmiz ölçmə üçün ilkin şərtdir.
İcranı verilənlərə yaxınlaşdırmağı çək
Tətbiqi verilənlər bazasının yaxınlığında işlətmək çoxsaylı uzaq verilənlər bazası mübadiləsini tək uzaq görüntü sessiyası ilə əvəz edir. Danışqan yük üçün bu böyük dəyişiklik ola bilər və bu, performans dəyişikliyi qədər əməliyyat dəyişikliyidir: sessiya idarəetməsi, giriş nəzarəti, proqram təminatının yerləşdirilməsi və istifadəçi təcrübəsi hamısı tətbiqlə birlikdə köçür.
Hər hansı istiqamətin daha sürətli olduğunu güman etməzdən əvvəl faktiki interfeysi və ötürdüyü verilənləri ölç. Uzaq masaüstü sessiyası pikselləri daşıyır və sıx qrafikalı ekran eyni yolda əvəz etdiyi sorğulardan pis işləyə bilər, xüsusən müştəri davamlı olaraq yenidən çəkdikdə.
Sonra ilkin hərəkəti təkrarla və üç rəqəmi müqayisə et: ardıcıl gözləmələr, nəticə həcmi və başdan-başa tamamlanma vaxtı. Ölçülən istifadəçi tapşırığını dəyişən, verilənlərin düzgünlüyünü və giriş siyasətini qoruyan təkmilləşdirmə saxlanmağa dəyər olandır.