Nega sergap SQL ilovasi VPN orqali sudraladi va nimani to‘plam qilish kerak
Yuzlab bog‘liq so‘rov yuboradigan ekran aylanma yo‘lni yuz marta to‘laydi. Kutishlarni sanang, mustaqillarini to‘plam qiling, so‘ngra bajarishni ko‘chiring.
Mahalliy tarmoqda bir soniyadan kamroq vaqtda ochiladigan forma VPN orqali besh soniya oladi, xuddi shu liniyadagi fayl nusxasi esa to‘liq tezlikda ketadi. Farq tarmoq kengligida emas. Forma javoblar ketma-ketligini kutadi va har qadamda to‘liq aylanma yo‘lni to‘laydi, fayl nusxasi esa baytlarni uzluksiz uchishda ushlab turadi. Kirish liniyasiga tegishdan oldin o‘sha kutishlarni sanang.
Alomat so‘rov emas, ekran
O‘sha ekrandagi har bir so‘rov tez bo‘lishi mumkin, ekran esa baribir sekin bo‘lishi mumkin, chunki jami bajarish vaqtlarining yig‘indisi emas, kutishlarning yig‘indisidir. Ikki millisekundda bajariladigan bayonot ham, mijozi keyingisini yuborishdan oldin natijani olishi kerak bo‘lsa, to‘liq aylanma yo‘lni talab qiladi. Kechikishi qirq millisekund bo‘lgan yo‘lda yuz bog‘liq chaqiruv har qanday chizish ishi boshlanishidan oldin taxminan to‘rt soniyaga yig‘iladi. Bu arifmetika kutishning modeli, sizning liniyangiz o‘lchovi emas.
Shuning uchun tezlik testi begunoh ko‘rinadi. Katta hajmdagi uzatish o‘tkazuvchanlikni o‘lchaydi, sergap forma kechikishni o‘lchaydi, VPN esa birida a’lo bo‘lib, ikkinchisida oddiy bo‘lib qolishi mumkin. Shuning uchun ekranni tashxislash liniyani emas, ekranni o‘lchashni bildiradi.
Biror narsani o‘zgartirishdan oldin bitta foydalanuvchi harakatining boshidan oxirigacha bo‘lgan vaqtini yozib oling. Keyingi tuzatish ishlaganini aytadigan yagona asos o‘sha raqam.
Bitta foydalanuvchi harakatidagi ketma-ket kutishlarni sanang
Taxmin qilish o‘rniga mijozda o‘lchov o‘rnating. psql ichida \timing on har bir bayonotning o‘tgan vaqtini chop etadi, EXPLAIN (ANALYZE, BUFFERS) esa server o‘sha vaqtning qanchasini haqiqatan ishga sarf qilganini ko‘rsatadi.
Bu ikki raqam orasidagi farq sizning tarmoq va mijoz xarajatidir. Agar bayonot ikki millisekundda bajarilsa, mijoz esa oltmishni qayd etsa, qolgan ellik sakkiz yo‘l va mahalliy ishlovdir va hech qanday indeks ularni olib tashlamaydi. Bu taqqoslashni ekran yuboradigan har bir bayonot uchun takrorlang va bajarish vaqtlarini emas, farqlarni qo‘shing.
Natijani ketma-ket kutishlar soni sifatida yozib qo‘ying. Keyingi ikki bo‘lim kamaytira oladigan miqdor aynan shu va bu dalil bilan bahslasha oladigan raqam.
Mustaqil chaqiruvlarni to‘plam qiling, bog‘liqlarini qoldiring
Bir-birining natijasini o‘qimaydigan ikki bayonot birga yurib, bir marta yig‘ilishi mumkin, bu ikki kutishni bittaga aylantiradi. Ikkinchisiga birinchisining qiymati kerak bo‘lgan ikki bayonot buni qila olmaydi, chunki bog‘liqlik haqiqiy va to‘plamlash dastur nima qilishini o‘zgartiradi. Biror narsani qayta yozishdan oldin chaqiruvlarni o‘sha ikki uyumga ajrating, har bir uyumning hajmi nima mumkinligini aytadi.
To‘plamga asoslangan ish kutishlarni to‘plamlashdan to‘liqroq olib tashlaydi. Halqa birma-bir olib kelgan qatorlarni qaytaradigan bitta so‘rov halqani ham, aylanma yo‘llarni ham yo‘q qiladi. Avval halqani qidiring, chunki u odatda kattaroq foyda va ko‘rib chiqishga osonroq o‘zgarish.
To‘plam baribir xatolarni qayta ishlashni va tranzaksiya chegaralarini saqlashi kerak. Bog‘lanmagan bayonotlarni bitta satrga ulash xavfsiz optimallashtirish emas, muvaffaqiyatsiz bayonotni muvaffaqiyatli yuborish orqasiga yashirgan to‘plam esa tejagan kutishlaridan ham yomonroq.
Tarmoq kengligini sotib olishdan oldin ulanishlarni qayta ishlating
Yangi ulanish nomni hal qilish, TCP qo‘l berish, TLS muzokaralari va autentifikatsiyaga tushadi, yuqori kechikishli yo‘lda esa ularning har biri birinchi so‘rov ishlashidan oldingi yana bir aylanma yo‘l. Ulanish hovuzlari bu xarajatni chaqiruvga emas, jarayonga bir marta to‘lash uchun mavjud.
ADO.NET ichida hovuzdagi ulanishni yopish yoki dispose qilish uni yangi jismoniy ulanish ochish o‘rniga qayta ishlatishga qaytaradi, shuning uchun oqishga o‘xshagan naqsh ko‘pincha to‘g‘ri foydalanishdir. Hovuz haqiqatan ishlatilayotganini taxmin qilmasdan tekshiring: jismoniy ulanish yaratilishini jurnalga yozing yoki ekran ishlayotganda serverdagi sessiyalar sonini kuzating. SQL unumdorligi bo‘yicha qo‘llanma aylanma yo‘llarni kamaytirish va tez-tez uchraydigan ad hoc chaqiruvlarni to‘plamlash haqida xuddi shu fikrni aytadi, xizmatingizga xos misollar bilan, ularni o‘z joylashtirishingizga moslashtirish kerak.
Hovuzlash sozlash xarajatini olib tashlaydi va ketma-ket so‘rov kutishlarini tegmasdan qoldiradi. Bu o‘z-o‘zidan tuzatish emas, toza o‘lchov uchun shart.
Bajarishni ma’lumotlarga yaqinlashtirishni torting
Ilovani ma’lumotlar bazasi yonida ishga tushirish ko‘plab masofaviy ma’lumotlar bazasi almashinuvini bitta masofaviy displey sessiyasi bilan almashtiradi. Sergap yuklama uchun bu katta o‘zgarish bo‘lishi mumkin va u unumdorlik o‘zgarishi bilan birga operatsion o‘zgarish ham: sessiyalarni boshqarish, kirishni nazorat qilish, dasturiy ta’minotni joylashtirish va foydalanuvchi tajribasi ilova bilan birga ko‘chadi.
Qaysi yo‘nalish tezroq deb taxmin qilishdan oldin haqiqiy interfeysni va u uzatadigan ma’lumotlarni o‘lchang. Masofaviy ish stoli sessiyasi piksellarni ko‘chiradi, zich grafikali ekran esa xuddi shu yo‘lda u almashtirgan so‘rovlardan yomonroq ishlashi mumkin, ayniqsa mijoz uzluksiz qayta chizganda.
So‘ngra asl harakatni takrorlang va uchta raqamni taqqoslang: ketma-ket kutishlar, natija hajmi va boshidan oxirigacha tugash vaqti. Ma’lumotlar to‘g‘riligini va kirish siyosatini saqlab, o‘lchangan foydalanuvchi vazifasini o‘zgartiradigan yaxshilanish saqlashga arziydiganidir.