Рубрики
Uncategorized

Ускорение Postgres восстанавливает часть 2

Потому что сокращение времени восстановления пополам просто было недостаточно По-видимому, есть много … с меткой DevOps, SoftWareparedEvelopment, Technology, Tech.

Потому что сокращение времени восстановления пополам просто было недостаточно

Видимо, в одеялах много мопсов

В Часть 1 Ускорение Postgres Восстанавливает Я говорил о том, как мы улучшили время, чтобы восстановить нашу местную среду. Первоначально мы начали наивно, PG_dump’инг? PSQL Отказ Это заняло более 30 минут, чтобы сделать полное восстановление. В конце концов мы использовали Пользовательский формат Postgres и использовал аргумент работы для ускорения восстановления до 16 минут.

В этой статье я собираюсь набросать, как мы сократили размер файла нашего резервного копирования, что, в свою очередь, ускорил наши восстания еще дальше.

Расследование размеров резервного копирования

Когда я впервые писал о сокращении размера наших резервных копий, сжатый размер резервного копирования сидел около 2 ГБ (30 ГБ несжатый). Со временем наша база данных почти удвоилась (сжатый 3,7 ГБ, 68 ГБ несжатый). Это означало, что оно не только было значительно больше времени для восстановления, оно также приняло двойное время для передачи файла.

С знанием того, что резервное копирование удвоилось по размеру, я начал пытаться выяснить, почему и где растут данные больше всего.

Первое, что я сделал, было на самом деле выяснить, что был несжатый размер базы данных.

# SELECT pg_size_pretty(pg_database_size('dbname'));

pg_size_pretty
----------------
 68 GB
(1 row)

Затем я решил посмотреть, смогу ли я копать размеры отдельных столов, чтобы увидеть, были ли какие-либо большими виновниками.

# SELECT table_name, pg_relation_size(table_name), pg_size_pretty(pg_relation_size(table_name))
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER by 2 DESC;

table_name | pg_relation_size | pg_size_pretty
-------------------+------------------+---------------
 logging | 19740196864 | 18 GB
 reversions | 15719358464 | 15 GB
 webhook_logging | 8780668928 | 8374 MB
 ... | 1994645504 | 1902 MB
 ... | 371900416 | 355 MB
 ... | 304226304 | 290 MB

Как вы можете увидеть TOP 3 Tables, которые составляют более 60% всей базы данных, все связаны с историей или регистрацией, оба из которых обычно не нужны при восстановлении вашей среды Dev. Когда вы включите индексы на эти таблицы (17 ГБ, 1 ГБ, 1,5 ГБ соответственно), эти таблицы составляют 89% базы данных. С этой информацией вручную я решил перейти от открытия (уменьшение на 89% достаточно хорош для меня) и посмотрим, смогу ли я исключить эти таблицы из наших dev Backups.

Минимизация резервного копирования

Всякий раз, когда я приближаюсь к проблеме, мне нравится начать с чтения проектной документации. Документы PostgreSQL фантастические и после нескольких минут чтения через PG_dump . Документация я нашел именно то, что мне нужно.

pg_dump dbname -Fc \
   --exclude-table-data 'logging*' \
   --exclude-table-data 'reversions*' \
   --exclude-table-data 'webhooks_logging*' > postgres.dev.sql

* Используется в качестве подстановочного знака, чтобы удалить индексы для этих таблиц.

Указав - Exclude-table-data Параметр I смог уменьшить размер базы данных от 3,7 ГБ сжатого (68 ГБ несжатый) до ГБ сжатый 0,7 ГБ (5,4 ГБ сжатый).

Как вы можете видеть ниже, результаты довольно велики. Это поправило

Ранее:

$ pg_restore -d db -j 8 dumpfc.gz

real 16m49.539s
user 1m1.344s
sys 0m39.522s

Теперь:

$ pg_restore -d db -j 8 devfc.gz

real 5m38.156s
user 0m24.574s
sys 0m13.325s

Как видите, удаление этих таблиц удалена на 89% от общего размера и ускорила общее время восстановления на 66%! Если вы помните обратно в часть 1, мы начали с начального времени восстановления 32,5 минуты. Это означает, что нам удалось улучшить время восстановления более чем 26,9 минут или на 87%.

В конце концов наше время активного восстановления сократилось с 16 минут до 5 минут. Это экономит нам дополнительные 57 часов восстановления времени в год (6 Devs, 52 Восстанавливает год, 11 минут). Всего мы сняли 130 часов стоят времени, ожидая восстанавливаемых.

Окончательные советы и мысли

Возвращаясь к PostgreSQL Docs. Есть ряд вещей, которые мы могли бы сделать, чтобы потенциально сделать восстановление быстрее. Такие вещи, как использование -j Параметр на pg_dump Чтобы сделать резервную копию нашей базы данных быстрее (доступно только на PostgreSQL 9.3+). Отключение AutoCommit , увеличивая Обслуживание_work_mem Значение, чтобы быть намного больше или установить max_wal_size Значение, а также больше.

На данный момент, хотя я доволен общим временем, требуется, чтобы восстановить нашу местную среду.

Этот пост был первоначально опубликован на procrastinatingdev.com

Оригинал: «https://dev.to/adammckerlie/speeding-up-postgres-restores-part-2-226a»