|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Мне тут досталась одна база на postgresql. Уже под 3ТБ. Самая большая таблица - уже 2.7ТБ. На ней был отключен автовакуум. Я его включил с настройками по умолчанию в 2016 году. Тогда рост остановился. И вот таблица снова начала расти в размере. Я настроил автовакуум для нескольких крупных таблиц другие коэффициенты: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Теперь автовакуум отрабатывает примерно 1 раз в час. Код: plsql 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.
После Vacuum (autovacuum) таблица продолжает расти. Снова по 1 ГБ в день отжирает. При этом в страницах полно свободного места: Код: plsql 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
Почему не заполняются пустые строки в страницах, а вместо этого сервер требует нового места на файловой системе? Версия 9.1. Простой крайне не желателен. Т.е остановить запросы, сделать дамп и восстановить с дампа (на обновленную версию) не дадут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:50 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Вообщем, задача: Как остановить рост размера бд, ввиду свободного места в таблицах - это по минимуму. В идеале сжать таблицы, вернув место файловой системе. Есть ли какие-н идеи? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2019, 17:54 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, 1.включите логирование автовакума (log_autovacuum_min_duration=0), и посмотрите реально сколько он вычищает страниц. 2. может у вас длинные транзакции \ idle_in_transaction сессии которые ему мешают работать. 3. включенный hot_standby_feedback на реплике, на которой работают длинные \ idle_in_transaction сессии, которые также могут мешать работе АВ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 09:12 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, Увидел, АВ работает судя по n_dead_tup Может растет не таблица а индексы в ней? Блоатинг проверяли по индексам? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 09:23 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
gav21, Да, действительно индексы распухли: Код: plsql 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.
Похоже у 9.1 нет опции 'rebuild online'? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 10:00 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
После автовакуума, размер "распухания" индексов уменьшается, но не до конца: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Создал вторую версию индекса с опцией CONCURRENTLY. Постгрес взял и создал копию индекса, т.е. он не читал таблицу и не строил по ней индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 10:47 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
gav21, чего-то все равно не так. Индексы чистятся автовакуумом. А пустые места в страницах не заполняются. Может нужно как-то пересоздать Visibility Map и(или) Free Space Map? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 11:00 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxskiПосле автовакуума, размер "распухания" индексов уменьшается Автовакуум не может уменьшать индекс. Вычищать и отдавать страницы в переиспользование - это возможно например для btree. Возвращать место ОС - нет. maxskiПостгрес взял и создал копию индекса, т.е. он не читал таблицу и не строил по ней индекс. Не умеет. Построение индекса всегда идёт с нуля по таблице, что для create index, что create index concurrently, что reindex, vacuum full или некоторые формы alter table. maxskiТ.е остановить запросы, сделать дамп и восстановить с дампа (на обновленную версию) не дадут. А зачем вам дамп данных для pg_upgrade? maxskiПохоже у 9.1 нет опции 'rebuild online'? Нет такой опции. Если повезёт - сделаем в pg12. По крайней мере мне более сломать этот патч не удалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 11:02 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, вот тут подробно разжевали механизм блоатинга индексов https://www.sql.ru/forum/1290216/puhnet-indeks?hl= ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 12:04 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
MelkijmaxskiПосле автовакуума, размер "распухания" индексов уменьшается Автовакуум не может уменьшать индекс. Вычищать и отдавать страницы в переиспользование - это возможно например для btree. Возвращать место ОС - нет. Я имел в виду вот это "totalwastedbytes" в выводе выше MelkiНе умеет. Построение индекса всегда идёт с нуля по таблице, что для create index, что create index concurrently, что reindex, vacuum full или некоторые формы alter table. Вот создал за 65 секунд. Таблица 'attachments' под 2 ТБ. Что он по ней за 65 секунд построил? ))) Он мог только скопировать другой индекс за это время. Или вы другое имели в виду? )) Код: plsql 1. 2. 3.
MelkijА зачем вам дамп данных для pg_upgrade? c pg_upgrade попробую разобраться )) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 13:09 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxskiMelkijпропущено... Автовакуум не может уменьшать индекс. Вычищать и отдавать страницы в переиспользование - это возможно например для btree. Возвращать место ОС - нет. Я имел в виду вот это "totalwastedbytes" в выводе выше Ни малейшей идеи что бы это могло значить. Код: plaintext 1. 2. 3.
maxskiВот создал за 65 секунд. Таблица 'attachments' под 2 ТБ. Что он по ней за 65 секунд построил? ))) Он мог только скопировать другой индекс за это время. Или вы другое имели в виду? )) Покажите pg_size_pretty(pg_table_size(pg_class.oid)) AS size, pg_size_pretty(pg_indexes_size(pg_class.oid)) AS idxsize, pg_size_pretty(pg_total_relation_size(pg_class.oid)) as "total" для этой таблицы. Как вы изначально привели n_live_tup в 30 лямов - это вполне можно пройти за 65 секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 13:19 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
MelkijВ ядре такого нет, так что что вы там считаете - не представляю. так вот же, в "выводе выше 21819384 Я не стал там приводить весь скрипт (на 1.5 экрана), чтобы не отвлекать внимание. Но вообщем, "totalwastedbytes" - это степень "пухлости". И я там нигде не говорил, что автовакуум возвращает место файловой системе. MelkijmaxskiВот создал за 65 секунд. Таблица 'attachments' под 2 ТБ. Что он по ней за 65 секунд построил? ))) Он мог только скопировать другой индекс за это время. Или вы другое имели в виду? )) Покажите pg_size_pretty(pg_table_size(pg_class.oid)) AS size, pg_size_pretty(pg_indexes_size(pg_class.oid)) AS idxsize, pg_size_pretty(pg_total_relation_size(pg_class.oid)) as "total" для этой таблицы. Как вы изначально привели n_live_tup в 30 лямов - это вполне можно пройти за 65 секунд. Привожу: весь размер таблицы оказался в pg_toast_* Код: plsql 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. 44. 45. 46. 47.
И определение таблички: Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 15:51 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
MelkijА зачем вам дамп данных для pg_upgrade? Для pg_upgrade надо останавливать instance. Выше уже говорилось, что "Простой крайне не желателен." ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 17:16 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxskiВыше уже говорилось, что "Простой крайне не желателен." Раз в год планово на 10 минут можно остановить что угодно. Потому что если нельзя - сделайте чтобы было можно. Раз уж вы готовы к затратам на столько девяток. maxskiПривожу: весь размер таблицы оказался в pg_toast_* Ожидаемо. Вот для toast и смотрите, есть ли там пустое место, а не в attachments ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 17:40 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Melkij, в pg_toast лезет vacuum (по таблице). И там ничего особо свободного нет: Я выполнял это ранее: Код: plsql 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Если убрать ограничение schemaname='public', то появляется pg_toast со своими жалкими 338 dead tuples: Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 18:18 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, попробуйте посмотреть более корректную оценку bloat в attachments запросом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
скорей всего bloat там нет заметного судя по выводу вакуума и наблюдаемому росту размеров таблицы. т.е. пишутся какие-то длинные строки в тосты. для запроса нужен экстеншн pgstattuple (есть в контрибе) и запрос потребует полного чтения этих почти 3ТБ (т.е. это будет долго и нагрузка на диски будет). покажите еще вывод Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 12:56 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Alexius, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
А первый запрос еще не выполнился. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 15:50 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Alexius, Первый запрос выполнился: Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 20:41 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Alexius, cмысл в том, что страницы полупустые: Код: plsql 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.
И что эти полупустые страницы числятся как занятые. Вот в этом вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 20:53 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, полупустые страницы в самой таблице, и не так их и много, суммарно 4.6% пустого места. учитывая что toast'ов почти на 2 порядка больше, это как-то вообще не должно волновать. а в toast таблице 0.5% свободного места. т.е. сжимать тут нечего совсем. надо чистить данные: или удалять что-то старое или например поле headers почистить как самое большое (в среднем по статистике, которая может врать) и врядли полезное судя по названию. или искать самые длинные строки и чистить их: возможно есть небольшой процент строк, в которых очень много мусора запихано. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2019, 21:21 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Alexius, Интересно vacuum full attachments будет перемещать строки заполняя полупустые страницы или будет перемещать в новое место? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 10:05 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, vacuum full сделает копию таблицы, затем удалит старую. Повторю ещё раз: то что вы сожмёте саму attachments размером в 36гб никак вам не поможет с её toast частью, где неиспользуемого места почти нет и потому база запрашивает новое место на диске у ОС. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 11:26 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Melkijmaxski, .... Повторю ещё раз: то что вы сожмёте саму attachments размером в 36гб никак вам не поможет с её toast частью, где неиспользуемого места почти нет и потому база запрашивает новое место на диске у ОС. Я про это выяснил еще пару-тройку дней назад, когда с помощью запроса построил гистограмму распределения свободного места - количество блоков. Код: plsql 1.
Выяснил, что от attachments (36GB) - примерно 30% незаполнено, т.е те же 12GB, что потом (вчера) подтвердил мега-запрос на полдня исполнения. Что про это повторять? Я же про это не спрашивал. Оракл может перемещать строки в блоках. Хотя быстрее можно ужать через смену tablespace: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 14:19 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
maxski, тогда зачем спрашивать про vacuum full? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 14:27 |
|
После Vacuum (autovacuum) таблица продолжает расти
|
|||
---|---|---|---|
#18+
Melkij, "Интересно vacuum full attachments будет перемещать строки заполняя полупустые страницы или будет перемещать в новое место?" Что такого в этом вопросе? Его нельзя задавать? Я же привел пример сравнения с Оракл в аналогичной ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2019, 15:40 |
|
|
start [/forum/topic.php?fid=53&fpage=24&tid=1994518]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
others: | 70ms |
total: | 258ms |
0 / 0 |