Changes between Version 1 and Version 2 of QueryOptimization


Ignore:
Timestamp:
05/26/26 16:51:07 (24 hours ago)
Author:
231018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v1 v2  
    55Целта е да се испитаат перформансите при пребарување и обработка на податоци поврзани со прекршоци, возила, казни, камери и корисници, како и да се идентификуваат потенцијални проблеми при извршување на прашалниците.
    66
    7 Во оваа фаза ќе се анализираат плановите на извршување, ќе се утврдат најбавните операции и ќе се изврши оптимизација со помош на индекси и подобрување на прашалниците, со цел системот да обезбеди поефикасно и побрзо извршување при работа со големи количини на податоци.
     7Преку користење на ''EXPLAIN ANALYZE'' ќе се анализираат плановите на извршување, ќе се утврдат најбавните операции и ќе се изврши оптимизација со помош на индекси и подобрување на прашалниците, со цел системот да обезбеди поефикасно и побрзо извршување при работа со големи количини на податоци.
     8
     9
     10=== Анализа на View3: Сопственици на возила ===
     11
     12Прашалникот кој ќе го тестираме е следниот:
     13
     14{{{
     15-- 3A: приказ на сите возила заедно со нивните сопственици
     16SELECT *
     17FROM vw_sopstvenici_na_vozila;
     18
     19}}}
     20
     21{{{
     22-- 3B: анализа на планот на извршување
     23EXPLAIN ANALYZE
     24SELECT *
     25FROM vw_sopstvenici_na_vozila;
     26}}}
     27
     281. Примарен филтер за погледот `vw_sopstvenici_na_vozila` ќе биде според `vozilo_id` или `registarska_oznaka`. Погледот ќе се користи за брз приказ на податоци за возило и негов сопственик.
     29
     302. Примарен случај на употреба ќе биде пребарување и преглед на информации за возила и нивните сопственици. За овој поглед перформансите се важни, бидејќи табелите `Vozilo`, `Sopstvenik_Vozilo` и `Gragjanin` содржат голем број записи.
     31
     32= Време на извршување без индекси: =
     33
     34'''3A - 3 s'''
     35
     36Прашалникот успешно ги прикажува сите возила заедно со нивните сопственици преку поврзување на табелите `Vozilo`, `Sopstvenik_Vozilo` и `Gragjanin`.
     37
     38При извршување на прашалникот `SELECT * FROM vw_sopstvenici_na_vozila;`, DataGrip прикажува време на извршување од приближно 3 секунди. Ова време е прифатливо според поставениот критериум дека оптимизација и дополнително индексирање се врши само доколку времето е поголемо од 3 секунди.
     39
     40Бидејќи прашалникот враќа повеќе од 1.200.000 редови, очекувано е да постои поголемо време на извршување поради количината на податоци што треба да се обработат и прикажат.
     41
     42'''3B - Анализа на планот на извршување'''
     43{{{
     44Gather  (cost=102725.44..259522.66 rows=1200350 width=66)
     45(actual time=1342.828..1853.740 rows=1200350 loops=1)
     46
     47Workers Planned: 2
     48Workers Launched: 2
     49
     50-> Parallel Hash Join
     51(cost=101725.44..138487.66 rows=500146 width=66)
     52(actual time=1318.410..1603.201 rows=400117 loops=3)
     53
     54Hash Cond: (sv.embg = g.embg)
     55
     56-> Parallel Hash Join
     57(cost=26091.54..48846.88 rows=500146 width=40)
     58(actual time=410.265..621.322 rows=400117 loops=3)
     59
     60Hash Cond: (sv.vozilo_id = v.vozilo_id)
     61
     62-> Parallel Seq Scan on sopstvenik_vozilo sv
     63(cost=0.00..12647.46 rows=500146 width=18)
     64(actual time=0.048..55.599 rows=400117 loops=3)
     65
     66-> Parallel Hash
     67(cost=17797.13..17797.13 rows=428913 width=26)
     68(actual time=243.205..243.206 rows=443210 loops=3)
     69
     70-> Parallel Seq Scan on vozilo v
     71(cost=0.00..17797.13 rows=428913 width=26)
     72(actual time=0.051..101.953 rows=443210 loops=3)
     73
     74-> Parallel Hash
     75(cost=64512.62..64512.62 rows=499462 width=54)
     76(actual time=521.096..521.097 rows=666570 loops=3)
     77
     78-> Parallel Seq Scan on gragjanin g
     79(cost=0.00..64512.62 rows=499462 width=54)
     80(actual time=15.121..235.455 rows=666570 loops=3)
     81
     82Planning Time: 0.835 ms
     83
     84Execution Time: 1899.811 ms
     85}}}
     86
     87Од добиениот план на извршување може да се забележи дека PostgreSQL користи `Parallel Seq Scan` врз табелите `sopstvenik_vozilo`, `vozilo` и `gragjanin`. Тоа значи дека системот секвенцијално чита голем број записи од табелите со цел да ги поврзе потребните податоци.
     88
     89Дополнително, се користат `Parallel Hash Join` операции преку колоните `vozilo_id` и `embg`, што покажува дека PostgreSQL прави hash-based поврзување на големи множества податоци.
     90
     91Во планот на извршување може да се забележи дека:
     92- табелата `sopstvenik_vozilo` враќа околу 400117 редови,
     93- табелата `vozilo` враќа околу 443210 редови,
     94- табелата `gragjanin` враќа околу 666570 редови.
     95
     96Поради големиот број записи и отсуството на дополнителни филтри (`WHERE` услови), PostgreSQL мора да обработи повеќе од 1.200.000 редови, што резултира со поголемо време на извршување.
     97
     98Во планот е прикажано `Execution Time: 1899.811 ms`, односно приближно 1.9 секунди. Разликата помеѓу ова време и времето прикажано во DataGrip (`3 s`) се должи на тоа што DataGrip дополнително го пресметува и времето потребно за прикажување на резултатите во табеларен приказ.
     99
     100Бидејќи времето на извршување е прифатливо и не го надминува поставениот праг од 3 секунди, за овој поглед нема потреба од дополнително индексирање.
     101
     102
     103
     104
     105
    8106
    9107
    10108=== Анализа на View1: Неплатени казни во последните 2 недели ===
     109
     110{{{
     111-- 1A: сите прекршоци регистрирани од конкретна камера
     112SELECT *
     113FROM prekrsoci_po_kamera
     114WHERE kamera_id = 5;
     115
     116-- 1B: последни прекршоци регистрирани од камерите
     117SELECT *
     118FROM prekrsoci_po_kamera
     119ORDER BY datum DESC
     120LIMIT 10;
     121}}}
     122 
     1231. Примарен филтер за погледот vw_neplateni_kazni_posledni_2_nedeli ќе биде според датумот на казната, односно ќе се прикажуваат само казните креирани во последните 14 дена. Дополнително, погледот може да се користи и за пребарување според сторител, возило или регистарска ознака.
     124
     1252. Примарен случај на употреба ќе биде преглед на неплатени казни од последните две недели, со цел администрацијата да има увид кои казни сè уште немаат извршено плаќање. За овој поглед перформансите се важни, бидејќи се користат повеќе поврзани табели како Kazna, Prekrsok, Gragjanin, Vozilo и Plakanje.
     126
     1273. Иницијалното време за извршување на погледот е ____ ms / ____ s.