Changes between Version 2 and Version 3 of Monitoring


Ignore:
Timestamp:
05/18/26 10:13:06 (8 days ago)
Author:
213192
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Monitoring

    v2 v3  
    1 === Мониторинг
    2 
    3 == Benchmark Report – Оптимизација на индекси и query-и во PostgreSQL
     1== Мониторинг
     2
     3=== Benchmark Report – Оптимизација на индекси и query-и во PostgreSQL
    44
    55Целта на оваа анализа е да се испита влијанието на индексите, query оптимизацијата, scan стратегиите, join операциите и sorting механизмите врз перформансите на PostgreSQL при извршување на комплексни аналитички SQL query-иња.
     
    128128Ако ги споредиме резултатите пред и по оптимизацијата ќе видиме дека времето на извршување се намалило 4119мс -> 3325мс, за transfers access наместо Seq Scan користиме Index Only Scan и за appearances access наместо Seq Scan користиме Partial Index Only Scan. Најголемо подобрување имаме во EXISTS subquery-то поради индексот на transfers, додека appearances не е целосно оптимизирано и сеуште има heap fetches, односно PostgreSQL мора да оди во table pages. Најголем проблем останува join explosion.
    129129
    130 
    131 
    132 
     130Овој пример ќе го извршиме и со CTEs табели и ќе видиме дали има разлика пред и по оптимизацијата.
     131
     132{{{
     133EXPLAIN (ANALYZE, BUFFERS)
     134WITH expensive_players AS (
     135    SELECT DISTINCT player_id
     136    FROM transfers
     137    WHERE transfer_fee > 10000000
     138),
     139player_appearances AS (
     140    SELECT
     141        player_id,
     142        COUNT(DISTINCT game_id) AS appearances
     143    FROM appearances
     144    GROUP BY player_id
     145    HAVING COUNT(DISTINCT game_id) > 20
     146),
     147latest_value AS (
     148    SELECT DISTINCT ON (player_id)
     149        player_id,
     150        market_value_in_eur,
     151        date
     152    FROM player_valuations
     153    ORDER BY player_id, date DESC
     154),
     155market_stats AS (
     156    SELECT
     157        player_id,
     158        AVG(market_value_in_eur) AS avg_market_value,
     159        MAX(market_value_in_eur) AS max_market_value
     160    FROM player_valuations
     161    GROUP BY player_id
     162)
     163SELECT
     164    p.player_id,
     165    p.last_name,
     166    pa.appearances,
     167    ms.avg_market_value,
     168    ms.max_market_value,
     169    lv.market_value_in_eur AS latest_market_value
     170FROM players p
     171JOIN expensive_players ep
     172    ON p.player_id = ep.player_id
     173JOIN player_appearances pa
     174    ON p.player_id = pa.player_id
     175JOIN market_stats ms
     176    ON p.player_id = ms.player_id
     177JOIN latest_value lv
     178    ON p.player_id = lv.player_id
     179ORDER BY ms.max_market_value DESC
     180LIMIT 5000;
     181}}}
     182
     183{| class="wikitable sortable" style="text-align:center; width:100%;"
     184! Metric
     185! Non-CTE Query
     186! WITH CTE Query
     187
     188! Improvement / Observation
     189Execution Time
     190~3274 ms
     191~1753 ms
     192✅ ~46% побрзо извршување
     193-
     194Final Rows Returned
     1951038
     196690
     197✅ Помал финален dataset
     198-
     199Intermediate Rows Processed
     200~9.25M rows
     201~15k rows
     202Огромно намалување на обработени редови
     203-
     204Join Explosion
     205Многу висок
     206Значително намален
     207 Подобар execution flow
     208-
     209Scan Strategy
     210Hash Right Join + Seq Scan
     211Merge Join + Index Scan
     212✅ Пооптимизиран planner strategy
     213-
     214Seq Scan Usage
     215Високо
     216Намалено
     217✅ Помал full table scanning
     218-
     219Index Usage
     220Делумно искористени индекси
     221Значително подобро искористени индекси
     222✅ Подобрен access path
     223-
     224Temporary Files
     225✅ Да
     226❌ Не
     227✅ Нема disk spill
     228-
     229Disk Spill
     230✅ External spill
     231❌ Нема spill
     232✅ Подобра memory utilization
     233-
     234Sort Performance
     235Temp read/write operations
     236In-memory quicksort
     237✅ Побрзо сортирање
     238-
     239Buffers Hit
     240~92k
     241~947k
     242⚠️ Повеќе cache processing поради index traversal
     243-
     244Heap Fetches
     245Високи
     246Сè уште присутни
     247⚠️ Visibility map не е целосно оптимизиран
     248-
     249Planner Complexity
     250Висока
     251Подобро организирана
     252✅ Cleaner execution plan
     253-
     254Aggregation Cost
     255Многу висока
     256Намалена
     257✅ Помал aggregation workload
     258-
     259Overall Efficiency
     260Тежок аналитички query
     261Значително поефикасен query
     262}
     263
     264
     265
     266
     267