|
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 |
|
|
start [/forum/topic.php?fid=53&msg=37050632&tid=1995575]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 152ms |
0 / 0 |