wiki:AdvancedTopics

Version 4 (modified by 231267, 5 days ago) ( diff )

--

Напредна тема - партиционирање

Членови на тим:

  • 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.

No image "upcoming_index_result.png" attached to AdvancedTopics

Ако поставиме индекс на новиот поглед и го тестираме може да видиме дека добиваме време на извршување од 170ms.

No image "new_upcoming_index_result" attached to AdvancedTopics

Погледот season_standing

Овој поглед враќа статистики за секој тим во секоја сезона. Во него се извршува спојување со дуели кои се веќе изминати. Ова има потенцијал за подобрување со партиционирање.

Првин ќе го адаптираме за да корсити партициони и ќе добиеме ваков поглед:

No image "new_season_standing.png" attached to AdvancedTopics

Ако извршиме анализа на стариот поглед добиваме време на извршување 3909ms.

No image "season_standing_analyzis.png" attached to AdvancedTopics

Сега ако извршиме проверка на новиот поглед со партиционирање може да видиме дека имаме минимално убрзување, со добиено време на извршување 2659ms.

Ако сега додадеме индекс на стариот поглед го добиваме овој резултат:

No image "season_standing_index_result.png" attached to AdvancedTopics

Ако истото направиме кај новиот поглед го добиваме овие резултати.

No image "new_season_standing_index_result.png" attached to AdvancedTopics

Се гледа со индексирање се намалува времето на извршување од 120ms на 42ms.

Заклучок

Можеме да заклучиме дека во поголемите случаи добиваме подобрување при извршувањње на погледите. Но комбинација со правилно индексирање може да се добие уште подобро убрзвуање.

Attachments (33)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.