Autovacuum, Vacuum & репликация

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Autovacuum, Vacuum & репликация
Date: 2016-02-15 08:52:47
Message-ID: 20160215085247.GU11360@vdsl.uvw.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Есть хост у которого на одной из таблиц делается иногда массовый (относительно)

UPDATE
table
SET
bla
WHERE
id = 123

при этом автоваккуум с этой таблицей не справляется (размер у 50
мегабайтовой VACUUM таблицы достигает 2 гигабайта).
Но поскольку только с одной таблицей проблемы, то ее вакуум
в крон дополнительно сунули и вроде проблема решилась.

Интересно что перед VACUUMом EXPLAIN начинает показывать очень доглие
выборки из нее, а после VACUUM скорость нормализуется

вот один из простых запросов EXPLAIN до VACUUM:

Index Scan using orders_status_phones_ostatus_key on orders o (cost=0.56..7.26 rows=1 width=4) (actual time=0.277..3848.999 rows=139 loops=1)
Index Cond: (status = 'transporting'::text)
Filter: ((transporting_time IS NOT NULL) AND ("time" >= (now() - '168:00:00'::interval)))
Rows Removed by Filter: 1
Total runtime: 3849.109 ms
(5 строк)

и его же EXPLAIN после VACUUM:

Index Scan using orders_status_phones_ostatus_key on orders o (cost=0.56..7.26 rows=1 width=4) (actual time=0.242..39.913 rows=125 loops=1)
Index Cond: (status = 'transporting'::text)
Filter: ((transporting_time IS NOT NULL) AND ("time" >= (now() - '168:00:00'::interval)))
Rows Removed by Filter: 1
Total runtime: 40.036 ms
(5 строк)

выборка 100-150 строк по индексу с последующим простым фильтром
(который отфильтровывает одну строку).

Проблема в целом понятна, непонятно что делать с репликой.

На реплике нет ни одного клиента, однако она после VACUUM на мастере
продолжает выполнять этот же запрос за 1300-4000 мс еще минут 30-40.
С тем же EXPLAIN.
То есть на реплике EXPLAIN показывается все время по первому
вышеприведенному варианту, а на мастере по второму.

Что с репликой можно сделать чтобы у нее тоже время работы
запроса тоже нормализовалось?

команды VACUUM к запуску на реплике запрещены.

Реплика показывает что она вполне себе не отстает от мастера ни на
команду. Однако при нулевой нагрузке выполняет запросы еще где-то
30-40 минут в 20-100 раз медленнее чем мастер (у которого нагрузка
серьезная).
Железки мастер-слейв полностью идентичные, конфиг одинаков.
кеширование вроде не при чем: статистика полностью повторяется при
повторах.

Если сделать REINDEX на мастере, то и на реплике при этом
нормализуется жизнь. Но как-то не хочется проблемы реплик
решать на мастере.

--

. ''`. Dmitry E. Oboukhov
: :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537

Browse pgsql-ru-general by date

  From Date Subject
Next Message Nikolay Samokhvalov 2016-03-11 19:02:45 [анонс] Встреча #PostgreSQLRussia в банке Тинькофф 05.04.2016 в Москве
Previous Message Dmitriy Olshevskiy 2016-02-09 13:26:40 Re: Re: [pgsql-ru-general] Вывести последнюю цену товара и когда она была назначена.