powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Очень долгий autovacuum (to prevent wraparound)
25 сообщений из 104, страница 2 из 5
Очень долгий autovacuum (to prevent wraparound)
    #39192482
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

так у вас периодически висят длинные открытые транзакции кроме вакуумов, или не висят ?

вы уж как нить определитесь. мониторинг там, биту для любителей держать открытые клиентские транзакции сутками, прочее. простейший джоб отстрела висяков.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192544
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

Смотрим сессии
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT count(*)                                                  "pgsql.sess.total",
       count(CASE WHEN state = 'idle' THEN 1 END)                "pgsql.sess.idle",
       count(case WHEN state = 'idle in transaction' THEN 1 END) "pgsql.sess.idlexid",
       count(CASE WHEN NOT state ~~ 'idle%' AND NOT waiting THEN 1 END)        "pgsql.sess.active",
       count(CASE WHEN NOT state ~~ 'idle%' AND waiting THEN 1 END)            "pgsql.sess.waiting",
       count(CASE WHEN age(now(), backend_start) BETWEEN '0' AND '15s' THEN 1 END)       "pgsql.sess.age[15s]",
       count(CASE WHEN age(now(), backend_start) BETWEEN '16s' AND '60s' THEN 1 END)     "pgsql.sess.age[60s]",
       count(CASE WHEN age(now(), backend_start) BETWEEN '61s' AND '300s' THEN 1 END)    "pgsql.sess.age[300s]",
       count(CASE WHEN age(now(), backend_start) BETWEEN '301s' AND '600s' THEN 1 END)   "pgsql.sess.age[600s]",
       count(CASE WHEN age(now(), backend_start) BETWEEN '601s' AND '1800s' THEN 1 END)  "pgsql.sess.age[1800s]",
       count(CASE WHEN age(now(), backend_start) BETWEEN '1801s' AND '3600s' THEN 1 END) "pgsql.sess.age[3600s]",
       count(CASE WHEN age(now(), backend_start) > '3600s' THEN 1 END)                   "pgsql.sess.age[max]"
  FROM pg_stat_activity;


Всех `idle in transaction` — мочить. Всех дольше 5 минут и не активных — мочить.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192603
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov, qwwq,

таких долгих транзакций конечно нет, запросы к БД идут, но все в штатном режиме. Где-то находил похожую проблему у человека висели prepared transactions
Код: plsql
1.
select * from  pg_prepared_xacts;


у меня такого нет.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192614
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сейчас сделал
Код: plsql
1.
SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r' order by age(relfrozenxid) desc;



и age уже другой для таблиц.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192626
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusKЯ сейчас сделал
Код: plsql
1.
SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r' order by age(relfrozenxid) desc;



и age уже другой для таблиц.сюрпайс, сюрпайс


я тут распинаюсь про беличье колесо, а до кого-то так и не доходит. замечательно приторможенные люди таки одмины. хехе
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192632
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

что это все значит? :)
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192638
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

age меняется каждый запрос
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192645
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusKqwwq,

age меняется каждый запросвозраст отсчитывается от текушего txid, а он меняется со скоростью потока пишущих транзакций. поэтому даже если фрозентксид стоит -- его возраст растёт.

там цилиндрическая координата txid. с несколькими выколотыми точками. например "2" -- всегда в абсолютном прошлом.

и вот всю эту кухню надо каждую эпоху проворачивать. хотя бы читать (если архивы).
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192649
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

автовакуумы приходят и уходят, такое ощущение, что он по всем таблицам проходится. Или так и должно быть? Я думал "эпоха" считается для каждой таблицы отдельно.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192705
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusKавтовакуумы приходят и уходят, такое ощущение, что он по всем таблицам проходится. Или так и должно быть? Я думал "эпоха" считается для каждой таблицы отдельно.
автовакуум должен пройти по всем таблицам, у которых age() > autovacuum_freeze_max_age. которые из ваших попадают под условие легко проверить, как и то, сколько осталось.

да, эпоха считается для каждой отдельно. это просто разница между текущей транзакией (txid_current()) и самой старой из транзакций в таблице. естественно, если ничего не делать, то возраст будет расти, и чем больше пишущая активность, тем быстрее он растёт.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192716
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

только что закончился вакуум нескольких таблиц, но у них age опять больше чем autovacuum_freeze_max_age (age(relfrozenxid) > 200000000), т.е. какой-то бесконечный цикл получается
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192728
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

Какая версия базы? У вас стоят все bugfix релизы в вашей ветке?

Закончившийся autovacuum — он был обычный или to prevent wraparound?

Что будет если руками сделать VACUUM FREEZE таблице?
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192730
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

а можно включить log_autovacuum_min_duration = 1000 (1000 мс) например и показать что в логах будет писаться?
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192734
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovVerusKавтовакуумы приходят и уходят, такое ощущение, что он по всем таблицам проходится. Или так и должно быть? Я думал "эпоха" считается для каждой таблицы отдельно.
автовакуум должен пройти по всем таблицам, у которых age() > autovacuum_freeze_max_age. которые из ваших попадают под условие легко проверить, как и то, сколько осталось.

да, эпоха считается для каждой отдельно. это просто разница между текущей транзакией (txid_current()) и самой старой из транзакций в таблице. естественно, если ничего не делать, то возраст будет расти, и чем больше пишущая активность, тем быстрее он растёт.

age (возраст) считается отдельно
а эпоха -- это количество циклов txid по беззнаковому (если не ошибаюсь) целому. оно как минимум одно для базы. как максимум -- для инстанса (не проверял).

----------------------------
скорее всего у него старый запуск вакуума произошёл во время висячей длинной транзакции -- вот они все и старые. он же туда не лазил. он проверяет зачем-то распределенные транзакции, хотя это лишнее.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192752
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

- версия 9.4.5
- закончившийся autovacuum — to prevent wraparound, вообще сейчас только такие вакуумы и стартуют
- vacuum freeze не делал, не дает сделать запущенный автовакуум

Alexius, ничего в логах не увидел про автовакуум
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192754
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

попробовал запустить на другой таблице и получил вот такое сообщение:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
ho2=# VACUUM FREEZE action_flows;
WARNING:  oldest xmin is far in the past
HINT:  Close open transactions soon to avoid wraparound problems.
WARNING:  oldest xmin is far in the past
HINT:  Close open transactions soon to avoid wraparound problems.
DEBUG:  transaction ID wrap limit is 2604342112, limited by database with OID 19489
DEBUG:  MultiXactId wrap limit is 2147483648, limited by database with OID 19489
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192783
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

А кол-во таблиц у которых age() > 2e8 уменьшается?

Я бы поступил так:
- выцыганил бы окно на несколько часов
- опустил бы базу аккуратно (pg_ctl -m fast stop)
- накатил бы 9.4.6, хоть и нет там ничего вокруг autovacuum'а
- поменял бы `listen_addresses` на умолчательный — только локальные подключения
- запуил бы базу и мониторил бы как она морозиться и есть ли эффект


Далее по обстановке.

P.S. Всё же приведите вывод запроса по сессиям который я постил.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192809
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

Код: sql
1.
select * from pg_database


?
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192811
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее:

Код: sql
1.
select oid, * from pg_database
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192813
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя нет -- oid увидел на скринах
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192815
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK,

проведите замер темпов прироста txid_current() -- чтобы понять ,что у вас там крутится. а то вдруг у вас сейвпойнт на сейвпойнте сидит и сейпойнтом погоняет.
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192851
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusKvyegorov,

попробовал запустить на другой таблице и получил вот такое сообщение:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
ho2=# VACUUM FREEZE action_flows;
WARNING:  oldest xmin is far in the past
HINT:  Close open transactions soon to avoid wraparound problems.
WARNING:  oldest xmin is far in the past
HINT:  Close open transactions soon to avoid wraparound problems.
DEBUG:  transaction ID wrap limit is 2604342112, limited by database with OID 19489
DEBUG:  MultiXactId wrap limit is 2147483648, limited by database with OID 19489



Ок попробую я вмешаться.

Номер 1:
Код: plsql
1.
select * from pg_stat_activity where now()-xact_start>'120 min'::interval; 


на мастер базе что то показывает?

Номер 2:
Вы кажется упоминали про реплику, на реплике что показывают:
Код: plsql
1.
[SRC PLSQL]show hot_standby_feedback;

[/SRC]
Код: plsql
1.
select * from pg_stat_activity where now()-xact_start>'120 min'::interval;



Номер 3:
На мастере
show max_replication_slots;
и
Код: plsql
1.
select pg_current_xlog_location(),pg_xlog_location_diff(pg_current_xlog_location(), replay_location) as replay_lag,* from pg_stat_replication;



Я почему то склоняюсь к том что проблему найдем на вопросе 2.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192873
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

1. https://www.dropbox.com/s/q6j532240cnwea6/select___from_pg_stat_activity_where_now.csv?dl=0
2. hot_standby_feedback - off
Код: plsql
1.
select * from pg_stat_activity where now()-xact_start>'120 min'::interval;

- ничего не показал
3. max_replication_slots - 3
https://www.dropbox.com/s/qp8mcgrbeq88uej/select_pg_current_xlog_location___pg_xlo.csv?dl=0

qwwq,
txid_current - 5229543838
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192882
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerusK<>
qwwq,
txid_current - 5229543838одна буква -- это ниачом
темпы нужны. т.е. сколько их у вас в час
<<10^6
~10^6
>>10^6
...
Рейтинг: 0 / 0
Очень долгий autovacuum (to prevent wraparound)
    #39192887
VerusK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

1023262 - столько набежало сейчас, не в пиковое время, примерно за 45 минут, т.е. в час примерно 1364400. В пиковые часы будет в 2 раза больше

P.S. все началось примерно с того как мы ввели replication slots и завели Slony. Было это почти одновоременно. replication slots как то могли повлиять? Просто есть смысл попробовать выключить все по очереди
...
Рейтинг: 0 / 0
25 сообщений из 104, страница 2 из 5
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Очень долгий autovacuum (to prevent wraparound)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]