powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сжать большую таблицу
14 сообщений из 14, страница 1 из 1
Сжать большую таблицу
    #39071002
Pavel Bobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Описание проблемы:
Таблица размером - 365 Гб данные, 238 Гб индексы.

| Size | External Size
------------------------------------------+------------+---------------
| 635 GB | 269 GB

Вакуум на таблице включен, когда захожу в pgAdmin, то:
Последняя очистка - 0
Последний анализ - 0
Последняя автоочистка - 0
Последний автоанализ - 0

Пытался на ней запускать pgcompacttable - как только он доходит до шага VACUUM public.таблица поднимается блокировка autovacuum (to prevent workaround) и висит так....неделю висело так ничего и не произошло.

Попытался использовать pg_repack - но он делают сначала копию таблицы, а на диске осталось всего 200 Гб. Не вариант.

Попытался ночью выставить на самой таблицы ALTER TABLE таблица SET (autovacuum_enabled = false) - снова поднимается процесс autovacuum (to prevent workaround).

Ребята, как быть? подскажите, пожалуйста.
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071041
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel Bobrovnikov,

Дайте угадаю:
В конфиге стоит autovacuum = off ?

Остальные параметр - по умолчанию?


По поводу проблемки читайте здесь : пункт 23.1.5. Preventing Transaction ID Wraparound Failures
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071048
Pavel Bobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursido,

autovacuum = on
autovacuum_max_workers = 10
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071070
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel Bobrovnikov,

Очень странно.

Чему равны
maintenance_work_mem
vacuum_freeze_table_age

Есть ли транзакции в статусе IDLE IN TRANSACTION ? Есть ли вообще длительные висящие транзакции?
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071090
Pavel Bobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maintenance_work_mem = 3GB
work_mem = 3GB
#vacuum_freeze_table_age = 150000000 (закоменчен)

ursidoЕсть ли транзакции в статусе IDLE IN TRANSACTION ?

Нет таких.

ursidoЕсть ли вообще длительные висящие транзакции?

autovacuum: VACUUM таблица (to prevent wraparound)

висит с 28 сентября.
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071123
Pavel Bobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в таблице приблизительно строк - 5051900000
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071224
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel Bobrovnikov,

можно вывод select name, setting from pg_settings where name ~'vacuum'; ?

диски не перегружены при работе? ssd или нет? нужно бы to prevent wraparound автовакууму дать доработать, от этого никак не уйти. если диски не перегружены, нужно дать автовакууму больше ресурсов.

таблица insert only?
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39071227
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel Bobrovnikov, почему Вы решили что таблица вообще может сжаться? Может быть это её естественный размер?

покажите:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select version();

select name, setting, source from pg_settings where name ~ 'vacuum';

select c.reloptions, t.reloptions
from pg_class c
left join pg_class t on c.reltoastrelid = t.oid
where c.oid = 'public.таблица'::regclass;



что это за сервер? виртуалка?
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39072924
pbobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quote Alexius]можно вывод select name, setting from pg_settings where name ~'vacuum'; ?/quote]

autovacuum | on
autovacuum_analyze_scale_factor | 0.05
autovacuum_analyze_threshold | 50
autovacuum_freeze_max_age | 9000000000
autovacuum_max_workers | 3
autovacuum_multixact_freeze_max_age | 400000000
autovacuum_naptime | 3600
autovacuum_vacuum_cost_delay | 60
autovacuum_vacuum_cost_limit | -1
autovacuum_vacuum_scale_factor | 0.2
autovacuum_vacuum_threshold | 50
log_autovacuum_min_duration | -1
vacuum_cost_delay | 0
vacuum_cost_limit | 200
vacuum_cost_page_dirty | 20
vacuum_cost_page_hit | 1
vacuum_cost_page_miss | 10
vacuum_defer_cleanup_age | 0
vacuum_freeze_min_age | 50000000
vacuum_freeze_table_age | 150000000
vacuum_multixact_freeze_min_age | 5000000
vacuum_multixact_freeze_table_age | 150000000

[quote Alexius]диски не перегружены при работе? ssd или нет? нужно бы to prevent wraparound автовакууму дать доработать, от этого никак не уйти. если диски не перегружены, нужно дать автовакууму больше ресурсов./quote]

Ни заббикс, ни окметр не говорят о перегруженности дисков. База на ССД. Как дать автовакууму больше ресурсов? где подкрутить?

[quote Alexius] таблица insert only? /quote]
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39072933
pbobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, таблица в основном на запись. Но раз в 2 недели из нее удаляются записи.

авторPavel Bobrovnikov, почему Вы решили что таблица вообще может сжаться? Может быть это её естественный размер?

Подумал так из-за того, что на ней ни разу получается не было вакуума.

PostgreSQL 9.3.6 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120
313 (Red Hat 4.4.7-11), 64-bit
(1 row)

=# select c.reloptions, t.reloptions
from pg_class c
left join pg_class t on c.reltoastrelid = t.oid
where c.oid = 'd_session'::regclass;
reloptions | reloptions
------------+------------
|
(1 row)

Железный сервер.
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39072934
pbobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pbobrovnikov,

max_workers = 10. Цифра 3 - с другого сервера снял
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39074262
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pbobrovnikov autovacuum_vacuum_cost_delay | 60


для начала стоит попробовать уменьшить этот параметр, у вас почему-то он прописан больше чем дефолтное значение (20ms). уменьшать до тех пор, пока диски держат нагрузку (до 5-20).

autovacuum_naptime тоже довольно большой прописан зачем-то. если помимо этой таблицы есть еще мелкие часто обновляемые - то стоит его снизить.
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39076820
li_malina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel Bobrovnikov,

Для начала посмотрите
select relname,age(relfrozenxid) from pg_class where relname='имя таблицы'

autovacuum_freeze_max_age | 9000000000-c таким значением этого параметра avtovacuum нина какой таблице не начнется
по умолчанию это значение 200 000 000, а счетчик транзакций ограничен 2 000 000 000
...
Рейтинг: 0 / 0
Сжать большую таблицу
    #39084860
Pavel Bobrovnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, проблема решилась следующий образом:

Процесс "autovacuum table (to prevent wraparound)" доработал до конца сам и таблицу я смог свакуумировать и запустить на ней pg_compacttable. Уменьшил 150 Гб на диске.

Спасибо всем за помощь!

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


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