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
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] Вывести последнюю цену товара и когда она была назначена. |