Autovacuum, Vacuum & репликация - Mailing list pgsql-ru-general

From Dmitry E. Oboukhov
Subject Autovacuum, Vacuum & репликация
Date
Msg-id 20160215085247.GU11360@vdsl.uvw.ru
Whole thread Raw
List 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.999rows=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.913rows=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@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment

pgsql-ru-general by date:

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