Жергілікті желіде бір секундтан аз уақытта ашылатын нысан VPN арқылы бес секунд алады, ал сол арнадағы файл көшірмесі толық жылдамдықпен жүреді. Айырмашылық өткізу қабілетінде емес. Нысан жауаптар тізбегін күтіп, әр қадамда толық айналымды төлейді, ал файл көшірмесі байттарды үздіксіз ұстап тұрады. Қолжетімділік желісіне тимес бұрын осы күтулерді санаңыз.

Симптом — сұраныс емес, экран

Сол экрандағы әрбір сұраныс жылдам болуы мүмкін, ал экран бәрібір баяу қалуы мүмкін, өйткені жиынтық орындалу уақыттарының қосындысы емес, күтулердің қосындысы. Екі миллисекундта орындалатын оператор клиент келесісін жіберер алдында нәтижесін алуға тиіс болғанда бәрібір толық айналымды талап етеді. Кідірісі қырық миллисекунд жолда жүз тәуелді шақыру кез келген рендеринг жұмысы басталғанша шамамен төрт секундқа жиналады. Бұл арифметика күтудің моделі, сіздің арнаңыздың өлшемі емес.

Сондықтан жылдамдық тесті кінәсіз көрінеді. Жаппай тасымалдау өткізу қабілетін өлшейді, сөйлегіш нысан кідірісті өлшейді, ал VPN бірінде үздік болып, екіншісінде қарапайым болып қала алады. Сондықтан экранды диагностикалау арнаны емес, экранды өлшеуді білдіреді.

Ештеңені өзгертер алдында бір пайдаланушы әрекетінің ұштан ұшқа дейінгі уақытын жазып алыңыз. Кейінгі түзетудің жұмыс істегенін айта алатын жалғыз бастапқы шама — сол сан.

Бір пайдаланушы әрекетіндегі кезекті күтулерді санаңыз

Болжам жасаудың орнына клиентті аспаптандырыңыз. psql ішінде \timing on әр оператордың өткен уақытын басып шығарады, ал EXPLAIN (ANALYZE, BUFFERS) сервер сол уақыттың қаншасын шынымен жұмысқа жұмсағанын көрсетеді.

Осы екі санның айырмасы сіздің желілік және клиенттік шығыныңыз. Егер оператор екі миллисекундта орындалып, клиент алпыс жазып алса, қалған елу сегіз жол жүру және жергілікті өңдеу, оларды ешқандай индексте жоя алмайды. Бұл салыстыруды экран жіберетін әр оператор үшін қайталап, орындалу уақыттарын емес, айырмаларды қосыңыз.

Нәтижені кезекті күтулердің саны ретінде жазып қойыңыз. Келесі екі бөлім дәл осы шаманы азайта алады, және бұл дәлелмен таласуға болатын сан.

Тәуелсіз шақыруларды топтастырыңыз, тәуелділерін қалдырыңыз

Бір-бірінің нәтижесін оқымайтын екі оператор бірге жүріп, бір рет жиналуы мүмкін, бұл екі күтуді бір күтуге айналдырады. Екіншісі біріншінің мәнін қажет ететін екі оператор үшін бұл мүмкін емес, өйткені тәуелділік шынайы және оны топтастыру бағдарламаның не істейтінін өзгертеді. Ештеңені қайта жазбас бұрын шақыруларды осы екі үймеге бөліңіз, ал әр үйменің мөлшері не мүмкін екенін айтады.

Жиынға негізделген жұмыс күтулерді топтастырудан гөрі толық жояды. Цикл бір-бірлеп алып жатқан жолдарды қайтаратын бір сұраныс циклды да, айналымдарды да жояды. Ең алдымен циклды іздеңіз, өйткені ол әдетте үлкенірек ұтыс және тексеруге оңай өзгеріс.

Топтама бәрібір қателерді өңдеуді және транзакция шекараларын сақтауға тиіс. Байланысы жоқ операторларды бір жолға біріктіру қауіпсіз оптимизация емес, ал сәтсіз операторды сәтті жіберуге жасырған топтама үнемдеген күтулерінен де жаман.

Өткізу қабілетін сатып алар алдында байланыстарды қайта пайдаланыңыз

Жаңа байланыс атауды шешуге, TCP қол алысуға, TLS келіссөздеріне және аутентификацияға тұрады, ал жоғары кідірісті жолда олардың әрқайсысы бірінші сұраныс орындалғанға дейінгі тағы бір айналым. Байланыс пулдары бұл шығынды шақыру сайын емес, процесс сайын бір рет төлеу үшін бар.

ADO.NET ішінде пулдағы байланысты жабу немесе dispose ету жаңа физикалық байланыс ашудың орнына оны қайта пайдалануға қайтарады, сондықтан ағымдағы көрінетін үлгі жиі дұрыс қолдану болып табылады. Пулдың шынымен пайдаланылып жатқанын болжамдамай тексеріңіз: физикалық байланыс жасалуын логқа жазыңыз немесе экран жүріп тұрғанда сервердегі сессия санын бақылаңыз. SQL өнімділік нұсқаулығы айналымдарды азайту және жиі ad hoc шақыруларды топтастыру туралы дәл солай айтады, қызметке тән мысалдармен, оларды өз орналастыруыңызға бейімдеуіңіз керек.

Пулдау орнату шығынын жояды және кезекті сұраныс күтулерін тиіссіз қалдырады. Ол өз бетінше түзету емес, таза өлшеу үшін алғышарт.

Орындауды деректерге жақындатуды өлшеп көріңіз

Қосымшаны дерекқордың жанында жүргізу көптеген қашықтағы дерекқор алмасуларын бір қашықтағы дисплей сессиясымен алмастырады. Сөйлегіш жүктеме үшін бұл үлкен өзгеріс болуы мүмкін және ол өнімділік өзгерісі ғана емес, операциялық өзгеріс те: сессияны басқару, қолжетімділікті бақылау, бағдарламалық жасақтаманы орналастыру және пайдаланушы тәжірибесі қосымшамен бірге жылжиды.

Қай бағыт жылдамырақ деп болжамдамас бұрын нақты интерфейсті және оның тасымалдайтын деректерін өлшеңіз. Қашықтағы жұмыс үстелі сессиясы пикселдерді жылжытады, ал тығыз графикасы бар экран сол жолда ол алмастырған сұраныстардан нашар жұмыс істеуі мүмкін, әсіресе клиент үздіксіз қайта салғанда.

Содан кейін бастапқы әрекетті қайталап, үш санды салыстырыңыз: кезекті күтулер, нәтиже көлемі және ұштан ұшқа дейінгі аяқталу уақыты. Деректердің дұрыстығы мен қолжетімділік саясатын сақтай отырып, өлшенген пайдаланушы тапсырмасын өзгертетін жақсарту сақтауға тұрарлық.

Қатысты мақалалар