@@ -28,20 +28,37 @@ source ./scripts/utils.sh
2828# Example:
2929# refresh_mviews_group "WATER" 180 "${water_views[@]}" &
3030# ============================================================================
31+ LIGHT_WORK_MEM=" 64MB"
32+ LIGHT_MAINT_MEM=" 256MB"
33+ HEAVY_WORK_MEM=" 512MB"
34+ HEAVY_MAINT_MEM=" 4GB"
35+
3136function refresh_mviews_group() {
3237 local group_name=" $1 "
3338 local sleep_interval=" $2 "
34- shift 2
39+ local mem_profile=" ${3:- light} " # "light" or "heavy"
40+ shift 3
3541 local materialized_views=(" $@ " )
3642
43+ local work_mem=" $LIGHT_WORK_MEM "
44+ local maint_mem=" $LIGHT_MAINT_MEM "
45+ if [ " $mem_profile " = " heavy" ]; then
46+ work_mem=" $HEAVY_WORK_MEM "
47+ maint_mem=" $HEAVY_MAINT_MEM "
48+ fi
49+
3750 while true ; do
3851 for mview in " ${materialized_views[@]} " ; do
39- log_message " [$group_name ] Refreshing $mview ..."
52+ log_message " [$group_name ] Refreshing $mview (work_mem= $work_mem , maintenance_work_mem= $maint_mem ) ..."
4053 local error_output
4154 # Disable statement_timeout for long-running refresh operations (0 = no limit)
4255 local exit_code=0
4356 local start_time=$SECONDS
44- error_output=$( psql " $PG_CONNECTION " -v ON_ERROR_STOP=1 -c " SET statement_timeout = 0" -c " REFRESH MATERIALIZED VIEW CONCURRENTLY $mview ;" 2>&1 ) || exit_code=$?
57+ error_output=$( psql " $PG_CONNECTION " -v ON_ERROR_STOP=1 \
58+ -c " SET statement_timeout = 0" \
59+ -c " SET work_mem = '$work_mem '" \
60+ -c " SET maintenance_work_mem = '$maint_mem '" \
61+ -c " REFRESH MATERIALIZED VIEW CONCURRENTLY $mview ;" 2>&1 ) || exit_code=$?
4562 local elapsed=$(( SECONDS - start_time))
4663 if [ $exit_code -eq 0 ]; then
4764 log_message " [$group_name ] ✅ Successfully refreshed $mview . Time: ${elapsed} s"
@@ -249,18 +266,21 @@ no_admin_boundaries_views=(
249266)
250267
251268
252- refresh_mviews_group " ADMIN_BOUNDARIES_LINES" 60 " ${admin_boundaries_lines_views[@]} " &
253- refresh_mviews_group " ADMIN_BOUNDARIES_AREAS_CENTROIDS" 180 " ${admin_boundaries_areas_centroids_views[@]} " &
254- refresh_mviews_group " ADMIN_MARITIME_LINES" 300 " ${admin_maritime_lines_views[@]} " &
255- refresh_mviews_group " TRANSPORTS" 180 " ${transport_views[@]} " &
256- refresh_mviews_group " AMENITY" 180 " ${amenity_views[@]} " &
257- refresh_mviews_group " LANDUSE" 180 " ${landuse_views[@]} " &
258- refresh_mviews_group " OTHERS" 180 " ${others_views[@]} " &
259- refresh_mviews_group " COMMUNICATION" 180 " ${communication_views[@]} " &
260- refresh_mviews_group " PLACES" 180 " ${places_views[@]} " &
261- refresh_mviews_group " WATER" 180 " ${water_views[@]} " &
262- refresh_mviews_group " BUILDINGS" 180 " ${buildings_views[@]} " &
263- refresh_mviews_group " ROUTES" 180 " ${routes_views[@]} " &
269+ # Heavy groups - admin boundaries have the largest tables
270+ refresh_mviews_group " ADMIN_BOUNDARIES_LINES" 60 heavy " ${admin_boundaries_lines_views[@]} " &
271+ refresh_mviews_group " ADMIN_BOUNDARIES_AREAS_CENTROIDS" 180 heavy " ${admin_boundaries_areas_centroids_views[@]} " &
272+
273+ # Light groups - smaller tables, minimal resources
274+ refresh_mviews_group " ADMIN_MARITIME_LINES" 300 light " ${admin_maritime_lines_views[@]} " &
275+ refresh_mviews_group " TRANSPORTS" 180 heavy " ${transport_views[@]} " &
276+ refresh_mviews_group " AMENITY" 180 light " ${amenity_views[@]} " &
277+ refresh_mviews_group " LANDUSE" 180 light " ${landuse_views[@]} " &
278+ refresh_mviews_group " OTHERS" 180 light " ${others_views[@]} " &
279+ refresh_mviews_group " COMMUNICATION" 180 light " ${communication_views[@]} " &
280+ refresh_mviews_group " PLACES" 180 light " ${places_views[@]} " &
281+ refresh_mviews_group " WATER" 180 light " ${water_views[@]} " &
282+ refresh_mviews_group " BUILDINGS" 180 light " ${buildings_views[@]} " &
283+ refresh_mviews_group " ROUTES" 180 light " ${routes_views[@]} " &
264284
265285# # This group high demand, so we refresh every 1 hour
266- refresh_mviews_group " NO_ADMIN_BOUNDARIES" 36000 " ${no_admin_boundaries_views[@]} " &
286+ refresh_mviews_group " NO_ADMIN_BOUNDARIES" 36000 light " ${no_admin_boundaries_views[@]} " &
0 commit comments