= Профилирање и оптимизација на извршување на прашалниците ---- == Сценарио бр. 1 - Поглед за 20 најпродавани продукти на неделно ниво [[Image("Image1.JPG",80%,align=center)]]\\ ---- {{{#!html
Анализа на прашалникот пред партиционирање
}}} [[Image("Image2.JPG",80%,align=center)]]\\ ---- {{{#!html
Време на извршување на прашалникот пред партиционирање
}}} [[Image("Image3.JPG",80%,align=center)]]\\ ---- * Креирање на нова табела за нарачки, префрлување на податоци од старата табела за нарачки и креирање на две партиции за новата табела * Во првата партиција ќе се наоѓаат нарачките на неделно ниво (за секоја недела), а во втората партиција сите нарачки од минатото * **Во табелата за нарачки се наоѓаат податоци до декември 2023 година, затоа и партициите се направени за тие датуми** [[Image("Image4.JPG",80%,align=center)]]\\ ---- {{{#!html
Рекреирање на погледот за најпродаваните 20 продукти на неделно ниво
}}} [[Image("Image5.JPG",80%,align=center)]]\\ ---- {{{#!html
Анализа на прашалникот после партиционирање
}}} [[Image("Image6.JPG",80%,align=center)]]\\ ---- {{{#!html
Време на извршување на прашалникот после партиционирање
}}} [[Image("Image7.JPG",80%,align=center)]]\\ ---- * Додавање на индекс на колоната ‘id’ во новата табела за нарачки и исклучување на SEQ SCAN кај PostgreSQL Query Planner * Целта на исклучување на SEQ SCAN е да го натерате Query Planner-от да ги користи индексите [[Image("Image8.JPG",80%,align=center)]]\\ ---- {{{#!html
Анализа на прашалникот после додавање на индексот
}}} [[Image("Image9.JPG",80%,align=center)]]\\ ---- {{{#!html
Време на извршување на прашалникот после додавање на индексот
}}} [[Image("Image10.JPG",80%,align=center)]]\\ ---- * Функција со помош на која ќе се извршува префрлување на нарачките од партицијата за тековната недела во партицијата за нарачки за минатото * Оваа функција ќе се извршува на неделно ниво за да се префрлат нарачките од неделата која што завршува * Функцијата ќе се повикува автоматски преку Task Scheduler [[Image("Image11.JPG",80%,align=center)]]\\ ---- * Правилно креирање на партиции * Во претходниот пример, партициите се креирани на тој начин затоа што сите податоци за нарачки се за претходните години * Префрлување на податоци од партиција во партиција не би работело, затоа што во втората партиција (за нарачки во минатото) можеме да додаваме нарачки до крај на 2023 година (така е специфицирано во партицијата) * На ваков начин, првата партиција ќе ги има сите нарачки за тековната недела, додека пак втората партиција би ги имала сите нарачки за датуми помали од тековната недела, меѓутоа не специфицираме точно до кој датум, туку проверките ќе се вршат врз основа на CURRENT_DATE што го зима точниот моментален датум во реално време [[Image("Image12.JPG",80%,align=center)]]\\ ---- == Сценарио бр. 2 - Оптимизација со материјализиран поглед * Наместо со партиции, извршување на прашалници може да се оптимизира и со материјализиран поглед * На сликата подолу, се креира материјализиран поглед во кој се наоѓаат најпродаваните 20 продукти за првата недела од декември 2023 година (тогаш се последните нарачки во табелата ‘orders’) * За да овој материјализиран поглед е правилно креиран, треба во условот за датум да се провери датумот преку променливата ‘CURRENT_DATE’ и функцијата ‘extract’ со цел да се земат нарачките за последната недела * Со помош на следнава команда ‘REFRESH MATERIALIZED VIEW top_selling_products_last_week_2’ овој поглед би се освежувал, односно би се промениле продукти така што ќе се најдат најпродаваните продукти за последната недела. За да се автоматизира процесот, би можело да се креира таск преку Task Scheduler кој ќе се извршува еднаш неделно во одредено време * Оваа функција би се извршувала еднаш неделно и во погледот би се наоѓале најпродаваните продуктите на неделно ниво