|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
gav21Из 23 часов, последние 8 часов это работа вакуума, который кусками возвращал место в ОС (phase: truncating heap) (кстати не понял этот момент, почему итерационно. Я ожидал возврат большим куском сразу по аналогии с truncate only в MS SQL :)) Внутренние эффекты реализации в Postgresql. Если подробно то - фаза truncate она лочит таблицу и на чтение и на запись. Поскольку делать это надолго вредно (приложение и пользователи будут не рады) то есть максимальная длинна времени насколько vacuum может такой лок взять, и сколько он успеет страниц вернуть с ФС столько и обработает и далее освободит лок и попробует еще раз (и так в цикле). Отсюда такое странное поведение. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 09:50 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Спасибо! Теперь понятно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 10:38 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Максим, добрый день (или ночь у вас в Австралии). Ссылка в первом сообщении недоступна. Это то, что вы создали: https://github.com/koordinates/pg_comparator/blob/master/pg_comparator ? Хочу установить эту штуковину под виндоус. Подскажите пожалуйста, как это сделать? plperl уже установлен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 12:28 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
grufos, ваши пост прошел. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 12:43 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 13:14 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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.
Я так понимаю что его надо сохранить как файл и вызывать perl.exe с этим скриптом, он на вход запросит параметры. Правильно или я что-то опять не так понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 14:40 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Melkij, пока получил ошибку о которой говорил grufos, сейчас попробую последовать его рекомендации. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 14:46 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
grufosПопробовал выполнить и столкнулся с проблемой - функция getpwuid($<) (её просто нет в реализации под windows) Поискав.. нашел решение - заменить на getlogin() Заработало! Попробовал на своей локальной БД (6 Гб). Всё отработало без ошибок. У меня стоит PostgreSQL 9.4.1 (64 bit) Возможно мой опыт использования на Windows будет кому-то полезен. Сделал как вы сказали - действительно заработало! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 14:55 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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.
Я так понимаю что его надо сохранить как файл и вызывать perl.exe с этим скриптом, он на вход запросит параметры. Правильно или я что-то опять не так понял? Скрипт намеренно сделан одним файлом, чтобы его можно wget'ом стянуть, дать файлу права на запуск и пользоваться. Параметры указываются сразу при запуске. Интерактивного режима работы нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 15:13 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Melkijper>DBI коннектор к pg для него пока ищу что это такое. libdbi-perl и libdbd-pg-perl Для экзотики не скажу. Ничего дополнительно не создавал, но к БД подключение есть. Натравил на тестовую табличку 5 Гб с 99.99% мертвых строк. Надеюсь получится... Еще один важный вопрос: не держит ли этот скрипт snapshot БД на начало запуска? Т.е. будут ли хот апдэйты и вакуум отрабатывать на других таблицах для данных стрше времени старта скрипт? Ну вы поняли о чем я :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 16:23 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
per, нет, не держит. Таблица обновляется крошечными пачками в отдельных транзакциях с паузами. Заметные по длительности транзакции возможны во время перестроения индексов (дефолтно после урезания размера таблицы), там create index concurrently без извращений - тут уж насколько ваше железо позволит быстро построить индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:02 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Melkijper, нет, не держит. Таблица обновляется крошечными пачками в отдельных транзакциях с паузами. Заметные по длительности транзакции возможны во время перестроения индексов (дефолтно после урезания размера таблицы), там create index concurrently без извращений - тут уж насколько ваше железо позволит быстро построить индекс. Отлично! Как раз хотел на счет индексов уточнить, есть ли возможность запустить без перестройки индексов? (чтоб их ночью, например отдельно перестроить) Кстати, протестировал. Я очень доволен результатом! Вот что было: ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:09 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Стало Максим, большое спасибо! Ваша утилита просто супер!!! Я бы ее в контриб предложил включить! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:11 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
perКак раз хотел на счет индексов уточнить, есть ли возможность запустить без перестройки индексов? (чтоб их ночью, например отдельно перестроить) --no-reindex У вас настолько плохие диски? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:15 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
MelkijperКак раз хотел на счет индексов уточнить, есть ли возможность запустить без перестройки индексов? (чтоб их ночью, например отдельно перестроить) --no-reindex У вас настолько плохие диски? Плохие... Думаю перестройка индекса займет часов 8... Еще у вас там вроде есть различные опции для уменьшения нагрузки на диск (nice или что-то похожее), будут ли они работать на windows ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:27 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
per, ionice -c 3 пробуем вызвать для pid backend'а базы. Это вас как windows админа надо спросить, есть ли у вас какие-нибудь средства для управления приоритетами i/o. Если есть - то проставьте приоритет backend процессу базы. Помнится pgcompacttable в начале работы даже выводит pid backend'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:40 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Melkijper, ionice -c 3 пробуем вызвать для pid backend'а базы. Это вас как windows админа надо спросить, есть ли у вас какие-нибудь средства для управления приоритетами i/o. Если есть - то проставьте приоритет backend процессу базы. Помнится pgcompacttable в начале работы даже выводит pid backend'а. Так точно, выводит. Еще важный вопрос: я так понял что compacttable можно запускать с удаленного сервера. Будет ли в таком случае весь объем таблицы гоняться по сети туда-сюда? Ну или примерно в % от объема таблицы сколько по сети гнать придется? И на сколько быстрая сеть нужна? Ну вы поняли о чем я спрашиваю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 17:59 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
per, да, можно по сети. Данные вообще не покидают базу. Создаётся функция и табличка обходится постранично через эту функцию, принимая на вход откуда начинать и возвращая где очередная пачка была завершена. По сети ходят только короткие управляющие команды ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2018, 18:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Melkij, добрый день. Запустил на проме по 1 табличке. Выполняется уже двое суток. При этом выполнено около 5%. Таблица объемная, около 300Гб постоянно апдэйтится и инсерется. В связи с этим возник вопрос: Я так понял что compacttable переносит данные со всех файлов в несколько первых, максимально заполняя их "живыми" данными. При этом если будет хоть одна живая запись в конце файла, то он не очистится. Получается что compacttable бесполезна при постоянных апдэйтах таблицы? Или я что-то не так понял и файлы таблицы все равно очистятся в итоге? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 13:46 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 14:27 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, добрый день. В общем, отработала процедурка по огромной таблице. Но уменьшила ее всего процентов на 5-7, при этом vacuum full уменьшает обычно в два-три раза. Я все-же думаю это из-за того что выполняется очень долго, и данные, которые вставляются таблицу во время выполнения, не дают очистить файлы таблицы вакуумом, который выполняется по окончанию. Есть три вопроса: 1) Хочется разобраться с механизмом перестройки индексов. Я так понял что создается новый индекс конкарентли, с временным именем, затем старый удаляется и новый переименовывается в имя старого, который уделился. Так ли это? 2) Пересоздались ли индексы в этом случае? В логе такие сообщения: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
3) Имеет ли смысл после окончания процедуры перезапустить postgres и выполнять вакуум большой таблицы еще раз? Сразу скажу, что у меня это ни на сколько не уменьшило объем таблицы, но я делал с перестройкой индексов, возможно, если не ждать перестройки 3-4 суток (--no-reindex), результат будет другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 18:38 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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)), до этого приходилось немного извращаться с большими таблицами, где много записи идет постоянно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 19:49 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
per, Судя по unable lock у вас постоянно какие то транзакции висят длинные на этой таблице. В таком варианте vacuum никогда не сможет отрезать конец таблицы с свободным местом. Скорее всего у вас в конце таблицы куча свободного места сейчас. Я бы попробовал vacuum verbose руками запустить для начала. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:24 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Alexiuspgcompacttable не умеет сжимать данные в toast'ах (база не дает в них делать изменения) Maxim Boguk, добрый день. Так ли это? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 10:47 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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. Размер тоаст сейчас померяю конечно, но выполняться будет думаю недели две-три, до окончания не узнать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 10:52 |
|
|
start [/forum/topic.php?fid=53&msg=39694941&tid=1995575]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
79ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 304ms |
total: | 482ms |
0 / 0 |