Напредна тема - партиционирање
Членови на тим:
- Aлександар Тодороски 231153
- Антонио Трајковски 231156
- Вељко Аџиќ 231267
Табелата DUEL има многу податоци и таа е една од наважниите и најголемите табели во нашиот систем. Барањето податоци ни неа е бавен процес и поради тоа искористивме партиционирање. Оваа ни помага да имаме многу добри перформанси при пребараување на податоци низ оваа табела, и кога користиме прашалници да не ја изминнуваме целата табела, туку дел кој е потребен.
Партиционирање на табелата
Прво и основно, ние хористиме range партиционирање бидејќи имаме време кога се оддржал дуелот па најдобро е да правиме според тоа.
Вењќе имаме DDL и податоци пополнети во нашиот систем ќе креираме нова табела каде ќе ставиме по што да партиционираме, затоа имаме PARTITION BY RANGE(duel_date).
Потоа мора да направиме поделби за секоја партиција од кога до кога да биде. Затоа тука креираме нова табела DUEL_YEARS_RANGES и ќе ги генерираме датумите на опсезите. Потоа со циклус ќе ги креираме генерираните партициите на NEW_DUEL со додделено име во формат'new_duel_' + year.
Мигрирање податоци во NEW_DUEL
Одкако ги креираме партициите, ќе треба да се мигрираат податоците од старата табела во новата. Тоа го извршуваме со кверито подолу.
Бидејќи ги копираме сите податоци од една табела во друга, вклучувајќи го и id кое е декларирано како SERIAL, секвенцата на id во нова табела не се ажурира и потребно е да се мигрира секвенцата. Тоа се извршува на следен начин:
Табелите TEAM_ROSTER, REFEREEING_DUEL и SCORE ја референцираат табелата DUEL треба и нив да ги мигрираме. Затоа ги имаме креирано следниве табели:
Овие табели исто треба да се мигрираат на следниот начин:
По ова, со помош на ALTER TABLE ќе ги поставиме старите ограничувања на новите табелите.
Тестирање погледи
Одкако завршивме со миграции потребно е да провериме дали ни го намалува времето на извршување. Ќе извршиме споредба на неколку погледи без партиционирање и со партиционирање.
Погледот upcoming_duels
Овој поглед враќа податоци за дуели што се во иднина, ова е добар кандидат да се провери партиционирање.
Треба да го прилагодиме за партиционирање, така што ќе мора да смениме start_time со duel_date, затоа новиот поглед ќе изгледа вака:
Прво ќе го провериме стариот поглед без индекси.
И добиваме ваков резултат:
Сега ако го провериме новиот поглед добиваме ваков реззултат:
Можеме да видиме дека имаме поодбрување од 1662ms на 314ms.
Сега ќе искористиме индекс на погледо:
Може да видиме индексот ни го намалува времето на извршување на 606ms.
Ако поставиме индекс на новиот поглед и го тестираме може да видиме дека добиваме време на извршување од 170ms.
Погледот season_standing
Овој поглед враќа статистики за секој тим во секоја сезона. Во него се извршува спојување со дуели кои се веќе изминати. Ова има потенцијал за подобрување со партиционирање.
Првин ќе го адаптираме за да корсити партициони и ќе добиеме ваков поглед:
Ако извршиме анализа на стариот поглед добиваме време на извршување 3909ms.
Сега ако извршиме проверка на новиот поглед со партиционирање може да видиме дека имаме минимално убрзување, со добиено време на извршување 2659ms.
Ако сега додадеме индекс на стариот поглед го добиваме овој резултат:
Ако истото направиме кај новиот поглед го добиваме овие резултати.
Се гледа со индексирање се намалува времето на извршување од 120ms на 42ms.
Заклучок
Можеме да заклучиме дека во поголемите случаи добиваме подобрување при извршувањње на погледите. Но комбинација со правилно индексирање може да се добие уште подобро убрзвуање.
Attachments (33)
- new_duel.png (17.9 KB ) - added by 22 hours ago.
- duel_year_ranges.png (68.7 KB ) - added by 22 hours ago.
- new_duel_migrate.png (33.8 KB ) - added by 22 hours ago.
- new_duel_sequence.png (19.0 KB ) - added by 22 hours ago.
- new_tables.png (29.7 KB ) - added by 22 hours ago.
- migrate_tables.png (69.5 KB ) - added by 22 hours ago.
- new_score_sequence.png (19.6 KB ) - added by 22 hours ago.
- constraints.png (125.1 KB ) - added by 22 hours ago.
- new_upcoming_duels.png (64.7 KB ) - added by 21 hours ago.
- upcoming_analyze.png (15.8 KB ) - added by 21 hours ago.
- upcoming_result.png (27.0 KB ) - added by 21 hours ago.
- new_upcoming_analyze.png (16.0 KB ) - added by 21 hours ago.
- new_upcoming_result.png (27.1 KB ) - added by 21 hours ago.
- new_upcoming_index.png (20.1 KB ) - added by 20 hours ago.
- new_upcoming_index_result_1.png (20.4 KB ) - added by 20 hours ago.
- new_upcoming_index_result_2.png (5.9 KB ) - added by 20 hours ago.
- upcoming_index_result_1.png (27.4 KB ) - added by 20 hours ago.
- upcoming_index.png (36.6 KB ) - added by 20 hours ago.
- upcoming_index_result_2.png (4.4 KB ) - added by 20 hours ago.
- season_standing.png (122.6 KB ) - added by 20 hours ago.
- new_season_standing_1.png (70.5 KB ) - added by 20 hours ago.
- new_season_standing_2.png (109.1 KB ) - added by 20 hours ago.
- new_season_standing_3.png (109.1 KB ) - added by 20 hours ago.
- season_standing_analyzis_1.png (16.6 KB ) - added by 20 hours ago.
- season_standing_analyzis_2.png (7.1 KB ) - added by 20 hours ago.
- new_season_standing_analyzis_1.png (126.8 KB ) - added by 20 hours ago.
- new_season_standing_analyzis_2.png (7.2 KB ) - added by 20 hours ago.
- season_standing_index_result_1.png (16.5 KB ) - added by 20 hours ago.
- season_standing_index_result_2.png (6.8 KB ) - added by 20 hours ago.
- new_season_standing_index.png (54.4 KB ) - added by 20 hours ago.
- new_season_standing_index_result_1.png (151.1 KB ) - added by 20 hours ago.
- new_season_standing_index_result_2.png (6.9 KB ) - added by 20 hours ago.
- season_standing_index.png (50.9 KB ) - added by 20 hours ago.
Download all attachments as: .zip

































