wiki:phase4

Профилирање и оптимизација на извршување на прашалниците


Сценарио бр. 1 - Оптимизација со партиционирање

Поглед за 20 најпродавани продукти на неделно ниво



Анализа на прашалникот пред партиционирање



Време на извршување на прашалникот пред партиционирање



  • Креирање на нова табела за нарачки, префрлување на податоци од старата табела за нарачки и креирање на две партиции за новата табела
    • Во првата партиција ќе се наоѓаат нарачките на неделно ниво (за секоја недела), а во втората партиција сите нарачки од минатото
    • Во табелата за нарачки се наоѓаат податоци до декември 2023 година, затоа и партициите се направени за тие датуми



Рекреирање на погледот за најпродаваните 20 продукти на неделно ниво



Анализа на прашалникот после партиционирање



Време на извршување на прашалникот после партиционирање



  • Додавање на индекс на колоната ‘id’ во новата табела за нарачки и исклучување на SEQ SCAN кај PostgreSQL Query Planner
    • Целта на исклучување на SEQ SCAN е да го натерате Query Planner-от да ги користи индексите



Анализа на прашалникот после додавање на индексот



Време на извршување на прашалникот после додавање на индексот



  • Функција со помош на која ќе се извршува префрлување на нарачките од партицијата за тековната недела во партицијата за нарачки за минатото
    • Оваа функција ќе се извршува на неделно ниво за да се префрлат нарачките од неделата која што завршува
    • Функцијата ќе се повикува автоматски преку Task Scheduler



  • Правилно креирање на партиции
    • Во претходниот пример, партициите се креирани на тој начин затоа што сите податоци за нарачки се за претходните години
    • Префрлување на податоци од партиција во партиција не би работело, затоа што во втората партиција (за нарачки во минатото) можеме да додаваме нарачки до крај на 2023 година (така е специфицирано во партицијата)
    • На ваков начин, првата партиција ќе ги има сите нарачки за тековната недела, додека пак втората партиција би ги имала сите нарачки за датуми помали од тековната недела, меѓутоа не специфицираме точно до кој датум, туку проверките ќе се вршат врз основа на CURRENT_DATE што го зима точниот моментален датум во реално време



Сценарио бр. 2 - Оптимизација со материјализиран поглед

  • Наместо со партиции, извршување на прашалници може да се оптимизира и со материјализиран поглед
  • На сликата подолу, се креира материјализиран поглед во кој се наоѓаат најпродаваните 20 продукти за првата недела од декември 2023 година (тогаш се последните нарачки во табелата ‘orders’)
  • За да овој материјализиран поглед е правилно креиран, треба во условот за датум да се провери датумот преку променливата ‘CURRENT_DATE’ и функцијата ‘extract’ со цел да се земат нарачките за последната недела
  • Со помош на следнава команда ‘REFRESH MATERIALIZED VIEW top_selling_products_last_week_2’ овој поглед би се освежувал, односно би се промениле продукти така што ќе се најдат најпродаваните продукти за последната недела. За да се автоматизира процесот, би можело да се креира таск преку Task Scheduler кој ќе се извршува еднаш неделно во одредено време
  • Оваа функција би се извршувала еднаш неделно и во погледот би се наоѓале најпродаваните продуктите на неделно ниво



Креирање на погледот и извршување на прашалникот (заедно со времето на извршување)



Сценарио бр. 3 - Оптимизација со партиционирање

  • Креирање на табела за нарачки, две партиции за парни и непарни недели и префрлање на податоци од старата табела за нарачки во новата табела за нарачки.


  • За да се овозможи успешно додавање на нарачки и во партициите, потребно е да се креираат следните тригери



  • Креиреање на поглед
    • Во погледот датумот се однесува за нарачки од декември, бидејќи во табелата за нарачки последните нарачки се за декември
    • За да е точно дефиниран овој поглед, датумот би се земал од ‘CURRENT_DATE’ променливата



Извршување на прашалник



Додавање на индекси во партиции



Извршување на прашалникот после креирање на индекси (индексите го успоруваат прашалникот)


Last modified 8 months ago Last modified on 03/15/24 20:49:33

Attachments (20)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.