Uruchamiam to polecenie:
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2
To trwa zbyt długo. Patrzę na procesy z top
. Proces bzip2 zajmuje około 95%, a postgres 5% jednego rdzenia. wa
Wpis jest niska. Oznacza to, że dysk nie stanowi wąskiego gardła.
Co mogę zrobić, aby zwiększyć wydajność?
Może niech bzip2 użyje więcej rdzeni. Serwery mają 16 rdzeni.
Lub użyj alternatywy dla bzip2?
Co mogę zrobić, aby zwiększyć wydajność?
performance
postgresql
gzip
guettli
źródło
źródło
Odpowiedzi:
Istnieje wiele algorytmów kompresji i
bzip2
jest to jeden z tych wolniejszych. Zwykły jestgzip
zwykle znacznie szybszy, przy zwykle niewiele gorszej kompresji. Kiedy prędkość jest najważniejsza,lzop
jest moim ulubionym. Słaba kompresja, ale och, tak szybko.Postanowiłem się zabawić i porównać kilka algorytmów, w tym ich równoległe implementacje. Plik wejściowy jest wynikiem
pg_dumpall
polecenia na mojej stacji roboczej, pliku SQL 1913 MB. Sprzęt to starszy czterordzeniowy i5. Czasy są zegarem ściennym samego kompresji. Równoległe implementacje są ustawione na wykorzystanie wszystkich 4 rdzeni. Tabela posortowana według prędkości kompresji.Jeśli 16 rdzeni twojego serwera jest na tyle bezczynnych, że wszystkie mogą być użyte do kompresji,
pbzip2
prawdopodobnie zapewnią ci bardzo znaczne przyspieszenie. Ale wciąż potrzebujesz większej prędkości i możesz tolerować ~ 20% większe pliki,gzip
to prawdopodobnie najlepszy wybór.Aktualizacja: Dodałem
brotli
(patrz odpowiedź TOOGAM) wyniki do tabeli.brotli
s ustawienie jakości kompresji ma bardzo duży wpływ na współczynnik kompresji i prędkości, więc dodałam trzy ustawienia (q0
,q1
, iq11
). Domyślnie jestq11
, ale jest bardzo powolny i wciąż gorzej niżxz
.q1
wygląda jednak bardzo dobrze; taki sam współczynnik kompresji jakgzip
, ale 4-5 razy szybszy!Aktualizacja: Dodano
lbzip2
(patrz komentarz gmathts) izstd
(komentarz Johnny'ego) do tabeli i posortowano według szybkości kompresji.lbzip2
stawiabzip2
powrót rodziny w prowadzeniu przez kompresję trzy razy tak szybko, jakpbzip2
z wielkim stopniu sprężania!zstd
również wygląda rozsądnie, ale pokonuje gobrotli (q1)
zarówno stosunek, jak i prędkość.Mój oryginalny wniosek, że zwykły
gzip
jest najlepszym zakładem, zaczyna wyglądać niemal głupio. Choć dla wszechobecności wciąż nie da się go pokonać;)źródło
pg_dumpall
dane wyjściowe), więc prawdopodobnie jest nieco bardziej reprezentatywny :)lz4
przy okazji, jest nieco szybszy i wydajniejszy niżlzop
. Zużywa jednak więcej pamięci RAM, co jest istotne w systemach wbudowanych.zstd -T4
. Aby uzyskać bardzo szybkie ustawienia, możesz spróbowaćzstd -T4 -1
,zstd
domyślnie-3
, prawdopodobnie testowane ustawienie.Użyj pbzip2.
Instrukcja mówi:
Automatycznie wykrywa liczbę posiadanych procesorów i odpowiednio tworzy wątki.
źródło
pixz
ipigz
na rurze.lbzip2
wydaje się dawać lepszą prędkość, zużycie pamięci i nieznacznie lepszą kompresję niżpbzip2
. Tutaj są testy: vbtechsupport.com/1614lbzip2
wygląda ładnie! Dodałem go do mojej odpowiedzi :)Niektóre dane:
Porównanie algorytmów kompresji Brotli, Deflate, Zopfli, LZMA, LZHAM i Bzip2
CanIUse.com: funkcja: brotli pokazuje obsługę Microsoft Edge, Mozilla Firefox, Google Chrome, Apple Safari, Opera (ale nie Opera Mini ani Microsoft Internet Explorer).
Porównanie: Brotli vs deflate vs zopfli vs lzma vs lzham vs bzip2
-
Jeśli szukasz prędkości kompresji, to czego szukasz, to, które linie znajdują się dalej na tym wykresie. (Wpisy na górze tego wykresu pokazują ścisły współczynnik kompresji. Wyższy = węższy. Jeśli jednak priorytetem jest szybkość kompresji, warto zwrócić większą uwagę na to, które linie sięgają dalej na prawo na wykresie.)
Porównanie: współczynnik kompresji vs prędkość kompresji dla metod 7-Zip ZStandardNie wspominałeś o systemie operacyjnym. Jeśli Windows, 7-Zip ze ZStandardem (wersje) to wersja 7-Zip, która została zmodyfikowana w celu zapewnienia obsługi wszystkich tych algorytmów.
źródło
brotli
wcześniej, ale o tym zapomniałem. W odpowiedzi dodałem go do tabeli wskaźników! Byłem trochę rozczarowany jego wydajnością, z wyjątkiem ustawienia jakości 1, w którym zapewniał ten sam współczynnik kompresji, cogzip
przy znacznie wyższej prędkości.Użyj ZSTD . Jeśli jest wystarczająco dobry dla Facebooka, prawdopodobnie jest również wystarczająco dobry dla ciebie.
Mówiąc poważniej, jest całkiem niezły . Teraz używam go do wszystkiego, ponieważ po prostu działa i pozwala handlować prędkością na współczynnik na dużą skalę (najczęściej i tak prędkość ma większe znaczenie niż rozmiar, ponieważ przechowywanie jest tanie, ale prędkość jest wąskim gardłem).
Przy poziomach kompresji, które osiągają porównywalną ogólną kompresję jak bzip2, jest to znacznie szybsze, a jeśli chcesz zapłacić trochę więcej czasu procesora, możesz prawie osiągnąć wyniki podobne do LZMA (chociaż wtedy będzie wolniejsze niż bzip2). Przy nieco gorszych współczynnikach kompresji jest znacznie szybszy niż bzip2 lub jakakolwiek inna alternatywa głównego nurtu.
Teraz kompresujesz zrzut SQL, który jest tak żenująco trywialny, jak to tylko możliwe. Nawet najbiedniejsze kompresory osiągają dobre wyniki na tego rodzaju danych.
Możesz więc działać
zstd
z niższym poziomem kompresji, który będzie działał dziesiątki razy szybciej i nadal osiąga 95-99% tej samej kompresji dla tych danych.Jako bonus, jeśli będziesz to robił często i chcesz zainwestować trochę więcej czasu, możesz „trenować”
zstd
sprężarkę przed czasem, co zwiększa zarówno współczynnik sprężania, jak i prędkość. Pamiętaj, że aby trening działał dobrze, musisz podać mu indywidualne rekordy, a nie całość. Sposób działania narzędzia wymaga treningu wielu małych i nieco podobnych próbek, a nie jednej dużej kropli.źródło
Wygląda na to, że dostosowanie (obniżenie) rozmiaru bloku może mieć znaczący wpływ na czas kompresji.
Oto niektóre wyniki eksperymentu przeprowadzonego na mojej maszynie. Użyłem
time
polecenia do pomiaru czasu wykonania.input.txt
to plik tekstowy o wielkości ~ 250 MB zawierający dowolne rekordy JSON.Używanie domyślnego (największego) rozmiaru bloku (
--best
jedynie wybiera domyślne zachowanie):Używając najmniejszego rozmiaru bloku (
--fast
argument):Było to nieco zaskakujące odkrycie, biorąc pod uwagę, że dokumentacja mówi:
źródło