powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Vacuum Full без полного лока таблицы
25 сообщений из 154, страница 6 из 7
Vacuum Full без полного лока таблицы
    #39669830
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gav21Из 23 часов, последние 8 часов это работа вакуума, который кусками возвращал место в ОС (phase: truncating heap)
(кстати не понял этот момент, почему итерационно. Я ожидал возврат большим куском сразу по аналогии с truncate only в MS SQL :))

Внутренние эффекты реализации в Postgresql.
Если подробно то - фаза truncate она лочит таблицу и на чтение и на запись.
Поскольку делать это надолго вредно (приложение и пользователи будут не рады) то есть максимальная длинна времени насколько vacuum может такой лок взять, и сколько он успеет страниц вернуть с ФС столько и обработает и далее освободит лок и попробует еще раз (и так в цикле).
Отсюда такое странное поведение.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39669863
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
Спасибо! Теперь понятно :)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692337
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим, добрый день (или ночь у вас в Австралии).

Ссылка в первом сообщении недоступна.

Это то, что вы создали:
https://github.com/koordinates/pg_comparator/blob/master/pg_comparator
?



Хочу установить эту штуковину под виндоус.


Подскажите пожалуйста, как это сделать?

plperl уже установлен.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692352
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grufos,

ваши пост прошел.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692382
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
perМаксим, добрый день (или ночь у вас в Австралии).

Ссылка в первом сообщении недоступна.

Это то, что вы создали:
https://github.com/koordinates/pg_comparator/blob/master/pg_comparator
?
Нет, что-то другое.
Актуальный pgcompacttable вот здесь: https://github.com/dataegret/pgcompacttable

perplperl уже установлен.
Не нужен. Нужен только сам perl в ОС и DBI коннектор к pg для него. Со стороны базы - contrib pgstattuple, а plperl не нужен.

Не помню, тестировали ли под такой экзотикой как windows.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692450
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijperМаксим, добрый день (или ночь у вас в Австралии).

Ссылка в первом сообщении недоступна.

Это то, что вы создали:
https://github.com/koordinates/pg_comparator/blob/master/pg_comparator
?
Нет, что-то другое.
Актуальный pgcompacttable вот здесь: https://github.com/dataegret/pgcompacttable

perplperl уже установлен.
Не нужен. Нужен только сам perl в ОС и DBI коннектор к pg для него. Со стороны базы - contrib pgstattuple, а plperl не нужен.

Не помню, тестировали ли под такой экзотикой как windows.

Спасибо, за оперативный ответ!

Оказалось plperl вообще не нужен, а я его именно для pgcompacttable хотел :)

По поводу первой ссылки, не вашей, меня комментарии насторожили, типа "я ненавижу перл" и тп.


Заранее прошу прощения за тупость, но что такое перл вообще не знаю и для постгреса никаких языков ни разу не устанавливал, пользовался из установленного по умолчанию...


Итак, ближе к делу.

Сделал: create extension pgstattuple.

>DBI коннектор к pg для него
пока ищу что это такое.


По ссылке https://github.com/dataegret/pgcompacttable/blob/master/bin/pgcompacttable огромный скрипт:
Код: sql
1.
2.
3.
#!/usr/bin/perl
use strict;
use warnings;... и т.д.



Я так понимаю что его надо сохранить как файл и вызывать perl.exe с этим скриптом, он на вход запросит параметры.
Правильно или я что-то опять не так понял?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692456
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

пока получил ошибку о которой говорил grufos, сейчас попробую последовать его рекомендации.

Код: sql
1.
2.
3.
4.
C:\Windows\system32>perl C:\compacttable
The getpwuid function is unimplemented at C:\install\compacttable line 47.

C:\Windows\system32>
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692463
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grufosПопробовал выполнить и столкнулся с проблемой - функция getpwuid($<) (её просто нет в реализации под windows)
Поискав.. нашел решение - заменить на getlogin()
Заработало!
Попробовал на своей локальной БД (6 Гб). Всё отработало без ошибок.
У меня стоит PostgreSQL 9.4.1 (64 bit)
Возможно мой опыт использования на Windows будет кому-то полезен.



Сделал как вы сказали - действительно заработало!
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692478
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
perЗаранее прошу прощения за тупость, но что такое перл вообще не знаю и для постгреса никаких языков ни разу не устанавливал, пользовался из установленного по умолчанию...
Интерпретируемый язык программирования, один из старейших среди ныне встречаемых. Не имеет отношения к postgresql в общем-то никакого.
plperl - биндинг в перлу. От того, что существуют модули pl/python, pl/sh, да даже прости ктулху pl/v8 и pl/java - сами используемые языки не становятся чем-то специфичным для postgresql. Биндинги с деталями взаимодействия с базой - да, специфичны. Сами языки отдельно.

per>DBI коннектор к pg для него
пока ищу что это такое.
libdbi-perl и libdbd-pg-perl
Для экзотики не скажу.

perПо ссылке https://github.com/dataegret/pgcompacttable/blob/master/bin/pgcompacttable огромный скрипт:
Код: sql
1.
2.
3.
#!/usr/bin/perl
use strict;
use warnings;... и т.д.



Я так понимаю что его надо сохранить как файл и вызывать perl.exe с этим скриптом, он на вход запросит параметры.
Правильно или я что-то опять не так понял?
Скрипт намеренно сделан одним файлом, чтобы его можно wget'ом стянуть, дать файлу права на запуск и пользоваться.
Параметры указываются сразу при запуске. Интерактивного режима работы нет.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692525
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkijper>DBI коннектор к pg для него
пока ищу что это такое.
libdbi-perl и libdbd-pg-perl
Для экзотики не скажу.


Ничего дополнительно не создавал, но к БД подключение есть.

Натравил на тестовую табличку 5 Гб с 99.99% мертвых строк.

Надеюсь получится...





Еще один важный вопрос: не держит ли этот скрипт snapshot БД на начало запуска? Т.е. будут ли хот апдэйты и вакуум отрабатывать на других таблицах для данных стрше времени старта скрипт? Ну вы поняли о чем я :)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692539
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
per,

нет, не держит. Таблица обновляется крошечными пачками в отдельных транзакциях с паузами. Заметные по длительности транзакции возможны во время перестроения индексов (дефолтно после урезания размера таблицы), там create index concurrently без извращений - тут уж насколько ваше железо позволит быстро построить индекс.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692541
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkijper,

нет, не держит. Таблица обновляется крошечными пачками в отдельных транзакциях с паузами. Заметные по длительности транзакции возможны во время перестроения индексов (дефолтно после урезания размера таблицы), там create index concurrently без извращений - тут уж насколько ваше железо позволит быстро построить индекс.

Отлично!

Как раз хотел на счет индексов уточнить, есть ли возможность запустить без перестройки индексов? (чтоб их ночью, например отдельно перестроить)


Кстати, протестировал.

Я очень доволен результатом!


Вот что было:
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692542
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стало


Максим, большое спасибо!

Ваша утилита просто супер!!!


Я бы ее в контриб предложил включить!
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692545
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
perКак раз хотел на счет индексов уточнить, есть ли возможность запустить без перестройки индексов? (чтоб их ночью, например отдельно перестроить)
--no-reindex
У вас настолько плохие диски?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692551
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijperКак раз хотел на счет индексов уточнить, есть ли возможность запустить без перестройки индексов? (чтоб их ночью, например отдельно перестроить)
--no-reindex
У вас настолько плохие диски?


Плохие... Думаю перестройка индекса займет часов 8...

Еще у вас там вроде есть различные опции для уменьшения нагрузки на диск (nice или что-то похожее), будут ли они работать на windows ?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692558
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
per,

ionice -c 3 пробуем вызвать для pid backend'а базы.
Это вас как windows админа надо спросить, есть ли у вас какие-нибудь средства для управления приоритетами i/o. Если есть - то проставьте приоритет backend процессу базы. Помнится pgcompacttable в начале работы даже выводит pid backend'а.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692564
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkijper,

ionice -c 3 пробуем вызвать для pid backend'а базы.
Это вас как windows админа надо спросить, есть ли у вас какие-нибудь средства для управления приоритетами i/o. Если есть - то проставьте приоритет backend процессу базы. Помнится pgcompacttable в начале работы даже выводит pid backend'а.


Так точно, выводит.




Еще важный вопрос: я так понял что compacttable можно запускать с удаленного сервера.

Будет ли в таком случае весь объем таблицы гоняться по сети туда-сюда?

Ну или примерно в % от объема таблицы сколько по сети гнать придется? И на сколько быстрая сеть нужна? Ну вы поняли о чем я спрашиваю :)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39692572
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
per,

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

Запустил на проме по 1 табличке.

Выполняется уже двое суток.


При этом выполнено около 5%.

Таблица объемная, около 300Гб постоянно апдэйтится и инсерется.



В связи с этим возник вопрос:


Я так понял что compacttable переносит данные со всех файлов в несколько первых, максимально заполняя их "живыми" данными.
При этом если будет хоть одна живая запись в конце файла, то он не очистится.

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

1)как то очень медленно для 300GB
или у вас сильно перегруженные механические диски (вместо SSD)
или что то странное...
я бы рекомендовал заодно поставить
--delay-ratio
A dynamic part of the delay between rounds is calculated as previous-round-time * delay-ratio. By default 2.
В 0 вместо 2 по умолчанию если вам скорость критична и будет быстрее раза в 3 (ценой более высокой нагрузки на сервер).

2)При этом если будет хоть одна живая запись в конце файла, то он не очистится.
Получается что compacttable бесполезна при постоянных апдэйтах таблицы? Или я что-то не так понял и файлы таблицы все равно очистятся в итоге?

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

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39705788
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk, добрый день.


В общем, отработала процедурка по огромной таблице.

Но уменьшила ее всего процентов на 5-7, при этом vacuum full уменьшает обычно в два-три раза.

Я все-же думаю это из-за того что выполняется очень долго, и данные, которые вставляются таблицу во время выполнения, не дают очистить файлы таблицы вакуумом, который выполняется по окончанию.


Есть три вопроса:



1) Хочется разобраться с механизмом перестройки индексов.

Я так понял что создается новый индекс конкарентли, с временным именем, затем старый удаляется и новый переименовывается в имя старого, который уделился. Так ли это?


2) Пересоздались ли индексы в этом случае?

В логе такие сообщения:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
[Wed Sep 20 04:39:50 2018] (prod:public.my_big_table) Reindex forced: public.my_big_table_pkey, lock retry 1
[Wed Sep 20 04:39:52 2018] (prod:public.my_big_table) Reindex forced: public.my_big_table_pkey, lock retry 2
...
...
...
[Wed Sep 20 04:39:56 2018] (prod:public.my_big_table) Reindex forced: public.my_big_table_pkey, lock retry 99
[Wed Sep 20 04:39:58 2018] (prod:public.my_big_table) Reindex forced: public.my_big_table_pkey, lock retry 100
[Wed Sep 20 04:40:00 2018] (prod:public.my_big_table) Reindex forced: public.my_big_table_pkey, unable lock, delete index
[Wed Sep 20 04:52:50 2018] (prod:public.my_big_table) Reindex forced: public.my_big_table_pkey, lock has not been acquired, initial size 1299018 pages(9.911GB)




3) Имеет ли смысл после окончания процедуры перезапустить postgres и выполнять вакуум большой таблицы еще раз?

Сразу скажу, что у меня это ни на сколько не уменьшило объем таблицы, но я делал с перестройкой индексов, возможно, если не ждать перестройки 3-4 суток (--no-reindex), результат будет другой.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39705812
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
per,

1) да
2) нет, возможно какая-то долгая транзакция мешала
3) нет

Но уменьшила ее всего процентов на 5-7, при этом vacuum full уменьшает обычно в два-три раза.
pgcompacttable не умеет сжимать данные в toast'ах (база не дает в них делать изменения), возможно в этом дело (можно посмотреть размер toast таблицы и оценить bloat в нем). или не удается подчистить конец таблицы из-за постоянных блокировок/долгих транзакций (в этом случае в его выводе будет видно что он 10 раз пытался сжать и не получалось). в последних версиях базы с эта проблема вроде перестала быть заметной (после патча Improve speed of VACUUM's removal of trailing empty heap pages (Claudio Freire, Álvaro Herrera)), до этого приходилось немного извращаться с большими таблицами, где много записи идет постоянно.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39705848
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
per,

Судя по unable lock у вас постоянно какие то транзакции висят длинные на этой таблице.
В таком варианте vacuum никогда не сможет отрезать конец таблицы с свободным местом.
Скорее всего у вас в конце таблицы куча свободного места сейчас.
Я бы попробовал vacuum verbose руками запустить для начала.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39707507
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexiuspgcompacttable не умеет сжимать данные в toast'ах (база не дает в них делать изменения)




Maxim Boguk, добрый день.

Так ли это?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #39707510
per
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
perAlexiuspgcompacttable не умеет сжимать данные в toast'ах (база не дает в них делать изменения)




Maxim Boguk, добрый день.

Так ли это?


Просто запустил по таблице размером поменьше и вот что в логе, в начале:

Statistics: 4793571 pages (13826429 pages including toasts and indexes), it is expected that ~33.200% (1591468 pages) can be compacted with the estimated space saving being 12.142GB.

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


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