Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
Например, я вставляю большое количество записей, серер притормаживает, насколько я понимаю на расширении файлов. Потом часть записей удаляю, делаю VACUUM. В базе остается место, уже аллоцированное и доступное для использования. И при следующей вставке по идее сервер должен побыстрее работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2007, 09:45 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
WinnipuhНапример, я вставляю большое количество записей, серер притормаживает, насколько я понимаю на расширении файлов. Потом часть записей удаляю, делаю VACUUM. А чего ему тормозить на расширении файлов? Благо таблицы в ПГ хранятся в разных файлах, а расширение файла - не самая долгая опреация, если конечно винт не "под завязку" накачан. FAT (как таблица, а не FS) практически всегда в памяти кешируется. Winnipuh В базе остается место, уже аллоцированное и доступное для использования. И при следующей вставке по идее сервер должен побыстрее работать. Ну, в принципе-то оно конечно да, но прыганье по страницам - не самое лучшее что может происходить с винтом. VACUUM FULL уменьшает кол-во страниц, соотвественно таблица, индексы и т.д. занимает меньше места. ИМХО главная проблема VACUUM FULL - блокировка всей таблицы. А так - юзайте на здоровье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2007, 14:44 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
WinnipuhНапример, я вставляю большое количество записей, серер притормаживает, насколько я понимаю на расширении файлов. Потом часть записей удаляю, делаю VACUUM. В базе остается место, уже аллоцированное и доступное для использования. И при следующей вставке по идее сервер должен побыстрее работать.Мы именно такую картину наблюдали. Добавление строк в заполненную таблицу выполнялось существенно медленнее, чем в таблицу с имеющимся пустым местом (после vacuum). Поэтому facuum full не злоупотребляем, ежедневно делаем vacuum (или сейчас autovacuum), и еженедельно - vacuum full. (При том, что ежедневно обновляется 20-100% данных.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 10:41 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
WinnipuhНапример, я вставляю большое количество записей, серер притормаживает, насколько я понимаю на расширении файлов. Потом часть записей удаляю, делаю VACUUM. В базе остается место, уже аллоцированное и доступное для использования. И при следующей вставке по идее сервер должен побыстрее работать. Ход мыслей правильный, был бы он неправильным в PostgreSQL бы не добавили такую штуку как FILLFACTOR . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 01:32 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю, то фраза This gives UPDATE a chance to place the updated copy of a row on the same page as the original, which is more efficient than placing it on a different page. говорит о том, что прикольно, если все версии одной записи находятся на одной странице. Как я понимаю, то прикольность заключается в том, что не разрастается индекс, и при проверке видимости не нужно читать несколько страниц. По идее для вставок - некритично, будут ли они вставлятся в конец или в середину - здесь уже нужно смотреть на индексы и т.д. Для обновлений - польза от попадания на ту же страницу вроде как очевидна. 2LeXa NalBat: А можно поконкретнее условия такого наблюдения? Не совсем понятно откуда такое (на каких механизмах) может браться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 11:09 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat и еженедельно - vacuum full. Не знаю как в вашем случае, но в моем, к сожалению, на OLTP 24x7 с таблицами > 1 Gb про VACUUM FULL приходится забыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 11:40 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
Andrey DaeronЕсли я правильно понимаю, то фраза This gives UPDATE a chance to place the updated copy of a row on the same page as the original, which is more efficient than placing it on a different page. говорит о том, что прикольно, если все версии одной записи находятся на одной странице. Как я понимаю, то прикольность заключается в том, что не разрастается индекс, и при проверке видимости не нужно читать несколько страниц.При апдейте происходит не только запись новой строки, но и изменение старой строки? Если так, то в случае нахождения обоих строк на одной странице, для этого потребуется запись одной страницы. Andrey DaeronПо идее для вставок - некритично, будут ли они вставлятся в конец или в середину - здесь уже нужно смотреть на индексы и т.д.Может быть для B-дерева лучше, если близкие записи будут лежать на одной странице, это бы ускорило выборку диапазона. Реализовано ли это в постгресе? Andrey Daeron2LeXa NalBat: А можно поконкретнее условия такого наблюдения? Не совсем понятно откуда такое (на каких механизмах) может браться.Наверное файловой системе быстрее записать в середину имеющегося файла, чем добавить к файлу кусок. Зависит от ФС? Хотя наш админ сейчас сказал, что по части ФС скорость этих операций должна быть почти одинаковая. Это наблюдали давно, но вот вроде бы нашел тест и результаты от 2004 года, кажется то что нужно. Видимо, дело не в ФС, а в fsync. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: plaintext 1. 2. 3. 4. 5. 6. Thamerlanк сожалению, на OLTP 24x7 с таблицами > 1 Gb про VACUUM FULL приходится забыть.И ладно, ИМХО, проживете и без него. У вас например и в ночь с субботы на воскресенье нельзя опустить сервис на 10 минут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 12:04 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatИ ладно, ИМХО, проживете и без него. У вас например и в ночь с субботы на воскресенье нельзя опустить сервис на 10 минут? К сожалению, опускать нельзя, ровно как и выделить 10 минут простоя. Пытаюсь обходиться VACUUM'ом (autovacuum) + надо срочно вводить вертикальное/горизонтальное партиционирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 13:17 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Andrey DaeronЕсли я правильно понимаю, то фраза This gives UPDATE a chance to place the updated copy of a row on the same page as the original, which is more efficient than placing it on a different page. говорит о том, что прикольно, если все версии одной записи находятся на одной странице. Как я понимаю, то прикольность заключается в том, что не разрастается индекс, и при проверке видимости не нужно читать несколько страниц.При апдейте происходит не только запись новой строки, но и изменение старой строки? Если так, то в случае нахождения обоих строк на одной странице, для этого потребуется запись одной страницы. По идее да. В каждой записи как минимум хранится ID транзакции с которой и по какую она видима. дока Т.е. для UPDATE - польза несомненна. LeXa NalBat Andrey DaeronПо идее для вставок - некритично, будут ли они вставлятся в конец или в середину - здесь уже нужно смотреть на индексы и т.д.Может быть для B-дерева лучше, если близкие записи будут лежать на одной странице, это бы ускорило выборку диапазона. Реализовано ли это в постгресе? Для B-дерева - однозначно лучше (например кластеризация по индексу). В постгресе ИМХО - не реализоавно, но уверенности в этом нет. В доках -не нашел. Тесты пока тоже не проводил. В ПГ в индексах хранятся номера страниц, в которых когда-то были данные и он каждый раз проверяет их там наличие (когда индекс юзает). Чем меньше страниц - тем однозначно лучше, меньше проверять. LeXa NalBat Andrey Daeron2LeXa NalBat: А можно поконкретнее условия такого наблюдения? Не совсем понятно откуда такое (на каких механизмах) может браться.Наверное файловой системе быстрее записать в середину имеющегося файла, чем добавить к файлу кусок. Зависит от ФС? Хотя наш админ сейчас сказал, что по части ФС скорость этих операций должна быть почти одинаковая. Ну мне тоже так кажется. Может быть накладные расходы? Опять же на индексы и таблицу страниц. LeXa NalBat Это наблюдали давно, но вот вроде бы нашел тест и результаты от 2004 года, кажется то что нужно. Видимо, дело не в ФС, а в fsync. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: plaintext 1. 2. 3. 4. 5. 6. Ну, наверно да... блок в ФС 512 байт, (1000*100)/512 ~200 выделиний блоков - многовато, еще и каждое fsync()'ить. Но я сильно не уверен в том, что такая же ситуация в СУБД. 1. В СУБД fsync() делается реже. 2. Выделение места в СУБД идет сразу на страницу, коорая по размерам ИМХО больше (4к штоли), и для мелких записей - естественно гораздо реже будут выделятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 13:53 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
Andrey DaeronВ ПГ в индексах хранятся номера страниц, в которых когда-то были данные и он каждый раз проверяет их там наличие (когда индекс юзает). Чем меньше страниц - тем однозначно лучше, меньше проверять.В индексе хранятся номера страниц таблицы? Проверяет их наличие в таблице? Тогда выигрыша не получается, так как параметр FILLFACTOR относится к индексу, а не таблице. А в таблице строки разбросаны по страницам, конечно в общем случае, если таблица не кластеризована по этому индексу. Или я что-то не так понял? Andrey Daeron LeXa NalBatНаверное файловой системе быстрее записать в середину имеющегося файла, чем добавить к файлу кусок. Зависит от ФС? Хотя наш админ сейчас сказал, что по части ФС скорость этих операций должна быть почти одинаковая.Ну мне тоже так кажется. Может быть накладные расходы? Опять же на индексы и таблицу страниц.Мне кажется, что наблюдается существенная разница в скорости. И тесты это вроде бы подтверждают. Чтобы уменьшить влияние "накладных расходов", я бы делал тест как можно проще, на таблице без индексов и т.п. Andrey Daeronблок в ФС 512 байтУ меня наверное 4K, судя по тому что ls показывает размер директории 4096. Andrey Daeron(1000*100)/512 ~200 выделиний блоков - многоватоСтолько юзер захотел данных добавить. Кстати вовсе не много - всего 100K. И смотреть ведь надо не на абсолютное время записи данных, а сравнивать скорости двух вариантов (в аллоцированный файл, и последовательное добавление) друг относительно друга. Andrey Daeronеще и каждое fsync()'итьМы пытались сэмулировать INSERT через write(), и COMMIT через fsync(). То есть юзер делает INSERT строки размером 100 байт, затем COMMIT. Andrey Daeron1. В СУБД fsync() делается реже.Нет, при commit-е, что мы и моделировали, то есть вроде бы тест верный. Andrey Daeron2. Выделение места в СУБД идет сразу на страницуНаблюдая за файлами в data/base похоже. А это где-то описано? Andrey Daeronкоорая по размерам ИМХО больше (4к штоли)Я думал, что страница в СУБД и сраница в ФС - одно и то же. Это не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 15:48 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Andrey DaeronВ ПГ в индексах хранятся номера страниц, в которых когда-то были данные и он каждый раз проверяет их там наличие (когда индекс юзает). Чем меньше страниц - тем однозначно лучше, меньше проверять.В индексе хранятся номера страниц таблицы? Проверяет их наличие в таблице? Тогда выигрыша не получается, так как параметр FILLFACTOR относится к индексу, а не таблице. А в таблице строки разбросаны по страницам, конечно в общем случае, если таблица не кластеризована по этому индексу. Или я что-то не так понял? Вот для таблиц: FILLFACTOR Код: plaintext 1. 2. 3. 4. 5. Про INSERT ни слова. Для UPDATE - супер, для INSERT - пофиг. В отличие от обычного сканирования индекса, в котором за один раз из индекса считывается только один указатель на запись, по которому потом поднимается сама запись из таблицы , bitmap scan считывает все указатели за один раз (Bitmap Index Scan), сортирует их в памяти и потом считывает записи уже в локализованном на диске порядке (Bitmap Heap Scan). Таким образом, увеличивается скорость чтения записей с диска, но ценою создания в памяти специальной структуры данных. Заметим, что производительность ORDER BY может пострадать, так как записи считываются не в том порядке, как они хранились в индексе. Если bitmap становится очень большим, то вместо записей хранятся ссылки на страницы, которые содержат записи, удовлетворяющие запросу. Поэтому, в таком случае, необходима дополнительная проверка (Recheck), чтобы получить только требуемые записи. (c) Олег Бартунов и Федор Сигаев Но че-то меня не оставляет мысль что и в самих индексах не совсем то хранится т.е. не ссылки на записи, а на страницы. Но найти ссылку не могу. По этому - это все таки ИМХО. LeXa NalBat Andrey Daeron LeXa NalBatНаверное файловой системе быстрее записать в середину имеющегося файла, чем добавить к файлу кусок. Зависит от ФС? Хотя наш админ сейчас сказал, что по части ФС скорость этих операций должна быть почти одинаковая.Ну мне тоже так кажется. Может быть накладные расходы? Опять же на индексы и таблицу страниц.Мне кажется, что наблюдается существенная разница в скорости. И тесты это вроде бы подтверждают. Чтобы уменьшить влияние "накладных расходов", я бы делал тест как можно проще, на таблице без индексов и т.п. Я не уверен, что этот код отражает происходящее в СУБД. ИМХО он слишком "простой" в реальной жизни все может быть нмного по другому. LeXa NalBat Andrey Daeronблок в ФС 512 байтУ меня наверное 4K, судя по тому что ls показывает размер директории 4096. Это зависит от ОС, FS и ее настроек. 512 - размер сектора. Роясь в инете - нарыл еще и 64к сектора. LeXa NalBat Andrey Daeron(1000*100)/512 ~200 выделиний блоков - многоватоСтолько юзер захотел данных добавить. Кстати вовсе не много - всего 100K. И смотреть ведь надо не на абсолютное время записи данных, а сравнивать скорости двух вариантов (в аллоцированный файл, и последовательное добавление) друг относительно друга. Может есть время на СУБД тест провести? На реальных данных? Забульбенить этак 10-50кк записей, проиндексировать к примеру сначала все четные. Потом их нафиг удалить и залить заново но уже INSERT'ом. VACUUM по вкусу :) и посмотреть и время, и физический размер файлов. Он тоже очччень интерисует. LeXa NalBat Andrey Daeronкоорая по размерам ИМХО больше (4к штоли)Я думал, что страница в СУБД и сраница в ФС - одно и то же. Это не так? Нет, не так. Цитата (правда про WAL, на сколько я нашел косвенные упоминания для обычных таблиц тоже самое): Each segment is divided into pages, normally 8 kB each . Для разных FS разные размеры кластеров, для PG - ИМХО это параметр компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 18:13 |
|
||
|
VACUUM FULL: не всегда нужен и полезен (?)
|
|||
|---|---|---|---|
|
#18+
Andrey DaeronВот для таблиц: FILLFACTOR Точно, что-то меня проглючило, будто бы FILLFACTOR только для индексов, а не для таблиц. Злостно заблуждался. Andrey DaeronМожет есть время на СУБД тест провести? На реальных данных? Забульбенить этак 10-50кк записей, проиндексировать к примеру сначала все четные. Потом их нафиг удалить и залить заново но уже INSERT'ом. VACUUM по вкусу :) и посмотреть и время, и физический размер файлов. Он тоже очччень интерисует.Может быть когда-нибудь позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 11:21 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2005155]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
8ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 321ms |

| 0 / 0 |
