powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не собирается мусор, распухает таблица
22 сообщений из 22, страница 1 из 1
Не собирается мусор, распухает таблица
    #38747462
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Столкнулись со следующей проблемой. Таблица pgq.subscription распухает.
Автовакуум не всегда помогает. Вакум фулл так же не может собрать мусор.

INFO: "subscription": found 0 removable, 677525 nonremovable row versions in 5698 out of 5701 pages
DETAIL: 677492 dead row versions cannot be removed yet.

Я не понимаю почему вакум фулл не может собрать мусор? На сколько я понимаю он должен установить эксклюзивную блокировку, дождаться всех и почистить.

Как определить из-за чего такое происходит? Что можно сделать?
Вроде бы нет таких длинных транзакций.
Единственное что есть, очень много обращений на чтение с нашей стороны к этой таблице, ну и наверно на запись со стороны pgq.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747470
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostgreSQL 9.3.4 on x86_64-pc-linux-gnu, compiled by x86_64-pc-linux-gnu-gcc (Gentoo 4.6.3 p1.13, pie-0.5.2) 4.6.3, 64-bit
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747506
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемы начались при увеличении нагрузки на pgq - добавление очередей/обработчиков и londsite.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747507
daevy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Artemiy,

а пробовали остановить pgqd перед вакуумом?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747534
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daevy,

Сегодня нет, ночью мусор сам почистился. Хотелось бы как то штатно проблему решить без хаков.
Интересует причины и что можно сделать. Пока причины не понятны.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747688
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiydaevy,

Сегодня нет, ночью мусор сам почистился. Хотелось бы как то штатно проблему решить без хаков.
Интересует причины и что можно сделать. Пока причины не понятны.

Причины совершенно очевидны - длинная открытая транзакция которая может видеть эти ваши удаленные строки так как была начата до операции удаления. Оставлять открытые транзакции часами и не иметь их отстрела или хотябы мониторинга - надежный способ сделать postgresql очень больно.


--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747818
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, у нас были такие предположения.

кроме такого запроса чем еще можно помониторить длинные транзакции?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 
  pid, 
  datname as dbname, 
  usename as username, 
  application_name, 
  client_addr, 
  client_hostname, 
  xact_start as tr_start_time, 
  query_start,
  state_change,
  waiting,
  state,
  query
from pg_stat_activity
where xact_start < NOW() - interval '5 minutes';



Есть ли возможность определить какая именно транзакция/сессия мешает собрать мусор по конкретной таблице/индексу?
Разве vacuum full не должен ждать пока закончится транзакция?

От длинных транзакций избавляемся потихоньку. Что можно сделать как временное решение пока нет возможности избавиться от всех долгих транзакций?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747822
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avtovacuum идущий на другой таблице, с 10 утра, так же является помехой да?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38747870
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел такую полезную утилиту
http://bucardo.org/check_postgres/check_postgres.pl.html#txn_time
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38748024
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Кроме такого запроса чем еще можно помониторить длинные транзакции?
а чем запрос то плох? я бы еще добавил туда в select list now()-xact_start as ts_age
и order by xact_start
чтобы в верху видеть главных виновников

>>Есть ли возможность определить какая именно транзакция/сессия мешает собрать мусор по конкретной таблице/индексу?
Любая/все транзакции. А точнее любая открытая транзакция не дает удалить мусор из таблицы который образовался после старта этой самой транзакции так как это не мусор а данные с которыми она может работать и по этому удалять их нельзя.

>>Разве vacuum full не должен ждать пока закончится транзакция?
Транзакция которая с конкретной вашей таблицей работает - да должен (изза блокировок) а остальные ждать нет не должен.

>>Что можно сделать как временное решение пока нет возможности избавиться от всех долгих транзакций?
1)отстреливать их кроном чем то типа
* * * * * psql -d postgres -t -c "SELECT pg_terminate_backend(pid),now(),now()-xact_start as duration,* from pg_stat_activity where (now() - pg_stat_activity.xact_start) > '5 min'::interval and usename NOT IN ('postgres')"
заодно сразу выясните какой код и где более длинные транзакции держит и будет повод его исправить оперативно...
или
2)использовать pgcompacttable ( https://github.com/PostgreSQL-Consulting/pgcompacttable ), он во всяком случае не требует блокировок таблиц на время сжатия и вообще сильно более вежливый в работе и никому в процессе работы не мешает.
или
3)мучаться пока код не причешете

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38748415
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk, спасибо за ответы. это совпадает с моими представлениями.

А можно в двух словах сравнение pgcompacttable с pgcompactor?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38748417
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiy,

> INFO: "subscription": found 0 removable, 677525 nonremovable row versions in 5698 out of 5701 pages
> DETAIL: 677492 dead row versions cannot be removed yet.

у вас 5701 * 8KB размер таблицы -- это 40 MB -- это же совсем мало, что вас смущает то?

далее.
сколько у вас очередей и консумеров, как вы их создаёте, по какому принципу?
включен ли автовакуум, правили ли его настройки?

у меня, например, в базе есть несколько очередей и несколько консумеров, вся таблица subscription ~ 10 строк, и весит 3MB.

но если будет висеть транзакция на сутки -- думаю, тоже может вырасти раз в 10ть, а то и больше.
длинные транзакции плохо, да!

--
> avtovacuum идущий на другой таблице, с 10 утра, так же является помехой да?

нет, он ни при чем.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38748430
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemiyMaxim Boguk, спасибо за ответы. это совпадает с моими представлениями.

А можно в двух словах сравнение pgcompacttable с pgcompactor?

форк... по сути одинаковые...
у pgcompacttable убрана куча лишних опций и упрощено благодаря этому код сильно
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38748648
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> avtovacuum идущий на другой таблице, с 10 утра, так же является помехой да?
> нет, он ни при чем.

все таки причем или нет? он же выполняется в рамках обычной транзакции, разве нет?

по поводу бд. система большая, очередей и подписчиков много, много событий.
проблема в том что когда скапливается мусор, меняется план и запрос выборки из очереди или получения статуса подписчиков занимает по 1,5 сек, когда обычно 15 мс.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38749572
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiy,

> все таки причем или нет? он же выполняется в рамках обычной транзакции, разве нет?

нет. там нету "обычной транзакции".
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38749573
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiy,

> выборки из очереди или получения статуса подписчиков занимает по 1,5 сек, когда обычно 15 мс.
"выборки из очереди"
скорее всего дело не в распухшей таблице, а в кол-ве событий.

вы уверены, что точно локализовали проблему?

> меняется план и запрос выборки из очереди
какой план?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38749702
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

Меняется план внутренних запросов pgq, которые в хранимках.

Можете подробнее объяснить про "не обычную транзакцию" ?

All,
Есть еще мнения по автовакууму?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38749709
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiy,

> план внутренних запросов pgq

какой из планов?
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38749746
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

Точно не помню, когда были тормоза разбирался и видел не верные планы. В хранимке get_consumer_info. Съезжают планы, в которых участвует таблица pgq.subscribers, т.к. постгрес считает что в ней 600 к записей, а там их 15.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38750885
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiy,

> Можете подробнее объяснить про "не обычную транзакцию" ?

ух, какой вы дотошный. себя узнаю.

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

мой коллега, Ёш, нашел точные ссылки:

http://doxygen.postgresql.org/vacuum_8c_source.html#l01082
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
static bool vacuum_rel
...
/*
...
* other concurrent VACUUMs know that they can ignore this one while
* determining their OldestXmin
...


а тут собственно и игонорим
http://doxygen.postgresql.org/procarray_8c_source.html#l01205
Код: plaintext
1.
2.
if (ignoreVacuum && (pgxact->vacuumFlags & PROC_IN_VACUUM))
             continue;
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38750900
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha TyurinArtemiy,

> Можете подробнее объяснить про "не обычную транзакцию" ?

ух, какой вы дотошный. себя узнаю.

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

мой коллега, Ёш, нашел точные ссылки:

http://doxygen.postgresql.org/vacuum_8c_source.html#l01082
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
static bool vacuum_rel
...
/*
...
* other concurrent VACUUMs know that they can ignore this one while
* determining their OldestXmin
...


а тут собственно и игонорим
http://doxygen.postgresql.org/procarray_8c_source.html#l01205
Код: plaintext
1.
2.
if (ignoreVacuum && (pgxact->vacuumFlags & PROC_IN_VACUUM))
             continue;



полезная информация... я подозревал что так и есть но до уровня кода не залезал в этой части.
...
Рейтинг: 0 / 0
Не собирается мусор, распухает таблица
    #38752256
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin

Благодарю за столь подробное объяснение.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не собирается мусор, распухает таблица
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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