|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
По мотивам http://www.depesz.com/index.php/2010/10/17/reduce-bloat-of-table-without-longexclusive-locks/ Я за недельку написал и отладил в 100 где то раз более быструю реализацию той же идеи с нормальным управлением и не насилующую триггера ON UPDATE (если таковые есть на таблице). В итоге получилась утилита всего в 4 раза медленне чем VF но не приводящая к полным локам таблицы и распуханию индексов. брать здесь: svn checkout http://compacttable.googlecode.com/svn/trunk/ compacttable-read-only Использовать: запустить vacuum_table.pl --help она все скажет. Обсуждать или здесь или здесь где удобнее. Предложения и баг репорты приветствуются. Приятные особенности: 1)просто в использовании 2)не вызывает распухания индексов 3)можно выполнять инкременатально (т.е. можно прервать работу и запустить заново нормально не с начала) 4)шустрая весьма 5)нормально взаимодествует с наличием триггеров и rules на таблицах (с рулами не тестил но должно) 6)оно работает :) На тестовом примере созданном следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Уже было использовано в боевых условиях для ужатия таблицы распухшей из-за идиотов програмистов до 200Gb (ужалось до 20Gb) (потребовалось всего около 18 часов при этом таблица все это время оставалась доступной для работы что было критично в данном случае). В общем получилась вполне рабочая тулза которая если бы была под рукой последние 2 года сэкономила бы мне кучу времени и нервов. Из того что надо отметить из тонкостей: 1)Postgres 8.4 и выше 2)pl/pgsql установленный в базе 3)superuser доступ 4)не работает если есть 'always' или 'replica' триггеры (я за свою жизнь ни одного не видел в реальной задаче) 5)не может ужать распухший TOAST (увы) 6)слегка индексы пухнут но именно слегка а не в 2 раза как от VF 7)на активной таблице мождет deadlock давать иногда но я пока в реальности не видел 8)может давать серьезный index bloat если запустить паралельно с очень долгой транзакцией 9)игнорит fillfactor у таблтицы (увы) 10)чтобы в конце процесса отрезать чистые страницы в конце таблицы всеравно понадобится короткий exclusive lock 11)не работает под windows (хранимка то работает конечно а скрипт управляющий увы) 12)всякие баги невыловленные заранее (тестировал как мог) Дополнительно выявленные проблемы: 1)vacuum далеко не всегда успевает схватить exclusive lock чтобы уменьшить размер уже упакованной таблицы, в итоге получается ситуация когда последние 10gb таблицы пустые а место все еще занято, для обхода этой ситуации был доработан скрипт и в него было внесено повторение vacuum до 8 раз с увеличивающимися интервалами чтобы всетаки с хорошими шансами таблицу уменьшить. ToDo: 1)дописать чтобы в конце выводился сгенерированный набор комманд для конкрурентного reindex (через create index concurently) всех индексов где это можно сделать (т.е. primary key так нельзя ужать). 2)перевести на DBD::Pg и постоянный коннект с базой (будет принципиально быстрее, особенно в случае когда упаковка идет мелкими блоками по 1-10 страниц). <BR>--<BR>Проект с базой но без DBA всеравно что автопарк без штатного автомеханика. Ездит пока все не сломается.<BR> http://mboguk.moikrug.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 12:07 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, интересно, буду изучать механизм ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 15:06 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, А можно вкратце узнать принцип работы тулзы? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 18:43 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 19:51 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha Tyurin, почитал ваш жж уже. я вот хочу попробовать реорг. Но вопросы есть. 1) мне вот в реорге не хватает возможности выбрать тейблспейс для новой версии, чтобы диски не убивать 2) возникают у меня опасения по поводу его работы в связке со встроенной репликацией. он там что-то делает с "системными таблицами" - не тестировал правда еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 20:03 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Интересующийся АнонимMaxim Boguk, А можно вкратце узнать принцип работы тулзы? А англоязычных ссылках он достаточно неплохо описан в общем то. Если кратко то если в таблице есть свободное место то при update записи новая версия пойдет с это свободное место. При этом безусловное предпочтение отдается свободному месту в начале таблицы при его наличии. В итоге если обновлять таблицу (fake updates вида поле=поле) начиная с последней страницы в какой то момент все записи с последней страницы перейдут в свободное место в начале таблицы. Теперь если тоже самое проделать N раз то последние N страниц базы окажутся пустыми и обычный неблокирующий Vacuum их сможет отрезать от таблицы и освободить (vacuum без full умеет освобождать страницы в конце таблицы если они полностью свободные). Для прохода с конца таблицы используется доступ по tid (фактически доступ с физическим указанием номеров страниц и записей на страницах http://www.postgresql.org/docs/8.4/interactive/ddl-system-columns.html описание поля ctid). Все остальное уже детали реализации и оптимизация по скорости проще посмотреть в исходниках. Vacuum fulll делает приблизительно тоже самое вешая полный (exclusive лок) на таблицу и упаковывая все страницы в таблице сразу а не инкрементально по кусочкам. Теперь что касается pg_reorg: Знаю плавал пользовался. Прекрасная утилита для своих задач. Но на мой взгляд: 1)слишком уж она сурово в потрохах базы ковыряется (мне не нравится прямой доступ к системным таблицам и тп вещи) 2)ОЧЕНЬ важная особенность: требует 100% от базы или таблицы свободного места на диске что не реально время от времени 3)Не поддается лимитированию по создаваемой нагрузке на сервер 4)Не может использоватся в инкрементальном режиме (например по ночам когда нагрузка на сервер минимальна) Мое решение заметно медленне это непреложный факт (раз 5-10 точно). Но оно инкрементальное и позволяющее лимитировать нагрузку. И не требующее сборки дополнительного софта на сервере. Ну и как обычно: "Пусть расцветают сто цветов" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2010, 23:38 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Большое спасибо за ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2010, 11:06 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Объясните пожалуйста махровому чайнику (мне то есть), почему нельзя просто изменить значения параметров vacuum_cost_delay, vacuum_cost_page_hit и vacuum_cost_page_limit в файле postgresql.conf? Результат разве не тот же самый будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 09:42 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
rockclimberОбъясните пожалуйста махровому чайнику (мне то есть), почему нельзя просто изменить значения параметров vacuum_cost_delay, vacuum_cost_page_hit и vacuum_cost_page_limit в файле postgresql.conf? Результат разве не тот же самый будет? Какой тот же самый эффект? Vacuum без full не может ужать таблицу распухшую в 10 раз где 90% места пустое, он может только отрезать последние свободные страницы. А vacuum full или cluster которые могут упаковать таблицу - блокируют ее намертво (т.е. никаких операций с ней сделать нельзя будет в процессе... даже select не будет работать), и на большой таблице могут работать часами (а в запущенном случае сутками даже), и все это время ваш проект будет лежать. И никакой настройкой vacuum_* вы это поведение не уберете. Так что остаются 3 варианта если у вас таблица распухла (из-за неработающего autovacuum, или из-за того что транзакция открытая висела 10 дней, или просто потому что через пол года вспомнили что надо удалять из таблицы данные старше недели и теперь она весит 400gb при том что данных там на 20g, или по еще какой причине...) то у вас остается 4 альтернативы: 1)vacuum full или cluster и длительный downtime проекта 2)перекидывание базы с помощь slony/londiste на другой сервер где она уже будет ужата и переключение туда 3)использовать вышеупомянутый pg_reorg (имеет свои минусы на самом деле так как требует 100% дополнительного свободного места на дисках на время работы) 4)использовать мою утилиту которая не очень быстро но таблицу ужмет и никому при этом не будет мешать. Я раньше эту проблему через п2 решал но это безумно трудоемкое для DBA занятие к тому же требующее второго сервера под базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 10:57 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Закоммитил большую доработку кода: 1)добавлен вывод набора комманд для выполнения reindex после окончания упаковки таблицы 2)убрано много дублирующего кода и начата подготовка к использованию DBD::Pg при его наличии (будет заметно быстрее работать при небольших значениях --pages-per-round) 3)добавлен более умное определение значений --pages-per-round и --pages-per-vacuum в зависимости от размера таблицы (чем мельче таблица - тем мельче рабочие блоки и чаще routine vacuum) 4)добавлен специальный параметр --delay-ratio который работает следуюшим образом: если пачка в --pages-per-round обработалась за N ms то после этого код будет спать --delay-ratio * N ms (значение по умолчанию = 2), таким образом обеспечивается автоматическая подстройка кода под текущую загрузку сервера чтобы не перегружать дисковую подсистему (так как нагрузка днем и ночью может отличатся на порядки... а скрипт может работать сутками на реально больших таблицах и без такой функциональности может легко устроить 100% disk usage в рабочее время) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 14:32 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
предлагаю темы вроде этой, а также ссылки на полезные методы работы с БД прикрепить в теме будет это что-то типа "advanced-faq" ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 16:55 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Макс, помощь в рефакторинге и причесывании кода нужна? Просто Perl/PostgreSQL - это мой конек. Возможно даже перевод всего этого на PL/Perlu и через pgScheduller - организация шадоу вакуумизатора. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 22:51 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
WarstoneМакс, помощь в рефакторинге и причесывании кода нужна? Просто Perl/PostgreSQL - это мой конек. Возможно даже перевод всего этого на PL/Perlu и через pgScheduller - организация шадоу вакуумизатора. Да я думаю помощь пригодится, я на перле лет 5 уже как ничего серьезного не писал. Я доделаю первичный DBD::Pg support и подключу вас в коммитеры проекта. Дальнейшее обсуждение этой идеи предлагаю перенести на: jabber maxim.boguk@gmail.com или (менее предпочтительно) skype maxim.boguk ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 12:25 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim BogukКакой тот же самый эффект? Vacuum без full не может ужать таблицу распухшую в 10 раз где 90% места пустое, он может только отрезать последние свободные страницы. а после обычного vacuum (или autovacuum) пустое место "в середине" таблицы будет использоваться повторно? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 14:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieMaxim BogukКакой тот же самый эффект? Vacuum без full не может ужать таблицу распухшую в 10 раз где 90% места пустое, он может только отрезать последние свободные страницы. а после обычного vacuum (или autovacuum) пустое место "в середине" таблицы будет использоваться повторно?Да, но "потом".авторskype maxim.bogukПостучался. С джаббером я, просто, не работаю и так ICQ и Skype - дофига, чтобы еще Jabber ставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 15:08 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Warstoneeddie а после обычного vacuum (или autovacuum) пустое место "в середине" таблицы будет использоваться повторно?Да, но "потом".получается после vacuum распухшая база перестанет расти, после vacuum full она ещё и уменьшится, но потом опять начнёт расти. грубо говоря через месяц использования итоговый размер базы будет одинаковый. при этом vacuum full намного "тяжелее" обычного vacuum (а предлагаемая процедура, как я понимаю, намного тяжелее и медленнее autovacuum). а где же профит? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 15:33 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieWarstoneпропущено... Да, но "потом".получается после vacuum распухшая база перестанет расти, после vacuum full она ещё и уменьшится, но потом опять начнёт расти. грубо говоря через месяц использования итоговый размер базы будет одинаковый. при этом vacuum full намного "тяжелее" обычного vacuum (а предлагаемая процедура, как я понимаю, намного тяжелее и медленнее autovacuum). а где же профит? ;)Не так... Есть таблица... В нее делали много раз INSERT. Пока все нормально. Таблица большая, данных много, но она почти идеально полная. Теперь в таблице удаляют старые записи. Таблица на диске все-равно большая. Реальных данных там очень мало. Делают VACUUM. Таблица на диске все-равно большая, так как страницы-то были в начале таблицы, а не в конце. Делают VACUUM FULL Таблица на диске маленькая, так как произошла "релокация" данных с конечных страниц в начальные. Так как таблица стала меньше, то она эффективнее ложится в файловый кеш (ОС) и выборки идут быстрее. Примерно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 15:44 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieWarstoneпропущено... Да, но "потом".получается после vacuum распухшая база перестанет расти, после vacuum full она ещё и уменьшится, но потом опять начнёт расти. грубо говоря через месяц использования итоговый размер базы будет одинаковый. при этом vacuum full намного "тяжелее" обычного vacuum (а предлагаемая процедура, как я понимаю, намного тяжелее и медленнее autovacuum). а где же профит? ;) Вот вам наиболее популярные сценарии проблем: Была себе таблица гигов на 20... вот в нее решили добавить новое поле предположим boolean с default value = FALSE. Если это делать на прямую - на выходе вы получите таблицу размером в 40GB (что в случае если к таблице активно обращаются а памяти у вас скажем 24GB на сервере значит что она перестала помещатся к кещ ОС и shared buffers, у вас пойдут обращения к диску сразу причем сразу очень много и станет грустно весьма). Второй вариант уже приводили ранее: таблица истории где предполагалось держать историю за последнйи месяц но забыли поставить в крон удаление старых записей и спохватились через год, после того как старые записи всетаки удалят, вы на выходе получите таблицу в 12 раз больше чем надо (комментарии про память на сервере и размер таблицы и скорость см выше). Третий популярный вариант: у вас есть небольшая таблица очереди задач с большим потоком задач (ну скажем там идет 100 insert/update/delete в секунду), autovacuum для нее настроен и обычно там не больше 1000 задач (и ну суммарно 2000-4000 строк включая мертвые). Теперь из-за глюка какого то приложения вы получаете открытую сутки+ транзакцию (не на эту таблицу и возможно даже не на эту базу в пределах одного постгреса). На выходе ваша таблица очереди будет содержать теже 1000 живых строк и около 17280000 мертвых строк, т.е. распухнет где то в 4000 раз и уже никак не будет обеспечивать требуемые 100insert/update/delete в секунду. Это три наиболее популярных варианта из моей практики когда таблицу надо было упаковывать любой ценой иначе все грозило лечь совсем. VF как и моя утилита предназначены не для регулярного обслуживания базы а для восстановления производительности после разнообразных проблем подобных описанным выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 00:05 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim BogukТретий популярный вариант: у вас есть небольшая таблица очереди задач с большим потоком задач (ну скажем там идет 100 insert/update/delete в секунду), autovacuum для нее настроен и обычно там не больше 1000 задач (и ну суммарно 2000-4000 строк включая мертвые). Теперь из-за глюка какого то приложения вы получаете открытую сутки+ транзакцию (не на эту таблицу и возможно даже не на эту базу в пределах одного постгреса). На выходе ваша таблица очереди будет содержать теже 1000 живых строк и около 17280000 мертвых строк хм... а где прочитать об этом? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 00:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Warstone... Так как таблица стала меньше, то она эффективнее ложится в файловый кеш (ОС) и выборки идут быстрее. ... Немного не по теме но разве у PostgreSQL нет собственного буферного пула куда считываются таблицы и индексы с диска? Насколько я понимаю параметр shared_buffers опредляет размер этого самого буферного пула и этот пул никакого отношения к файловому кэшу ОС не имеет. Страницы таблиц и индексов считываются как раз в эти буфера, разве не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 09:00 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AndronWarstone... Так как таблица стала меньше, то она эффективнее ложится в файловый кеш (ОС) и выборки идут быстрее. ... Немного не по теме но разве у PostgreSQL нет собственного буферного пула куда считываются таблицы и индексы с диска? Насколько я понимаю параметр shared_buffers опредляет размер этого самого буферного пула и этот пул никакого отношения к файловому кэшу ОС не имеет. Страницы таблиц и индексов считываются как раз в эти буфера, разве не так?Если вы почитаете мануалы по тому, как рассчитывать shared_buffers то там черным по английски будет написано что PostgreSQL довольно сильно использует файловый кеш ОС, так как он все-равно есть. Тынц говорит нам следующее18.4. Resource Consumptionbut because PostgreSQL also relies on the operating system cache, it is unlikely that an allocation of more than 40% of RAM to shared_buffers will work better than a smaller amount. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 09:32 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieMaxim BogukТретий популярный вариант: у вас есть небольшая таблица очереди задач с большим потоком задач (ну скажем там идет 100 insert/update/delete в секунду), autovacuum для нее настроен и обычно там не больше 1000 задач (и ну суммарно 2000-4000 строк включая мертвые). Теперь из-за глюка какого то приложения вы получаете открытую сутки+ транзакцию (не на эту таблицу и возможно даже не на эту базу в пределах одного постгреса). На выходе ваша таблица очереди будет содержать теже 1000 живых строк и около 17280000 мертвых строк хм... а где прочитать об этом? Это следует из того как mvcc в postgresql организован. google: postgresql table bloat long transaction Если кратко то vacuum/autovacuum не может пометить как свободные для повторного использования удаленные уже записи если они могут быть видны какой то другой активной в базе транзакции (в данном случае очень долгой). В итоге сколько не удаляй записи из маленькой таблицы очереди место в таблице не будет использоватся повторно так как уже удаленные строки на самом деле еще живые так как могут быть видны из совершенно посторонней долгой транзакции. Итого при 100 insert/update/delete в секунду в таблице будут копится строки со скоростью 200записей в секунду (и вместе с этим будет пухнуть сама таблица и ее индексы...). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 10:01 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
[quot Warstone] ... Тынц говорит нам следующее18.4. Resource Consumptionbut because PostgreSQL also relies on the operating system cache, it is unlikely that an allocation of more than 40% of RAM to shared_buffers will work better than a smaller amount. Там пишут о взаимосвязи файлового кэша и других структур памяти, но вовсе не о том куда считываются страницы таблиц и индексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 10:28 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
[quot Andron]Warstone... Тынц говорит нам следующеепропущено... Там пишут о взаимосвязи файлового кэша и других структур памяти, но вовсе не о том куда считываются страницы таблиц и индексов. Хм.. для работы страницы таблиц и индексов считываются и кешируются в shared memory конечно. Если в ней не найдено то идет запрос данных с диска... НО: ОС естественно данные кеширует у себя в памяти и если данные есть в кеше ФС то конечно данные будут взяты оттуда. И именно про это пишут когда говорят что postgres очень сильно (в отличии от оракла который вообще на raw разделах любит жить не используя возможности файловой системы и ее кеша) ориентируется на кеш ФС. Естественно что доступ к кешу ОС несколько медленее чем доступ к данным в shared buffers (изза переключения контекста), но на фоне крайне медленного доступа к физическому диску это как правило незаметно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 10:36 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
[quot Maxim Boguk]Andronпропущено... Хм.. для работы страницы таблиц и индексов считываются и кешируются в shared memory конечно. Если в ней не найдено то идет запрос данных с диска... НО: ОС естественно данные кеширует у себя в памяти и если данные есть в кеше ФС то конечно данные будут взяты оттуда. И именно про это пишут когда говорят что postgres очень сильно (в отличии от оракла который вообще на raw разделах любит жить не используя возможности файловой системы и ее кеша) ориентируется на кеш ФС. Так давайте определимся что кэш ФС является посредником между диском и структурой PostgreSQL которая определяется через параметр shared_buffers. Т.е. вначале данные запрашиваются пользователем в базе, затем PostgreSQL если их не находит в shared_buffers то читает с диска, но не напрямую а используя посредника - кэш ФС. И данные эти опят таки помещает из кэша ФС в shared_buffers для дальнейшей обработки и передачи пользователю. Еще раз выделю свое предположение: PostgreSQL не управляет данными в файловом кэше ОС, только в кэше определенном как shared_buffers. Если это так то имеем интересное следствие с т.з. производительности дискового IO. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 10:58 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
[quot Andron]Maxim Bogukпропущено... Так давайте определимся что кэш ФС является посредником между диском и структурой PostgreSQL которая определяется через параметр shared_buffers. Т.е. вначале данные запрашиваются пользователем в базе, затем PostgreSQL если их не находит в shared_buffers то читает с диска, но не напрямую а используя посредника - кэш ФС. И данные эти опят таки помещает из кэша ФС в shared_buffers для дальнейшей обработки и передачи пользователю. Еще раз выделю свое предположение: PostgreSQL не управляет данными в файловом кэше ОС, только в кэше определенном как shared_buffers. Если это так то имеем интересное следствие с т.з. производительности дискового IO. Самое интересное следствие выходит если отдать около 50% под shared buffers. В итоге есть шанс получить ситуацию когда у вас данные лежат в 2х местах в памяти и эффективный размер кеша будет половина от наличной памяти. Из этого следует что по хорошему под shared buffers имеет смысл отдавать или 20-25% или 75-80% наличной памяти (предполагая что сервер выделен исключительно под базу). Из моего опыта оба варианта на 8.3+ вполне работоспособны а какой из них даст большую производительность очень сильно зависит от конкретного проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:19 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Вообще напрашивается такой вопрос: а зачем дополнительно кэшировать данные базы, ведь это приводит к накладным расходам и снижению надежности. Кажется это называется Direct IO и как раз позволяет избежать использования кэширования на уровне ОС в случае использования файлов для базы. Речь идет именно про файлы а не raw device, с которыми подобной проблемы не возникает, но и PostgreSQL их не поддерживает вроде бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:29 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AndronВообще напрашивается такой вопрос: а зачем дополнительно кэшировать данные базы, ведь это приводит к накладным расходам и снижению надежности. Кажется это называется Direct IO и как раз позволяет избежать использования кэширования на уровне ОС в случае использования файлов для базы. Речь идет именно про файлы а не raw device, с которыми подобной проблемы не возникает, но и PostgreSQL их не поддерживает вроде бы.Насчет надежности - не согласен, а насчет накладных расходов... При первом приближении - кажется да, но если подумать, то L3/L2/L1 cache в процессорах зачем-то сделан? Это к тому, что вообще говоря - надо читать, похоже, уже mailing lists, для ответа на вопрос. Я могу предположить, что это сделано для автоматического распределения ресурсов между процессорами... То есть когда у вас на одной машине стоят и Pg и Apache, то неизвестно - что больше будет читать данные Apache или Pg. И что эффективнее кешировать - файлы для Apache или файлы для Pg. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:38 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AndronMaxim Boguk, Вообще напрашивается такой вопрос: а зачем дополнительно кэшировать данные базы, ведь это приводит к накладным расходам и снижению надежности. Кажется это называется Direct IO и как раз позволяет избежать использования кэширования на уровне ОС в случае использования файлов для базы. Речь идет именно про файлы а не raw device, с которыми подобной проблемы не возникает, но и PostgreSQL их не поддерживает вроде бы. До 8.3 Postgres очень плохо работал с обьемами shared memory большими чем 1gb. Поэтому так или иначе приходилось использовать кеш ОС. Сейчас эта проблема устранена в основном (не до конца на самом деле... остались некоторые внутренние накладные расходы которые линейно от обьема shared memory растут), и разговоры о direct IO ведутся но общее мнение разработчиков таково: текущая схема работы работает вполне прилично и пока никто еще не предоставил test case и результаты где бы direct IO давало бы выйгрыш в скорости работы и смысла в этом направлении двигатся нет (во всяком случае пока нет спонсоров которые бы это оплатили). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:46 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
WarstoneНасчет надежности - не согласен, а насчет накладных расходов... При первом приближении - кажется да, но если подумать, то L3/L2/L1 cache в процессорах зачем-то сделан? В процессорах есть двойное кэширование? Потому что в случае с PostgreSQL имеем как раз двойное кэширование. А в IBM например думаете дураки сидят когда придумали использовать DirectIO для файлов базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:48 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AndronWarstoneНасчет надежности - не согласен, а насчет накладных расходов... При первом приближении - кажется да, но если подумать, то L3/L2/L1 cache в процессорах зачем-то сделан? В процессорах есть двойное кэширование? Потому что в случае с PostgreSQL имеем как раз двойное кэширование. А в IBM например думаете дураки сидят когда придумали использовать DirectIO для файлов базы?L3/L1 cache. L3 от 256Кб до 2Мб сейчас, L1 32/64Кб. Читайте доки. А в IBM сидят не дураки (Причем тут IBM?) просто ИМХО считалось что их СУБД будет одна на железе. Для Пг-же считалось что на этом-же железе будет крутиться еще и веб-сервер или еще чего... И в этом случае использование кеша ОС - оправданно. Если хочется поведения а-ля IBM - ставьте shared_buffers в 70-80%. ЗЫ: Предлагаю дальнейшую дискуссию выделить в отдельную тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:52 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Я бы даже сказал не "двойное" а дублирующее кэширование. Насчет надежности такой схемы: она однозначно ненадежна при записи . База пишет данные в лог, пишет их в файл данных и считает что они уже на диске. А они всего то попали в файловый кэш ФС и неизвестно когда они будут реально записаны на диск . Это конечно не касается супер навороченных дисковых стоек с батарейками, но вполне имеет место проблема для недорогих серверов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 11:55 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
К модератору: если вас не затруднит, пожайлуста, отделите вопросы касащиеся shared buffers/direct IO из этой темы в отдельную. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 12:02 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AndronЯ бы даже сказал не "двойное" а дублирующее кэширование. Насчет надежности такой схемы: она однозначно ненадежна при записи . База пишет данные в лог, пишет их в файл данных и считает что они уже на диске. А они всего то попали в файловый кэш ФС и неизвестно когда они будут реально записаны на диск . Это конечно не касается супер навороченных дисковых стоек с батарейками, но вполне имеет место проблема для недорогих серверов.Читайте мануалы. Для этого fsync придуман. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 14:06 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Warstone... Читайте мануалы. Для этого fsync придуман. Читал, параметр действует на запись буфера write ahead log на диск при выполнении коммита в базе: сервер ждет когда буфер лога будет действительно записан на диск и только после этого коммит считается выполненным. Конечно это решает проблему с надежностью. However, using fsync results in a performance penalty: when a transaction is committed, PostgreSQL must wait for the operating system to flush the write-ahead log to disk . Но одновременно снижает производительность. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 15:28 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Andron, "Но одновременно снижает производительность." - использование жестких дисков вообще снижает производительность.) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 15:31 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk... Сейчас эта проблема устранена в основном (не до конца на самом деле... остались некоторые внутренние накладные расходы которые линейно от обьема shared memory растут), и разговоры о direct IO ведутся но общее мнение разработчиков таково: текущая схема работы работает вполне прилично и пока никто еще не предоставил test case и результаты где бы direct IO давало бы выйгрыш в скорости работы и смысла в этом направлении двигатся нет (во всяком случае пока нет спонсоров которые бы это оплатили). Набрав в гугле "Direct IO performance" можно сразу найти ссылки на статьи почему ведущие разработчики СУБД используют его в своих базах. А PostgreSQL разработчики сомневаются что оно полезно :) Так что думаю тут дело не в test case а в ресурсах самих разработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 15:44 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha Tyurin, Обычно выделенный "диск" под вал-лог все вопросы "производительности" снимет. // ну и плюс правильно выставленные параметры "сброса" буферов, то что про чекпоинты. вот в тему: http://it.toolbox.com/blogs/database-soup/rhel-6-and-the-return-of-wal_sync_method-42931?rss=1 http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm http://archives.postgresql.org/pgsql-hackers/2010-11/msg00226.php - тут надо всю ветку полистать. а вот кое-что про чекпоинты: http://www.depesz.com/index.php/2010/11/03/checkpoint_completion_target/ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 15:48 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha TyurinMisha Tyurin, Обычно выделенный "диск" под вал-лог все вопросы "производительности" снимет. совсем свалюсь в оффтопик ;) в случае скажем 4 дисков какая конфигурация будет предпочтительнее? raid 10 под data+wal или raid 1 под data + raid 1 под wal? в случае 6 и более дисков тот же самый вопрос - есть ли смысл делать отдельный raid 1 под wal? мне кажется выгоднее иметь один более быстрый массив, чем пару независимых помедленнее. ps: речь в первую очередь про сервера, соответсвенно подразумевается использование рейд-контроллеров с bbu. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 16:01 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddie, суть в том, что вы ничего от direct io для вал-лога по факту не получаете, кроме общих потенциальных проблем с ним связанных. ну а про директ ио для страниц - это перебор, на мой взгляд. операционка с файловой системой и всякими алгоритмами опережающего чтения и еще что там есть - всё должны сделать очень хорошо и быстро. тесты бы возможно прояснили бы конечно картину. хотя у "ораклов" как я понимаю всё это делает сервер БД. -- про конфигурацию райдов, надо прикидывать. у меня сейчас зеркало из двух винтов под вал и четыре диска в десятке под базу. ничего не меряли - просто так получилось) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 16:18 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Andron Если ты думаешь, что люди делающие PG делают что-то не так - возьми и помоги, если есть острое желание, время, силы и знания. Что сложного? Вот Maxim Boguk так и поступил. Maxim Boguk Насколько добавляется I/O при таком, ленивом вакууме? Можно как-то лимитировать по этому параметру? Насколько оцениваете надежность - на фронтальной базе запустить можно? А то опять эти дампы-копи-пасты между 4-мя серваками :( eddie Без знания специфики задачи что-то посоветовать нельзя. Если грубо, то мало коммитов/много чтений, то лучше один массив. Если много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 16:28 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AlexeyNP Maxim Boguk Насколько добавляется I/O при таком, ленивом вакууме? Можно как-то лимитировать по этому параметру? Насколько оцениваете надежность - на фронтальной базе запустить можно? А то опять эти дампы-копи-пасты между 4-мя серваками :(Если сравнивать с VACUUM FULL, то, теоретически, "не на много больше", но тут только тесты покажут. Лимитировать по IOPSам пока нельзя, но планируется, насколько я понял. Про надежность - пусть сам автор скажет, я туда пока-что не сильно залез. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 16:42 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha Tyurinсуть в том, что вы ничего от direct io для вал-лога по факту не получаете, кроме общих потенциальных проблем с ним связанных. понятное дело, wal у нас в общем-то небольшой ну а про директ ио для страниц - это перебор, на мой взгляд. операционка с файловой системой и всякими алгоритмами опережающего чтения не уверен, для БД более характерен случайный доступ, всякие ухищрения ОС тут скорее всего будут мешать. наоборот, СУБД знает что она делает - index scan или seq scan, соответственно и есть смысл в учреждающем чтении или нет. AlexeyNPБез знания специфики задачи что-то посоветовать нельзя. Если грубо, то мало коммитов/много чтений, то лучше один массив. Если много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД. а как обосновать выделенное? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 16:51 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AlexeyNPБез знания специфики задачи что-то посоветовать нельзя. Если грубо, то мало коммитов/много чтений, то лучше один массив. Если много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД. а как обосновать выделенное?[/quot] Логически - на этот массив не будет идти I/O по чтению основных данных БД. Практически - было у меня пара проектов, где выделенный массив под WAL давал прирост скорости - шла работа с большими кусками текстовых данных (документы). На практике, обычно, не удается найти достаточно лишних дисков, чтобы соорудить из них WAL-массив, так что проще все закинуть в один кусок RAID-10 и пусть ось+контроллер все сами разруливают. Ну и в среднем если по профилю нагрузки смотреть - если много коммитов, то это основной профиль БД, и нет смысла его отделять, а если много чтений, то аналогично. Так что, наверное, то что в цитате, это скорее пожелание, а не правило - т.е. если можно, то лучше выделить, но не критично. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 17:45 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddie, скан индекса - дело похоже и правду довольно "произвольное" - но это очень мало переборов. или я не прав? могу и ошибится. а секскан (в широком смысле, любой перебор страниц таблицы) - это последовательный перебор, сначала выстраиваем порядок (сортировка полученных указателей на страницы) а потом бежим. -- если у нас много пишущих транзакций, то нам надо их все фсинкать. сколько позволяет делать записей в секунду современный диск? а) без кеша рейда с батарейкой (может он сглаживает пики через кеш) б) с кешом рейда в) как зависит кол-во возможных записей в секунду от конфигурации рейда? может ли рейд писать быстрее чем один голый диск? мне кажется что нет, это я вывожу из определения рейд 0. можно и обсудить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:01 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha Tyurin, в) поправляюсь, если он может писать параллельно куски данных - то похоже имеем серьезное увеличение скорости по кол-ву винтов в рейде 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 18:05 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AlexeyNPЕсли много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД.Всегда казалось что если много INSERT/UPDATE операций, а не COMMIT, так как I/U операции вроед так-же в WAL оседают, даже если потом был роллбек... Поправьте меня, если я не прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 19:14 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
сколько позволяет делать записей в секунду современный диск? Смотрите среднее время поиска сектора (seek time) для диска. Среднее кол-во иопсов будет как 1/ на это время. Для типичных SATA HDD дисков около 100. У серверных вариантов HDD числа будут выше в разы, до 2-3. а) без кеша рейда с батарейкой (может он сглаживает пики через кеш) б) с кешом рейда От батарейки скорость не зависит, важен режим записи - write-back (блок считается записанным после записи в кэш контролёра) или write-through (... на диск). Прирост будет, а на сколько - зависит от типа нагрузки. в) как зависит кол-во возможных записей в секунду от конфигурации рейда? может ли рейд писать быстрее чем один голый диск? мне кажется что нет, это я вывожу из определения рейд 0. можно и обсудить. Опять всё зависит от типа нагрузки. Для "разбросанных" IO (random, scattered read/write) и последовательных IO большими блоками RAID0 в идеале удваивает кол-во иопсов. RAID1 удваивает максимум до 2х иопсы на scattered чтение (диски везде считаем одинаковыми). Это называется расслоением блочного устройства и различные комбинации RAID0/1/JBOD как раз используются для повышения иопсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 00:48 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AlexeyNP Andron Если ты думаешь, что люди делающие PG делают что-то не так - возьми и помоги, если есть острое желание, время, силы и знания. Что сложного? Вот Maxim Boguk так и поступил. Maxim Boguk Насколько добавляется I/O при таком, ленивом вакууме? Можно как-то лимитировать по этому параметру? Насколько оцениваете надежность - на фронтальной базе запустить можно? А то опять эти дампы-копи-пасты между 4-мя серваками :( IO добавляется приблизительно столько же сколько от vacuum full было бы (+/- 2 раза от ситуации в таблице зависит). По IO лимитировать можно... смотрите параметры: --pages-per-round= (сколько страниц чистить за 1 цикл вызова хранимки) по умолчанию 10 --delay= (сколько в секундах ждать после каждой пачки в --pages-per-round принимает float по умолчанию - 0) --delay-ratio - наиболее полезный для целей лимитирования нагрузки параметр... работает он следующим образом: смотрится за сколько обработалось последняя --pages-per-round= пачка страниц, после спит (время обработки предыдущей пачки)*--delay-ration времени, умолчательное значение 2 (это позволяет одному и тому же скрипту нормально работать и в пиковую нагрузку и ночью в минимуме нагрузки... так как чем медленее идет основной процесс тем больше будут паузы между вызовами... я в при эксплуатации видел до 10 раз разницы в скорости между дневной и ночной работой). Умолчательные настройки (не быстро но не создавая большой нагрузки на сервер): --pages-per-round=10 --delay-ratio=2 Настройки упаковать любой ценой максимально быстро: --pages-per-round=100 --delay-ratio=0 (ставить больше 100 в --pages-per-round=100 не стоит начинаются накладные расходы и с 1000 уже в 1.5 раза медленее идет... меньше 10 тоже не стоит ставить пока нет реализации через DBD::Pg или managed psql). Обязательно стоит посмотреть на то чтобы у вас vacuum_cost_delay был в базе так настроен чтобы вызов vacuum не вызывал перегрузки дисковой системы, так как скрипт в процессе работы делает обычный vacuum таблицы до 20 раз. Система тестировалась на ОЧЕНЬ нагруженных базах моих клиентов (список тут: http://mboguk.moikrug.ru/) на очень разных серверах и структурах таблиц. Проблем выявлено не было (лучше не забывать делать svn up перед использованием так как выявленные сложности я оперативно исправяю). Потери или повреждения данных не было ни разу, 1 раз возникла перегрузка дисковой системы в дневное время (после чего собственно и появилась автоподстройка нагрузки через --delay-ratio). Комментарии по результатам использования приветствуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 06:00 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieнаоборот, СУБД знает что она делает - index scan или seq scan, соответственно и есть смысл в учреждающем чтении или нет. http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY PG всё это умеет, и O_DIRECT и posix_fadvise. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 09:46 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
WarstoneДелают VACUUM FULL Таблица на диске маленькая, так как произошла "релокация" данных с конечных страниц в начальные. Так как таблица стала меньше, то она эффективнее ложится в файловый кеш (ОС) и выборки идут быстрее. Получается, что если из таблицы удалить половину строк (и не делать пока vacuum full), а затем с ней производить работу, то в памяти(кэше) будет бессмысленно болтаться удаленная половина таблицы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 16:37 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
905Получается, что если из таблицы удалить половину строк (и не делать пока vacuum full), а затем с ней производить работу, то в памяти(кэше) будет бессмысленно болтаться удаленная половина таблицы ?Не совсем так. Эта информация МОЖЕТ быть в кеше (например когда ее "вот прям щас удалили"), но индексы, насколько я помню, будут гораздо больше, равно как и общее количество страниц и, как следствие, поиск необходимой страницы (как в кеше, так и на диске) будет больше. Хотя, конечно, у меня нет 100% уверенности в предыдущем высказывании, так как я код не смотрел, но по ощущениям - если в таблице много пустого места, то с ней "тяжелее" работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 17:09 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
905WarstoneДелают VACUUM FULL Таблица на диске маленькая, так как произошла "релокация" данных с конечных страниц в начальные. Так как таблица стала меньше, то она эффективнее ложится в файловый кеш (ОС) и выборки идут быстрее. Получается, что если из таблицы удалить половину строк (и не делать пока vacuum full), а затем с ней производить работу, то в памяти(кэше) будет бессмысленно болтаться удаленная половина таблицы ? по-любому информация с диска читается страницами. Если в каждой странице будет 90% мусора, то будет полная опа. Если вы сделаете VACUUM FULL. Эта опа переместиться из таблицы в индексы и будет опа, но уже с другой стороны :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 18:42 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
web_foxпо-любому информация с диска читается страницами. Если в каждой странице будет 90% мусора, то будет полная опа. Если вы сделаете VACUUM FULL. Эта опа переместиться из таблицы в индексы и будет опа, но уже с другой стороны :)В индексах она будет меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 00:08 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Warstoneweb_foxпо-любому информация с диска читается страницами. Если в каждой странице будет 90% мусора, то будет полная опа. Если вы сделаете VACUUM FULL. Эта опа переместиться из таблицы в индексы и будет опа, но уже с другой стороны :)В индексах она будет меньше. Предполагая что индексы были не распухшие при VF их размер строго удвоится. Если распухшие уже то они могут даже и не вырости вообще. На самом деле кроме primary key/unique constraints распухшие индексы лечатся достаточно легко и бескровно в отличии от упаковки самой таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 02:39 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, а почему с primary key хуже дела обстоят? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 09:42 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieMaxim Boguk, а почему с primary key хуже дела обстоят? Потому что с обычными индексами вместо блокируюшего таблицу reindex можно поступить следующим образом: CREATE INDEX CONCURRENTLY applicant_adv_subscription_sent_date_key_new ON applicant_adv_subscription USING btree (sent_date); DROP INDEX public.applicant_adv_subscription_sent_date_key; ALTER INDEX public.applicant_adv_subscription_sent_date_key_new RENAME TO applicant_adv_subscription_sent_date_key; пересоздав индекс без блокировки таблицы. А вот с primary key этот фокус до выхода версии 9.1 не пройдет (в 9.1 обещают возможность уже созданный индекс обьявить как primary key). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 11:12 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Кстати, человеческое спасибо что небезразличны, разработали и открыли полезную вещь. А автоматическая неблокирующая прозрачная оптимизация таблиц и индексов уже давно напрашивается в стандартную поставку PG. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2010, 16:44 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Спасибо большое. Особо ценная вещь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2010, 00:04 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim BogukА вот с primary key этот фокус до выхода версии 9.1 не пройдет (в 9.1 обещают возможность уже созданный индекс обьявить как primary key).Причем непонятно будет-ли тогда блокироваться таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2010, 02:39 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Ёш http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY PG всё это умеет, и O_DIRECT и posix_fadvise. насчёт O_DIRECT - речь про это: The open_* options also use O_DIRECT if available. Not all of these choices are available on all platforms. http://www.postgresql.org/docs/current/static/runtime-config-wal.html ? так оно имеет отношение только к WAL (то есть никак не поможет в борьбе с двойной буферизацией в shared memory/кэше OS). PS: из изменений в 9.0.2: Force the default wal_sync_method to be fdatasync on Linux (Tom Lane, Marti Raudsepp) The default on Linux has actually been fdatasync for many years, but recent kernel changes caused PostgreSQL to choose open_datasync instead. This choice did not result in any performance improvement, and caused outright failures on certain filesystems, notably ext4 with the data=journal mount option. http://www.postgresql.org/docs/9.0/static/release-9-0-2.html ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2010, 04:43 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
eddieнасчёт O_DIRECT - речь про это: The open_* options also use O_DIRECT if available. Not all of these choices are available on all platforms. http://www.postgresql.org/docs/current/static/runtime-config-wal.html ?Да. eddieтак оно имеет отношение только к WAL (то есть никак не поможет в борьбе с двойной буферизацией в shared memory/кэше OS).Можно сделать большой shared buffers, тогда под кеш файловой системы не останется места. Так же, кеш файловой системы можно настроить средствами операционной системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2010, 09:46 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Обновлена версия утилиты. (переписана почти начисто) Из бонусов: 1)поддержка DBD::Pg как основного API к базе (спасибо Warstone) 2)поддержка ключа --all вместо указания таблицы для того чтобы обработать всю базу или всю схему за раз 3)встроена эвристика которая не делает упаковку таблицы если оцениваемый уровень распухания меньше 30% (можно отключить через --force) 4)заметно более умная установка параметров --pages-per-round и --pages-per-vacuum (причем первый будет автоматически уменьшатся по мере уменьшения таблицы)... все это сделано для того чтобы --all нормально работал и с большими и с маленькими таблицами в базе 5)добавлена куча отладочного вывода... см --verbose-level 6)слегка побыстрее в простых случаях 7)по коду стало в 10 раз более читаемо и понятно... весь sql изолирован от основной логики работы. Брать прямо из svn все там же где и раньше: http://code.google.com/p/compacttable/ Версия протестирована на нескольких базах размером от 10GB до 300GB никаких проблем или ошибок пока не выявлено. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2010, 13:32 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
vacuum_table.pl revision 22 Код: plaintext 1. 2. 3. 4. 5. 6.
line 322 Код: plaintext 1. 2. 3. 4. 5. 6. 7.
EET LOG: could not receive data from client: Connection reset by peer ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2010, 18:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
SmeL_mdvacuum_table.pl revision 22 Код: plaintext 1. 2. 3. 4. 5. 6.
line 322 Код: plaintext 1. 2. 3. 4. 5. 6. 7.
EET LOG: could not receive data from client: Connection reset by peer Спасибо за репорт сейчас разберемся и починим... судя по всему при создании поддержки DBI сломали где то работу через psql. Через час будет новая версия. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 01:00 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
В репозитарий закомичена исправленная версия. Мои извинения за пролезший косяк. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 01:26 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
дошли руки попробовать ругается в скрипте на сформированный sql: Код: plaintext
Код: plaintext
мой тест делал так (уменьшил кол-во строк и возле рандома поправил 1 на 0.5): Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4.
вопрос: суммарный размер индексов не уменьшился (13188), (я полагал, что должен) не ? opensuse 11.3 x86_64; postgresql 8.4.4, r31 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 10:13 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
905дошли руки попробовать ругается в скрипте на сформированный sql: Код: plaintext
Код: plaintext
мой тест делал так (уменьшил кол-во строк и возле рандома поправил 1 на 0.5): Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4.
вопрос: суммарный размер индексов не уменьшился (13188), (я полагал, что должен) не ? opensuse 11.3 x86_64; postgresql 8.4.4, r31 На всякий случай при vacuum fulll размер индексов может и в 2 раза вырости и растет почти всегда. А касательно уменьшения индексов берите свежую версию из svn и используйте ключ --perform-reindex. Указанная вами выше проблема в свежей версии тоже уже вылечена. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 11:02 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim BogukА касательно уменьшения индексов берите свежую версию из svn и используйте ключ --perform-reindex. Указанная вами выше проблема в свежей версии тоже уже вылечена. взял последнею версию и перевыполнил тест с --perform-reindex, и опять не уменьшился индекс удалил еще половину записей (DELETE FROM __test where id%2<>0) и прогнал скрипт, стало: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 12:15 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
905Maxim BogukА касательно уменьшения индексов берите свежую версию из svn и используйте ключ --perform-reindex. Указанная вами выше проблема в свежей версии тоже уже вылечена. взял последнею версию и перевыполнил тест с --perform-reindex, и опять не уменьшился индекс удалил еще половину записей (DELETE FROM __test where id%2<>0) и прогнал скрипт, стало: Код: plaintext
Хммм... постучитесь ко мне в jabber или почту maxim.boguk@gmail.com или в skype maxim.boguk попробуем разобратся почему реиндексация не срабатывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2010, 12:59 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Был выявлен и исправлен неприятный баг при использовании --perform-reindex (--print-reindex) в ситуации когда индексы расположены на отдельном от базы tablespace. В такой ситуации после отработки программы индексы оказывались в умолчательном tablespace для базы. Исправлено с r35. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2011, 11:12 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Очередная серьезная доработка программы (r36). Видимых изменений в функциональности нет но очень много сделано для ускорения работы и повышения надежности. Изменения: 1)--perform-reindex --print-reindex теперь заменяют старый индекс новым и дропают старый индекс в одной транзакции (так чтобы не могло возникнуть ситуации при аварийном завершении процесса когда старый индекс уже убили а новый еще не переименовали в старое название) 2)--print-reindex --perform-reindex теперь выполняются в самом конце после того как все таблицы уже упакованы 3)добавлены корректные проверки на завершение старых транзакций (перед тем как выполнять vacuum) и на то что нет давних локов на таблицу (чтобы не повесить ожидающий exclusive lock на таблицу когда не надо) (резко снизился шанс того что при переиндексации возникнет долгий exclusive lock на смене индексов). Как итог стало работать быстрее так как вместо обязательного 2х секундного ожидания перез запуском vacuum стало ожидать только завершения старых транзакций. 4)добавлен механизм корректного retry упаковки таблиц если они в первом проходе не упаковались по какой то причине (весьма вероятная ситуация на очень активно используемых таблицах). 5)перераскидана часть сообщений между --verbose-level= 1,2 и 3 и добавлено много новой полезной информации о процессе выполнения. 6)по результатам профилирования изменена часть значений по умолчанию. 7)добалена корректная (насколько это возможно) проверка на то что таблица успешно упакована до максимально возможного размера или около того. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2011, 08:36 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Отпишите, кто-то это пользует в рабочих проектах ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2011, 02:21 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
alienzzzzОтпишите, кто-то это пользует в рабочих проектах ? Я как автор использую (список текущих рабочих проектов см http://mboguk.moikrug.ru/ ,он весьма представительный). Еще несколько человек с которыми я общался ее пробовали насколько я знаю. Если кто то кроме меня ее использует (или пробовал) отпишитесь в этот топик если вас не затруднит (с комментариями и предложениями если таковые будут). Хочу заметить что утилита все-таки не для того чтобы ее по крону пускать (т.е. это скорее инструмент для починки когда что то не то с размером таблицы случилось а не замена autovacuum хотя я временами с --all ее пускаю но только руками под контролем происходящего). В данный момент все известные мне баги или проблемы в ней устранены (хотя безусловно там есть куда дальше развивать). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2011, 02:47 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Использовал на рабочих базах, проблем не обнаружил ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2011, 10:48 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
планирую использовать, на тестах ведет себя хорошо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 12:06 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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 # после использовия ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2011, 07:38 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
У меня не хочет работать от пользователя postgres. Требует пароль: failed: fe_sendauth: no password supplied at /etc/postgresql/9.0/UTF8/vacuum_table.pl line 732 В то же время для работы psql вполне хватает ident в pghba_conf. Что я делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2011, 10:08 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
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)или подождать пару дней когда у меня появится время на выходных и я эту проблему устраню (возможно даже сегодня но обещать не буду). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2011, 10:54 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, спасибо, что-то я не подумал. Сделать работу через сокет было бы здорово. Мало ли кто представится postgres'ом c локалхоста..... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2011, 13:31 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim BogukТак что остаются 3 варианта если у вас таблица распухла... Забыли самый прямой путь - перекинуть данные во временную таблицу, truncate текущую, закинуть данные обратно. На ваших 20 гиг займет несколько минут даже при наличии индексов. При желании можно копировать инкрементально и рули повесить переадресующие на актуальную в текущий момент копию, если уж простой ~1 минуты критичен (а тормоза всего проекта в течении суток - это нормально?.. а если дедлок словите, пока вас на месте нет?). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 17:23 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
авторЗабыли самый прямой путь - перекинуть данные во временную таблицу, truncate текущую, закинуть данные обратно. тут ! очень важно не забыть повесить ! блокировочку какую-нибудь на таблицу в начале всего этого мероприятия. иначе можно потерять изменения между исходным копированием во временную таблицу и транкейтом. плюс транкейт сама по себе имеет эффекты - параллельные транзакции могут получать пустоту. http://www.postgresql.org/docs/current/static/sql-truncate.html - Warning номер 1 тут -- но в целом подход рабочий, поддерживаю. подобное юзаю для редко обновляемых больших таблиц, которые иногда могут распухать после массовых апдейтов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 19:28 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha Tyurin, Еще вопрос... а почему партиционирование не применяете? Скажем, по месяцам - тогда зачастую старые таблицы используются как read-only и их можно беспроблемно сжимать, да и размер данных в каждой таблице на порядки уменьшается. Если дело в специфике задачи, интересно было бы услышать подробности (хотя, вероятнее, БД унаследована в таком виде). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 23:29 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
MBG, часть "объектов" у меня живут "вечно", и крутятся туда - сюда, жизненный цикл потенциально бесконечный у них. это пока продут потому что так устроен, менять надо с самого верха. занимаемся и этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 10:11 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, в 9.2 баг при выполнении реиндексов из-за переименования pg_stat_activity.procpid в pg_stat_activity.pid: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
исправил у себя заменой в 414 строке Код: sql 1.
на Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 11:41 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Alexius, вот тут Postgresql-consulting.ru развитие ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 13:47 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
AlexiusMaxim Boguk, в 9.2 баг при выполнении реиндексов из-за переименования pg_stat_activity.procpid в pg_stat_activity.pid: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
исправил у себя заменой в 414 строке Код: sql 1.
на Код: sql 1.
собственно современная разработу живет вот тут вот https://code.google.com/p/pgtoolkit/downloads/list там этой проблемы быть не должно ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2013, 14:31 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Добрый день! Решил попробовать на базе в 200 гб(до этого создавал дубль индексов и удалял старые версии). Запустил Код: powershell 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? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2013, 11:53 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Попробуйте стандартные настройки без -c 500 -E 2 Вам точно нужен принудительный reindex? Как мне кажется, это нужно при активных изменениях по PK Еще можно maintenance_work_mem поднять конкретно в этой сессии. У меня база в два раза меньше, самая большая таблица ~10G, но все на порядок быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2013, 12:52 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Константин ЕвтеевДобрый день! Решил попробовать на базе в 200 гб(до этого создавал дубль индексов и удалял старые версии). Запустил Код: powershell 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 (это вообще всегда полезно) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2013, 14:36 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Доброе время суток! Попробовал срипт на пг 9.3, вот так ругнулось: Код: sql 1.
Я так понимаю в скрипте нужно исправить "procpid" на "pid" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 01:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Доброе время суток! Попробовал срипт на пг 9.3, вот так ругнулось: Код: sql 1.
Я так понимаю в скрипте нужно исправить "procpid" на "pid" ? обновить версию на более свежую для начала ( например с https://github.com/PostgreSQL-Consulting/pgcompacttable ) у вас что то очень древнее по виду текста ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 04:01 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Спасибо за овет! С свн брал. Это не одно и тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 07:35 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Ааа, все увидел! Спасибо еще раз! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 07:39 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Код: sql 1. 2. 3. 4.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Больше половины места свободоно на разделе с базой /dev/sdb1 191G 90G 102G 47% /mnt/sdb На кореневом правда /dev/sda1 16G 12G 3.3G 78% / Подскажите пож в чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 10:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Неверное опять не оттуда взял :) https://github.com/grayhemp/pgtoolkit - вот здесь наверное свежая версия. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 10:40 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Maxim Boguk, Код: sql 1. 2. 3. 4.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Больше половины места свободоно на разделе с базой /dev/sdb1 191G 90G 102G 47% /mnt/sdb На кореневом правда /dev/sda1 16G 12G 3.3G 78% / Подскажите пож в чем проблема? так в чем ваша проблема то? в таблице 11% свободного места... если всеравно хочеться ее сжать то --force добавьте (но смысла сжимать таблицу с 10% свободного маста немного). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2014, 11:00 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Спасибо! Вы правы, нет места в таблицы. Что делать в таких случаях? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2014, 20:40 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Спасибо! Вы правы, нет места в таблицы. Что делать в таких случаях? а что вы хотите получить? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 03:42 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Как поступать с таблицами в которых не достаточна места? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 13:41 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Как поступать с таблицами в которых не достаточна места? Никак, они занимают сколько занимают. Если места не хватает то придумывать что и как удалять или места больше на дисках выделять. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 14:52 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Спасибо за ответ, а можно как то подробнее или ссылку на ман по этой теме? Места на разделе где БД более чем достаточно. df -h|grep pos /dev/sdb1 197G 110G 78G 59% /var/lib/postgresql Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Что не так делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 17:03 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Спасибо за ответ, а можно как то подробнее или ссылку на ман по этой теме? Места на разделе где БД более чем достаточно. df -h|grep pos /dev/sdb1 197G 110G 78G 59% /var/lib/postgresql Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: sql 1. 2. 3.
Что не так делаю?а чего вы ожидаете ? скорее всего -- чего-то странного снесите индексы, дропните тосты -- может быть и подгоните размер таблицы к полному размеру таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 17:26 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31, В вашей таблице слишком мало мусора, чтобы компактор ее сжал добровольно, как заставить сжимать принудительно, вам уже писали выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 19:03 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Ыyura31, В вашей таблице слишком мало мусора, чтобы компактор ее сжал добровольно, как заставить сжимать принудительно, вам уже писали выше.поскольку юра с упорством маньяка приводит левое (не относящееся к делу) сравнение полного размера таблицы (с индексами и тостами) с размером голого "релейшена" (без индексов и тостов) предполагаю, что он хочет добиться странного -- а именно сжать таблицу до 2216 MB. объяснять ему ,что при хотении странного, надобно первым делом себя перепроверить -- дело важное, но малоперспективное. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 20:47 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Ы, возможно Вы правы. Завтра попробую сделать ваккум фулл этой таблицы и показать результат. лопата, Все что я предоставляю, я понимаю, чего я не понимаю, я спрашиваю. И не надо умничать. pg_relation_size | pg_total_relation_size ------------------+------------------------ 2216 MB | 18 GB Это я предоставил для Максима, для подтверждения что свободного места на дисках больше чем занимает таблица. С названия полей и ежу понятно что с индексами, а что без, нет чего сказать\помочь, пройдите лучше мимо! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2014, 21:49 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Ы, возможно Вы правы. Завтра попробую сделать ваккум фулл этой таблицы и показать результат. лопата, Все что я предоставляю, я понимаю, чего я не понимаю, я спрашиваю. И не надо умничать. pg_relation_size | pg_total_relation_size ------------------+------------------------ 2216 MB | 18 GB Это я предоставил для Максима, для подтверждения что свободного места на дисках больше чем занимает таблица. С названия полей и ежу понятно что с индексами, а что без, нет чего сказать\помочь, пройдите лучше мимо!вам по кругу второй раз написали, что свободного места (то, чего можно ужать) в таблице меньше 20%. чтобы сжать меньше 20 (чтобы компактор не увиливал) -- используйте ключ компактора --force (это опять не я, а раньше написали) т.е. чего тут не ясно -- не ясно. хехе т.ч. мне остаётся только умничать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 00:29 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Ы, возможно Вы правы. Завтра попробую сделать ваккум фулл этой таблицы и показать результат. лопата, Все что я предоставляю, я понимаю, чего я не понимаю, я спрашиваю. И не надо умничать. pg_relation_size | pg_total_relation_size ------------------+------------------------ 2216 MB | 18 GB Это я предоставил для Максима, для подтверждения что свободного места на дисках больше чем занимает таблица. С названия полей и ежу понятно что с индексами, а что без, нет чего сказать\помочь, пройдите лучше мимо! попробуйте для интереса запустить с ключами --force --reidex но вообще не понятно откуда вывод "свободного места на дисках больше чем занимает таблица". вы почитайте что эти две функции считают 1)размер файла собственно таблицы на диске 2)суммарный размер файлов относящихся к таблице (включая toast, все индексы и прочая) при такой большой разнице у вас или очень много индексов или в таблице большой toast (если вы в ней храните большие по длинне тексты или картинки или еще какой xml то это нормальная ситуация). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 03:59 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, не подскажете -- реиндекс у вас вызывается стандартный, блокирующий, или вы что-то там конкурентно делаете ? -- у меня есть постоянно обновляющиеся таблички с индексами раздутыми примерно втрое[оптимистическая оценка]. а поскольку постоянно висят какие-то недобитые 10 и более минутные транзакции (текущие отчеты, джобы) -- интересно их реиндексить не сильно блокируя. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:27 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
лопатаMaxim Boguk, не подскажете -- реиндекс у вас вызывается стандартный, блокирующий, или вы что-то там конкурентно делаете ? -- у меня есть постоянно обновляющиеся таблички с индексами раздутыми примерно втрое[оптимистическая оценка]. а поскольку постоянно висят какие-то недобитые 10 и более минутные транзакции (текущие отчеты, джобы) -- интересно их реиндексить не сильно блокируя. неблокирующий (через конкурентный create/drop) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 10:54 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31 Код: plaintext 1. 2. 3.
По документации : `pg_relation_size` возвращает размер таблицы без индексов, тостов и вспомогательных данных (FSM, VM). `pg_total_relation_size` возвращает размер таблицы включая все индексы, тосты и прочая. Ни одна из этих функций не лезет внутрь и не проверяет видимость данных, т.е. они не могут быть использованы для определения степени раздутости таблицы и/или индексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2014, 15:06 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
https://github.com/pgexperts/pgx_scripts/tree/master/administration примеры подходов к замеру блоатов: * index_bloat_check.sql * table_bloat_check.sql ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 21:57 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha Tyurin, ну и у Максима там тоже должна быть мерилка блоата ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2014, 22:00 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Misha TyurinMisha Tyurin, ну и у Максима там тоже должна быть мерилка блоата лучшие мерилки это pgstattuple/pgstatindex из pgstattuple contrib они во всяком случае реальные цифры дают а не непонятное приближение посчитанное по заумной эвристике ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 05:22 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim BogukMisha TyurinMisha Tyurin, ну и у Максима там тоже должна быть мерилка блоата лучшие мерилки это pgstattuple/pgstatindex из pgstattuple contrib они во всяком случае реальные цифры дают а не непонятное приближение посчитанное по заумной эвристике pgstattuple contrib +1 ну да, ну да ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 16:14 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Спасибо за прекрасный инструмент! Сегодня (да, вот так вот поздно) нашел этот тред на форуме и с большим интересом ознакомился. Исходник инструмента брал вот отсюда: GitHub PostgreSQL-Consulting Я работаю на windows и поэтому сначала озаботился установкой Perl. Остановилcя на ActivePerl 5.20.1.2000 Попробовал выполнить и столкнулся с проблемой - функция getpwuid($<) (её просто нет в реализации под windows) Поискав.. нашел решение - заменить на getlogin() Заработало! Попробовал на своей локальной БД (6 Гб). Всё отработало без ошибок. У меня стоит PostgreSQL 9.4.1 (64 bit) Возможно мой опыт использования на Windows будет кому-то полезен. Есть предложение - не нашел опций для задания вывода всех информационных сообщений в файл лога запуск вида ... > may.log это конечно как вариант, но виде отдельной опции : на экран только ошибки, а в лог детали (это просто как пример) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2015, 17:01 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
grufos, grufosЯ работаю на windows и поэтому сначала озаботился установкой Perl.Первое что вам скажут - поставьте Линукс. Просто потому что Линукс для Пг - родная ОС, в то время, как Винодус для ПГ не является основной ОС. Нет, там он тоже работает, но медленнее и не всегда очевидно. + бывают специфичные для винды ошибки. Но основной довод - тут очень мало кто знает как готовит Пг на Венде, по причине того, что это никому не надо было. Спецов мало. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2015, 02:30 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
grufosMaxim Boguk, Спасибо за прекрасный инструмент! Сегодня (да, вот так вот поздно) нашел этот тред на форуме и с большим интересом ознакомился. Исходник инструмента брал вот отсюда: GitHub PostgreSQL-Consulting Я работаю на windows и поэтому сначала озаботился установкой Perl. Остановилcя на ActivePerl 5.20.1.2000 Попробовал выполнить и столкнулся с проблемой - функция getpwuid($<) (её просто нет в реализации под windows) Поискав.. нашел решение - заменить на getlogin() Заработало! Попробовал на своей локальной БД (6 Гб). Всё отработало без ошибок. У меня стоит PostgreSQL 9.4.1 (64 bit) Возможно мой опыт использования на Windows будет кому-то полезен. Есть предложение - не нашел опций для задания вывода всех информационных сообщений в файл лога запуск вида ... > may.log это конечно как вариант, но виде отдельной опции : на экран только ошибки, а в лог детали (это просто как пример) Это вообще сюрприз что оно хоть как то под Win работает если честно. Я о таком варианте даже не думал когда разрабатывал. Про лог в файл - продумаю и добавлю в течении какого то времени (идея наверное небесмысленная хотя я в 100% случаев использую >pgc.log). --Maxim Boguk www.postgresql-consulting.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2015, 04:49 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Подскажите пожалуйста, как работает pgcompact в нативной мастер-слейв репликации. Пробовал в такой связке, у меня на время процедуры синхронизация останавливалась. После окончание все восстанавливалось с архивов обратно. Можно это обойти? Зарание спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 19:38 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
yura31Maxim Boguk, Подскажите пожалуйста, как работает pgcompact в нативной мастер-слейв репликации. Пробовал в такой связке, у меня на время процедуры синхронизация останавливалась. После окончание все восстанавливалось с архивов обратно. Можно это обойти? Зарание спасибо! pgcompact на репликацию вообще никак влиять не должен и не может. Но количество wal генерируемых при его работе может быть заметно выше обычного. Могло происходить следующее: 1)не хватала канала между мастером и репликой на передачу всего потока wal и в итоге 2)в какой то момент просто не хватило установленного у вас wal_keep_segments и реплика отвалилась. Стоит логи реплики посмотреть на этот счет. И возможно поставить какое то разумное значение для wal_keep_segments (5000 например только проверив что у вас места на дисках хватает). -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2015, 05:21 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, >1)не хватала канала между мастером и репликой на передачу всего потока wal Да, Вы правы, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2015, 08:06 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Boguk, Вопрос по документации выдаваемой по ключу --man --no-reindex Reindex tables after processing. по наименовании ключа "--no-reindex" можно сказать, что эта опция говорит об отключении индексирования. А вот во описанию ключа: Переиндексация таблиц после обработки. (То есть включение индексирования) Здесь что-то не так или может быть я не правильно что-то из этих 2-х строк читаю ... Рассудите... В теле скрипта я вижу, что добавился новый ключ 'i|initial-reindex' => \$initial_reindex но его нет в описании в --man можно услышать ваш комментарий? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2015, 07:31 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
grufos, Мнда давненько я в --man не заглядывал. Поправим на днях. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2015, 08:30 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
grufosMaxim Boguk, Вопрос по документации выдаваемой по ключу --man --no-reindex Reindex tables after processing. по наименовании ключа "--no-reindex" можно сказать, что эта опция говорит об отключении индексирования. А вот во описанию ключа: Переиндексация таблиц после обработки. (То есть включение индексирования) Здесь что-то не так или может быть я не правильно что-то из этих 2-х строк читаю ... Рассудите... В теле скрипта я вижу, что добавился новый ключ 'i|initial-reindex' => \$initial_reindex но его нет в описании в --man можно услышать ваш комментарий? Вывод --man поправили Новую версию выложили. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2015, 11:47 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Оставлю положительный отзыв о работе тулзы. Использовал на бою, за 23 часа вычистила 270Гб таблицу, высвободив в ОС около 230Гб. Из 23 часов, последние 8 часов это работа вакуума, который кусками возвращал место в ОС (phase: truncating heap) (кстати не понял этот момент, почему итерационно. Я ожидал возврат большим куском сразу по аналогии с truncate only в MS SQL :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 07:32 |
|
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 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
perAlexiuspgcompacttable не умеет сжимать данные в toast'ах (база не дает в них делать изменения) Maxim Boguk, добрый день. Так ли это? Да. Если у вас toast распухший вам pg_repack нужен если у вас достаточно места есть на сервере. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 10:55 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
Maxim Bogukperпропущено... Maxim Boguk, добрый день. Так ли это? Да. Если у вас toast распухший вам pg_repack нужен если у вас достаточно места есть на сервере. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Очень жалко... а toast как-то отдельно пересоздать можно без репака? Типа вакуум фул, только для toast ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 10:57 |
|
Vacuum Full без полного лока таблицы
|
|||
---|---|---|---|
#18+
perMaxim Bogukпропущено... Да. Если у вас toast распухший вам pg_repack нужен если у вас достаточно места есть на сервере. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Очень жалко... а toast как-то отдельно пересоздать можно без репака? Типа вакуум фул, только для toast ? vacuum full всей таблицы. PS: не понимаю как у вас недельные времена получаются на такую мелочь, даже терабайтные таблицы компактором за несколько дней легко обрабатываются. Такое может быть только если у вас диски не просто медленные а ОЧЕНЬ медленные, и вам надо сначала проблемы с оборудованием порешать. PPS: --delay-ratio=0 в командную строку добавьте будет веселее идти. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 11:13 |
|
|
start [/forum/topic.php?all=1&fid=53&tid=1995575]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
154ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 503ms |
0 / 0 |