WITH unique_records AS (
SELECT DISTINCT ON (old_id) id, old_id, update_at
FROM table_a
ORDER BY old_id, update_at DESC
),
record_mapping AS (
SELECT
table_b.nm_id AS nm_id,
unique_records.id AS new_record_id
FROM table_b
JOIN unique_records
ON table_b.supplier_id = unique_records.old_id
WHERE table_b.nm_id IN (
SELECT nm_id FROM table_c
)
)
UPDATE table_c
SET seller_id = record_mapping.new_record_id
FROM record_mapping
WHERE table_c.nm_id = record_mapping.nm_id
AND table_c.seller_id != record_mapping.new_record_id;
есть такой запрос
в контекст особо смысла вникать нет
единственное: в каждой таблице миллионы записей, и есть ряд воркеров, которые на периодической основе делают insert, update таблиц учавствующих в запросе.
запрос выполняется за разные отрезки времени, может выполниться за 20 секунд, а может за 500
я не могу отловить причину такого разброса, есть подозрение что не хватает ресурсов i/o
если выполнить такой запрос:
SELECT pid,
pg_blocking_pids(pid),
wait_event_type,
state,
left(query,50) AS query
FROM pg_stat_activity
WHERE pid IN (SELECT pid FROM pg_stat_activity WHERE state = 'active');
Пытался посмотреть не блокирует ли его другой процесс, но нет: 0
select pg_blocking_pids(pid) as blocked_by
from pg_stat_activity
where cardinality(pg_blocking_pids(pid)) > 0;
вот что видно в графане
как понять почему он отрабатывает за разные промежутки времени ?