PostgreSQL: poprawa wydajności PG dump, PG restore
Kiedy zaczynałem, używałem pg_dump
z domyślnym zwykłym formatem. Byłem nieoświecony.
Badania ujawniły mi poprawę czasu i rozmiaru pliku za pomocą pg_dump -Fc | gzip -9 -c > dumpfile.gz
. Byłem oświecony.
Kiedy nadszedł czas, aby utworzyć bazę danych na nowo,
# create tablespace dbname location '/SAN/dbname';
# create database dbname tablespace dbname;
# alter database dbname set temp_tablespaces = dbname;
% gunzip dumpfile.gz # to evaluate restore time without a piped uncompression
% pg_restore -d dbname dumpfile # into a new, empty database defined above
Czułem się nieoświecony: przywracanie zajęło 12 godzin, aby utworzyć bazę danych, która jest tylko ułamkiem tego, co się stanie:
# select pg_size_pretty(pg_database_size('dbname'));
47 GB
Ponieważ są przewidywania, że ta baza danych będzie kilka terabajtów, muszę spójrz na poprawę wydajności teraz.
Proszę, oświeć mnie.6 answers
Najpierw sprawdź, czy uzyskujesz rozsądną wydajność IO z konfiguracji dysku. Następnie sprawdź, czy instalacja PostgreSQL jest odpowiednio dostrojona. W szczególności shared_buffers
powinno być ustawione poprawnie, {[1] } powinno być zwiększone podczas przywracania, {[2] } powinno być wyłączone podczas przywracania, wal_buffers
powinno być zwiększone do 16MB podczas przywracania, checkpoint_segments
powinno być zwiększone do czegoś takiego jak 16 podczas przywracania ,nie powinno mieć żadnego nieuzasadnionego logowania (jak logowanie każdej wykonanej instrukcji), auto_vacuum
powinny być wyłączone podczas przywracania.
Jeśli używasz wersji 8.4 również eksperymentuj z przywracaniem równoległym, opcja --jobs dla pg_restore.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 17:01:32
Improve PG dump & restore
PG_DUMP / Zawsze używaj opcji format-directory i -j
time pg_dump -j 8 -Fd -f /tmp/newout.dir fsdcm_external
PG_RESTORE / Zawsze używaj tuningu dla postgres.opcje conf i format-directory oraz -j
work_mem = 32MB
shared_buffers = 4GB
maintenance_work_mem = 2GB
full_page_writes = off
autovacuum = off
wal_buffers = -1
time pg_restore -j 8 --format=d -C -d postgres /tmp/newout.dir/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-11 21:17:02
Dwa zagadnienia/pomysły:
Podając -Fc, wyjście pg_dump jest już skompresowane. Kompresja nie jest maksymalna, więc możesz zaoszczędzić trochę miejsca używając "gzip -9" , ale założę się, że to nie wystarczy, aby zagwarantować dodatkowy czas (i I/O) używany do kompresji i dekompresji wersji-Fc kopii zapasowej.
Jeśli używasz PostgreSQL 8.4.x możesz potencjalnie przyspieszyć przywracanie z kopii zapasowej a-Fc za pomocą nowej opcji linii poleceń pg_restore " - j n" gdzie n = liczba połączeń równoległych, które mają zostać użyte do przywrócenia. Pozwoli to pg_restore na załadowanie więcej niż jednej tabeli danych lub wygenerowanie więcej niż jednego indeksu w tym samym czasie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 16:47:18
Zakładam, że potrzebujesz kopii zapasowej, a nie dużej aktualizacji bazy danych.
Do tworzenia kopii zapasowych dużych baz danych należy ustawić ciągłą archiwizację zamiast pg_dump
.
Twórz kopie zapasowe bazy np. codziennie za pomocą
psql template1 -c "select pg_start_backup('
`date + % F - % T"') "
Przywracanie byłoby jak proste jak przywrócenie bazy danych i dzienników WAL nie starszych niż pg_start_backup
Czasu z miejsca kopii zapasowej i uruchomienie Postgres. I będzie znacznie szybciej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 18:20:32
zcat dumpfile.gz | pg_restore -d db_name
Usuwa pełny zapis nieskompresowanych danych na dysk, który jest obecnie Twoim wąskim gardłem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 02:34:03
Jak można się domyślić po prostu przez fakt, że kompresja kopii zapasowej powoduje szybszą wydajność, kopia zapasowa jest związana We / Wy. Nie powinno to dziwić, ponieważ backup jest prawie zawsze związany z I/O. Kompresowanie obciążenia I/o danych dla obciążenia CPU, a ponieważ większość procesorów jest bezczynna podczas przesyłania danych, kompresja wychodzi jako wygrana netto.
Aby przyspieszyć czas tworzenia kopii zapasowych/przywracania, potrzebujesz szybszego wejścia / Wyjścia. przykład, to prawie wszystko, co możesz zrobić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 16:31:47