Changes between Version 2 and Version 3 of QueryOptimization


Ignore:
Timestamp:
05/26/26 17:00:28 (2 weeks ago)
Author:
231018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v2 v3  
    11= Оптимизација на прашалници и погледи =
    22
    3 Во оваа фаза ќе се изврши анализа и оптимизација на погледите дефинирани во претходната фаза преку прашалници базирани на реални сценарија кои би се користеле во рамки на системот '''Safe City Security'''. 
     3Во оваа фаза ќе се изврши анализа и оптимизација на погледите дефинирани во претходната фаза преку прашалници базирани на реални сценарија кои би се користеле во рамки на системот '''Safe City Security'''.
    44
    55Целта е да се испитаат перформансите при пребарување и обработка на податоци поврзани со прекршоци, возила, казни, камери и корисници, како и да се идентификуваат потенцијални проблеми при извршување на прашалниците.
     
    88
    99
    10 === Анализа на View3: Сопственици на возила ===
     10== Анализа на View3: Сопственици на возила ==
    1111
    12 Прашалникот кој ќе го тестираме е следниот:
     12Прашалниците кои ќе ги тестираме се следните:
    1313
    1414{{{
     
    1717FROM vw_sopstvenici_na_vozila;
    1818
    19 }}}
    20 
    21 {{{
    2219-- 3B: анализа на планот на извршување
    2320EXPLAIN ANALYZE
     
    30272. Примарен случај на употреба ќе биде пребарување и преглед на информации за возила и нивните сопственици. За овој поглед перформансите се важни, бидејќи табелите `Vozilo`, `Sopstvenik_Vozilo` и `Gragjanin` содржат голем број записи.
    3128
    32 = Време на извршување без индекси: =
     29
     30'''Време на извршување без индекси:'''
    3331
    3432'''3A - 3 s'''
     
    4038Бидејќи прашалникот враќа повеќе од 1.200.000 редови, очекувано е да постои поголемо време на извршување поради количината на податоци што треба да се обработат и прикажат.
    4139
    42 '''3B - Анализа на планот на извршување'''
     40
     41'''3B - 1904.498 ms'''
     42
    4343{{{
    44 Gather  (cost=102725.44..259522.66 rows=1200350 width=66)
    45 (actual time=1342.828..1853.740 rows=1200350 loops=1)
     44Gather  (cost=107243.47..264426.69 rows=1200350 width=66) (actual time=1347.925..1858.566 rows=1200350 loops=1)
     45  Workers Planned: 2
     46  Workers Launched: 2
     47  ->  Parallel Hash Join  (cost=106243.47..143391.69 rows=500146 width=66) (actual time=1328.027..1605.452 rows=400117 loops=3)
     48        Hash Cond: (sv.embg = g.embg)
     49        ->  Parallel Hash Join  (cost=30609.57..53750.91 rows=500146 width=40) (actual time=433.942..644.238 rows=400117 loops=3)
     50              Hash Cond: (sv.vozilo_id = v.vozilo_id)
     51              ->  Parallel Seq Scan on sopstvenik_vozilo sv  (cost=0.00..12647.46 rows=500146 width=18) (actual time=0.046..54.985 rows=400117 loops=3)
     52              ->  Parallel Hash  (cost=21223.03..21223.03 rows=485403 width=26) (actual time=267.048..267.049 rows=443210 loops=3)
     53                    Buckets: 131072  Batches: 16  Memory Usage: 6144kB
     54                    ->  Parallel Seq Scan on vozilo v  (cost=0.00..21223.03 rows=485403 width=26) (actual time=0.063..124.396 rows=443210 loops=3)
     55        ->  Parallel Hash  (cost=64512.62..64512.62 rows=499462 width=54) (actual time=505.717..505.718 rows=666570 loops=3)
     56              Buckets: 131072  Batches: 32  Memory Usage: 6592kB
     57              ->  Parallel Seq Scan on gragjanin g  (cost=0.00..64512.62 rows=499462 width=54) (actual time=14.767..217.461 rows=666570 loops=3)
     58Planning Time: 0.846 ms
     59JIT:
     60  Functions: 54
     61"  Options: Inlining false, Optimization false, Expressions true, Deforming true"
     62"  Timing: Generation 4.132 ms (Deform 2.153 ms), Inlining 0.000 ms, Optimization 2.183 ms, Emission 42.395 ms, Total 48.710 ms"
     63Execution Time: 1904.498 ms
    4664
    47 Workers Planned: 2
    48 Workers 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 
    54 Hash 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 
    60 Hash 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 
    82 Planning Time: 0.835 ms
    83 
    84 Execution Time: 1899.811 ms
    8565}}}
    8666
     
    9070
    9171Во планот на извршување може да се забележи дека:
    92 - табелата `sopstvenik_vozilo` враќа околу 400117 редови,
    93 - табелата `vozilo` враќа околу 443210 редови,
    94 - табелата `gragjanin` враќа околу 666570 редови.
     72* табелата `sopstvenik_vozilo` враќа околу 400117 редови,
     73* табелата `vozilo` враќа околу 443210 редови,
     74* табелата `gragjanin` враќа околу 666570 редови.
    9575
    9676Поради големиот број записи и отсуството на дополнителни филтри (`WHERE` услови), PostgreSQL мора да обработи повеќе од 1.200.000 редови, што резултира со поголемо време на извршување.
     
    10181
    10282
     83''' Заклучок: '''
    10384
    104 
    105 
    106 
    107 
    108 === Анализа на View1: Неплатени казни во последните 2 недели ===
    109 
    110 {{{
    111 -- 1A: сите прекршоци регистрирани од конкретна камера
    112 SELECT *
    113 FROM prekrsoci_po_kamera
    114 WHERE kamera_id = 5;
    115 
    116 -- 1B: последни прекршоци регистрирани од камерите
    117 SELECT *
    118 FROM prekrsoci_po_kamera
    119 ORDER BY datum DESC
    120 LIMIT 10;
    121 }}}
    122  
    123 1. Примарен филтер за погледот vw_neplateni_kazni_posledni_2_nedeli ќе биде според датумот на казната, односно ќе се прикажуваат само казните креирани во последните 14 дена. Дополнително, погледот може да се користи и за пребарување според сторител, возило или регистарска ознака.
    124 
    125 2. Примарен случај на употреба ќе биде преглед на неплатени казни од последните две недели, со цел администрацијата да има увид кои казни сè уште немаат извршено плаќање. За овој поглед перформансите се важни, бидејќи се користат повеќе поврзани табели како Kazna, Prekrsok, Gragjanin, Vozilo и Plakanje.
    126 
    127 3. Иницијалното време за извршување на погледот е ____ ms / ____ s.
     85Времето на извршување за овој поглед е прифатливо, па затоа не се поставуваат дополнителни индекси.