powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Vacuum Full без полного лока таблицы
25 сообщений из 154, страница 4 из 7
Vacuum Full без полного лока таблицы
    #37054173
905
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
планирую использовать, на тестах ведет себя хорошо
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37374634
daevy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk Спасибо тебе за твой инструмент, очень полезная разработка. Приведу результат применения:

# select relname,relpages from pg_class where relname = 'products';
products | 497671 # до использования
products | 224612 # после использования

# SELECT pg_size_pretty(pg_total_relation_size('products'));
5753 MB # до использования
3699 MB # после использования

# SELECT pg_size_pretty(pg_relation_size('products'));
3888 MB # до использования
1825 MB # после использовия
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37422337
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не хочет работать от пользователя postgres. Требует пароль:
failed: fe_sendauth: no password supplied at /etc/postgresql/9.0/UTF8/vacuum_table.pl line 732

В то же время для работы psql вполне хватает ident в pghba_conf.

Что я делаю не так?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37422446
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tadminУ меня не хочет работать от пользователя postgres. Требует пароль:
failed: fe_sendauth: no password supplied at /etc/postgresql/9.0/UTF8/vacuum_table.pl line 732

В то же время для работы psql вполне хватает ident в pghba_conf.

Что я делаю не так?

хм забавный эффект да... спасибо за report.

сейчас софтина написана так что она по unix socket вообще не пытается ходить (так было проще на первом этаме)
и если --host не указан используется --host=localhost т.е. tcp в любом случае
а ident работает только с unix socket коннектами

если вы попробуете сделать что то вида psql -U username -h localhost вас запросит пароль.

Это скорее бага чем фича но быстро я ее сейчас не вылечу (там прийдется ковырять более одного места).
Предложения или:

1)прописать trust на 127.0.0.1 в pg_hba.conf

2)или внести пароль в ~/.pgpass

3)или подождать пару дней когда у меня появится время на выходных и я эту проблему устраню (возможно даже сегодня но обещать не буду).
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37422799
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

спасибо, что-то я не подумал.
Сделать работу через сокет было бы здорово. Мало ли кто представится postgres'ом c локалхоста.....
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37425793
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Maxim BogukТак что остаются 3 варианта если у вас таблица распухла...

Забыли самый прямой путь - перекинуть данные во временную таблицу, truncate текущую, закинуть данные обратно. На ваших 20 гиг займет несколько минут даже при наличии индексов. При желании можно копировать инкрементально и рули повесить переадресующие на актуальную в текущий момент копию, если уж простой ~1 минуты критичен (а тормоза всего проекта в течении суток - это нормально?.. а если дедлок словите, пока вас на месте нет?).
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37425966
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗабыли самый прямой путь - перекинуть данные во временную таблицу, truncate текущую, закинуть данные обратно.
тут ! очень важно не забыть повесить ! блокировочку какую-нибудь на таблицу в начале всего этого мероприятия. иначе можно потерять изменения между исходным копированием во временную таблицу и транкейтом. плюс транкейт сама по себе имеет эффекты - параллельные транзакции могут получать пустоту.

http://www.postgresql.org/docs/current/static/sql-truncate.html - Warning номер 1 тут

--

но в целом подход рабочий, поддерживаю. подобное юзаю для редко обновляемых больших таблиц, которые иногда могут распухать после массовых апдейтов.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37426178
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Misha Tyurin,

Еще вопрос... а почему партиционирование не применяете? Скажем, по месяцам - тогда зачастую старые таблицы используются как read-only и их можно беспроблемно сжимать, да и размер данных в каждой таблице на порядки уменьшается. Если дело в специфике задачи, интересно было бы услышать подробности (хотя, вероятнее, БД унаследована в таком виде).
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37426407
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG,

часть "объектов" у меня живут "вечно", и крутятся туда - сюда, жизненный цикл потенциально бесконечный у них. это пока продут потому что так устроен, менять надо с самого верха. занимаемся и этим.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Vacuum Full без полного лока таблицы
    #38318364
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

в 9.2 баг при выполнении реиндексов из-за переименования pg_stat_activity.procpid в pg_stat_activity.pid:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ERROR:  column "procpid" does not exist
LINE 4: ...::integer) from pg_locks join pg_stat_activity on procpid=pi...
                                                             ^
query '
SELECT
coalesce(
	(SELECT max(extract(epoch from now()-xact_start)::integer) from pg_locks join pg_stat_activity on procpid=pid where relation=280866::regclass and database=(select oid from pg_database where datname=current_database()))
	,0
)
' asked for 1 rows but got total 0 rows as answer



исправил у себя заменой в 414 строке
Код: sql
1.
(SELECT max(extract(epoch from now()-xact_start)::integer) from pg_locks join pg_stat_activity on procpid=pid where relation=${relid}::regclass and database=(select oid from pg_database where datname=current_database()))


на
Код: sql
1.
(SELECT max(extract(epoch from now()-xact_start)::integer) from pg_locks join pg_stat_activity using(pid) where relation=${relid}::regclass and database=(select oid from pg_database where datname=current_database()))
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38318658
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,
вот тут Postgresql-consulting.ru развитие
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38318792
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexiusMaxim Boguk,

в 9.2 баг при выполнении реиндексов из-за переименования pg_stat_activity.procpid в pg_stat_activity.pid:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ERROR:  column "procpid" does not exist
LINE 4: ...::integer) from pg_locks join pg_stat_activity on procpid=pi...
                                                             ^
query '
SELECT
coalesce(
	(SELECT max(extract(epoch from now()-xact_start)::integer) from pg_locks join pg_stat_activity on procpid=pid where relation=280866::regclass and database=(select oid from pg_database where datname=current_database()))
	,0
)
' asked for 1 rows but got total 0 rows as answer



исправил у себя заменой в 414 строке
Код: sql
1.
(SELECT max(extract(epoch from now()-xact_start)::integer) from pg_locks join pg_stat_activity on procpid=pid where relation=${relid}::regclass and database=(select oid from pg_database where datname=current_database()))


на
Код: sql
1.
(SELECT max(extract(epoch from now()-xact_start)::integer) from pg_locks join pg_stat_activity using(pid) where relation=${relid}::regclass and database=(select oid from pg_database where datname=current_database()))



собственно современная разработу живет вот тут вот
https://code.google.com/p/pgtoolkit/downloads/list
там этой проблемы быть не должно
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38495203
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Решил попробовать на базе в 200 гб(до этого создавал дубль индексов и удалял старые версии).

Запустил
Код: powershell
1.
perl /usr/bin/pgcompact --all --reindex -v info  -c 500 -E 1


таблица размером 8900mb индексы 7670 mb обрабатывалась 42 часа, размер таблицы стал 6220, индексов 8559 в данный момент идет обработка следующей таблицы 35 gb индексы 51 gb за шесть дней прогресс 20%
shared_buffers 3 gb
temp_buffers 16 mb
work_mem 12 mb
maintenance_work_mem 128 mb

vacuum_cost_delay,10
vacuum_cost_limit,200
vacuum_cost_page_dirty,20
vacuum_cost_page_hit,1
vacuum_cost_page_miss,10

Вопрос в следующем можно ли как-нибудь ускорить работу pgcompact?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38495361
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте стандартные настройки без -c 500 -E 2
Вам точно нужен принудительный reindex? Как мне кажется, это нужно при активных изменениях по PK
Еще можно maintenance_work_mem поднять конкретно в этой сессии.


У меня база в два раза меньше, самая большая таблица ~10G, но все на порядок быстрее.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38495618
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин ЕвтеевДобрый день!
Решил попробовать на базе в 200 гб(до этого создавал дубль индексов и удалял старые версии).

Запустил
Код: powershell
1.
perl /usr/bin/pgcompact --all --reindex -v info  -c 500 -E 1


таблица размером 8900mb индексы 7670 mb обрабатывалась 42 часа, размер таблицы стал 6220, индексов 8559 в данный момент идет обработка следующей таблицы 35 gb индексы 51 gb за шесть дней прогресс 20%
shared_buffers 3 gb
temp_buffers 16 mb
work_mem 12 mb
maintenance_work_mem 128 mb

vacuum_cost_delay,10
vacuum_cost_limit,200
vacuum_cost_page_dirty,20
vacuum_cost_page_hit,1
vacuum_cost_page_miss,10

Вопрос в следующем можно ли как-нибудь ускорить работу pgcompact?

ускорить
1)--delay-ratio=0 и -с не ставить
2)vacuum_cost_delay = 0 в конфиге (я почти уверен что 90% времени проводится в vacuum а не в самом компакторе)
3)если 2 невозможно то вызывать с --no-routine-vacuum

чтобы не пухли индексы: вызывать с --reindex (это вообще всегда полезно)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778085
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!

Попробовал срипт на пг 9.3, вот так ругнулось:
Код: sql
1.
ERROR: column "procpid" does not exist



Я так понимаю в скрипте нужно исправить "procpid" на "pid" ?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778095
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yura31Доброе время суток!

Попробовал срипт на пг 9.3, вот так ругнулось:
Код: sql
1.
ERROR: column "procpid" does not exist



Я так понимаю в скрипте нужно исправить "procpid" на "pid" ?

обновить версию на более свежую для начала
( например с https://github.com/PostgreSQL-Consulting/pgcompacttable )
у вас что то очень древнее по виду текста ошибки.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778137
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за овет!
С свн брал. Это не одно и тоже?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778139
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ааа, все увидел! Спасибо еще раз! :)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778253
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
Код: sql
1.
2.
3.
4.
dbname=# select pg_size_pretty(pg_relation_size( 'table_name' )) as pg_relation_size, pg_size_pretty(pg_total_relation_size( 'table_name' )) as pg_total_relation_size;
 pg_relation_size | pg_total_relation_size 
------------------+------------------------
 6806 MB          | 18 GB





Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
./pgcompact -h 127.0.0.1 0 -U postgres --dbname dbname -t table_name --reindex -v info --no-routine-vacuum
Wed Oct 15 22:15:03 2014 INFO Database connection method: DBI/Pg.
Wed Oct 15 22:15:03 2014 dbname INFO Created environment.
Wed Oct 15 22:15:03 2014 dbname NOTICE Statictics calculation method: approximation.
Wed Oct 15 22:58:21 2014 dbname, public.table_name INFO Vacuum initial: 871154 pages left, duration 2597.573 seconds.
Wed Oct 15 22:58:21 2014 dbname, public.table_name NOTICE Statistics: 871154 pages (2363415 pages including toasts and indexes), approximately 11.49% (100092 pages) can be compacted reducing the size by 782 MB.
Wed Oct 15 22:58:21 2014 dbname, public.table_name INFO Skipping processing: 11.49% space to compact from 20% minimum required.
Wed Oct 15 22:58:21 2014 dbname NOTICE Processing complete.
Wed Oct 15 22:58:21 2014 dbname NOTICE Processing results: size reduced by 0 bytes (120 kB including toasts and indexes) in total.
Wed Oct 15 22:58:21 2014 NOTICE Processing complete: 0 retries from 10.
Wed Oct 15 22:58:21 2014 NOTICE Processing results: size reduced by 0 bytes (120 kB including toasts and indexes) in total, 0 bytes (120 kB) dbname.



Больше половины места свободоно на разделе с базой
/dev/sdb1 191G 90G 102G 47% /mnt/sdb

На кореневом правда
/dev/sda1 16G 12G 3.3G 78% /

Подскажите пож в чем проблема?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778269
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неверное опять не оттуда взял :)
https://github.com/grayhemp/pgtoolkit - вот здесь наверное свежая версия.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38778294
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yura31Maxim Boguk,
Код: sql
1.
2.
3.
4.
dbname=# select pg_size_pretty(pg_relation_size( 'table_name' )) as pg_relation_size, pg_size_pretty(pg_total_relation_size( 'table_name' )) as pg_total_relation_size;
 pg_relation_size | pg_total_relation_size 
------------------+------------------------
 6806 MB          | 18 GB





Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
./pgcompact -h 127.0.0.1 0 -U postgres --dbname dbname -t table_name --reindex -v info --no-routine-vacuum
Wed Oct 15 22:15:03 2014 INFO Database connection method: DBI/Pg.
Wed Oct 15 22:15:03 2014 dbname INFO Created environment.
Wed Oct 15 22:15:03 2014 dbname NOTICE Statictics calculation method: approximation.
Wed Oct 15 22:58:21 2014 dbname, public.table_name INFO Vacuum initial: 871154 pages left, duration 2597.573 seconds.
Wed Oct 15 22:58:21 2014 dbname, public.table_name NOTICE Statistics: 871154 pages (2363415 pages including toasts and indexes), approximately 11.49% (100092 pages) can be compacted reducing the size by 782 MB.
Wed Oct 15 22:58:21 2014 dbname, public.table_name INFO Skipping processing: 11.49% space to compact from 20% minimum required.
Wed Oct 15 22:58:21 2014 dbname NOTICE Processing complete.
Wed Oct 15 22:58:21 2014 dbname NOTICE Processing results: size reduced by 0 bytes (120 kB including toasts and indexes) in total.
Wed Oct 15 22:58:21 2014 NOTICE Processing complete: 0 retries from 10.
Wed Oct 15 22:58:21 2014 NOTICE Processing results: size reduced by 0 bytes (120 kB including toasts and indexes) in total, 0 bytes (120 kB) dbname.



Больше половины места свободоно на разделе с базой
/dev/sdb1 191G 90G 102G 47% /mnt/sdb

На кореневом правда
/dev/sda1 16G 12G 3.3G 78% /

Подскажите пож в чем проблема?

так в чем ваша проблема то?
в таблице 11% свободного места...
если всеравно хочеться ее сжать то --force добавьте (но смысла сжимать таблицу с 10% свободного маста немного).
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38782247
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Вы правы, нет места в таблицы.
Что делать в таких случаях?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38782382
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yura31Спасибо!
Вы правы, нет места в таблицы.
Что делать в таких случаях?

а что вы хотите получить?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #38782818
yura31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как поступать с таблицами в которых не достаточна места?
...
Рейтинг: 0 / 0
25 сообщений из 154, страница 4 из 7
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Vacuum Full без полного лока таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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