Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сжать большую таблицу / 14 сообщений из 14, страница 1 из 1
07.10.2015, 17:18
    #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
07.10.2015, 17:40
    #39071041
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжать большую таблицу
Pavel Bobrovnikov,

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

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


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

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

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

Чему равны
maintenance_work_mem
vacuum_freeze_table_age

Есть ли транзакции в статусе IDLE IN TRANSACTION ? Есть ли вообще длительные висящие транзакции?
...
Рейтинг: 0 / 0
07.10.2015, 18:08
    #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
07.10.2015, 18:24
    #39071123
Pavel Bobrovnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжать большую таблицу
в таблице приблизительно строк - 5051900000
...
Рейтинг: 0 / 0
07.10.2015, 20:25
    #39071224
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжать большую таблицу
Pavel Bobrovnikov,

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

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

таблица insert only?
...
Рейтинг: 0 / 0
07.10.2015, 20:30
    #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
09.10.2015, 13:55
    #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
09.10.2015, 13:59
    #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
09.10.2015, 14:01
    #39072934
pbobrovnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжать большую таблицу
pbobrovnikov,

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


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

autovacuum_naptime тоже довольно большой прописан зачем-то. если помимо этой таблицы есть еще мелкие часто обновляемые - то стоит его снизить.
...
Рейтинг: 0 / 0
14.10.2015, 18:36
    #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
23.10.2015, 14:45
    #39084860
Pavel Bobrovnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжать большую таблицу
Ребят, проблема решилась следующий образом:

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

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

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


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