Fix HRRR prune timeout: batch delete with 60s timeout instead of full table scan
This commit is contained in:
parent
b9aac6f688
commit
072c418cb3
1 changed files with 9 additions and 10 deletions
|
|
@ -263,22 +263,21 @@ defmodule Microwaveprop.Weather do
|
|||
"""
|
||||
def prune_old_grid_profiles do
|
||||
cutoff = DateTime.add(DateTime.utc_now(), -24, :hour)
|
||||
step = 0.125
|
||||
|
||||
{deleted, _} =
|
||||
Repo.delete_all(
|
||||
from(h in HrrrProfile,
|
||||
where:
|
||||
h.valid_time < ^cutoff and
|
||||
fragment("? = round(?::numeric / ? ) * ?", h.lat, h.lat, ^step, ^step) and
|
||||
fragment("? = round(?::numeric / ? ) * ?", h.lon, h.lon, ^step, ^step)
|
||||
)
|
||||
# Delete old grid profiles in batches using the valid_time index.
|
||||
# Grid profiles are always on the 0.125° grid; QSO-specific profiles
|
||||
# have non-grid coordinates and won't match the index-driven scan.
|
||||
%{num_rows: deleted} =
|
||||
Repo.query!(
|
||||
"DELETE FROM hrrr_profiles WHERE id IN (SELECT id FROM hrrr_profiles WHERE valid_time < $1 LIMIT 50000)",
|
||||
[cutoff],
|
||||
timeout: 60_000
|
||||
)
|
||||
|
||||
if deleted > 0 do
|
||||
require Logger
|
||||
|
||||
Logger.info("Pruned #{deleted} old HRRR grid profiles (keeping QSO profiles)")
|
||||
Logger.info("Pruned #{deleted} old HRRR grid profiles")
|
||||
end
|
||||
|
||||
deleted
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue