J'exécute cette commande:
pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2
Cela prend trop de temps. Je regarde les processus avec top
. Le processus bzip2 prend environ 95% et postgres 5% d'un cœur. L' wa
entrée est faible. Cela signifie que le disque n'est pas le goulot d'étranglement.
Que puis-je faire pour augmenter les performances?
Laissez peut-être bzip2 utiliser plus de cœurs. Les serveurs ont 16 cœurs.
Ou utiliser une alternative à bzip2?
Que puis-je faire pour augmenter les performances?
performance
postgresql
gzip
Guettli
la source
la source
Réponses:
Il existe de nombreux algorithmes de compression et l'
bzip2
un des plus lents. Plaingzip
tend à être significativement plus rapide, à une compression généralement pas bien pire. Quand la vitesse est la plus importante,lzop
c'est ma préférée. Mauvaise compression, mais oh si vite.J'ai décidé de m'amuser et de comparer quelques algorithmes, y compris leurs implémentations parallèles. Le fichier d'entrée est la sortie de la
pg_dumpall
commande sur mon poste de travail, un fichier SQL de 1913 Mo. Le matériel est un ancien i5 quadricœur. Les heures sont des heures d'horloge murale de la compression uniquement. Les implémentations parallèles sont définies pour utiliser les 4 cœurs. Tableau trié par vitesse de compression.Si les 16 cœurs de votre serveur sont suffisamment inactifs pour que tous puissent être utilisés pour la compression,
pbzip2
cela vous donnera probablement une accélération très importante. Mais vous avez encore besoin de plus de vitesse et vous pouvez tolérer ~ 20% de fichiers plus gros,gzip
c'est probablement votre meilleur pari.Mise à jour: j'ai ajouté
brotli
(voir la réponse TOOGAMs) au tableau.brotli
s réglage de la qualité de compression a un impact très important sur le taux de compression et la vitesse, alors j'ai ajouté trois paramètres (q0
,q1
etq11
). La valeur par défaut estq11
, mais elle est extrêmement lente et encore pire quexz
.q1
semble très bien cependant; le même taux de compressiongzip
, mais 4 à 5 fois plus rapide!Mise à jour: ajouté
lbzip2
(voir le commentaire de gmathts) etzstd
(le commentaire de Johnny) au tableau, et trié par vitesse de compression.lbzip2
remet labzip2
famille dans la course en compressant trois fois plus vitepbzip2
qu'avec un excellent taux de compression!zstd
semble également raisonnable mais est battubrotli (q1)
à la fois dans le rapport et la vitesse.Ma conclusion initiale que la plaine
gzip
est le meilleur pari commence à paraître presque idiote. Bien que pour l'ubiquité, il ne peut toujours pas être battu;)la source
pg_dumpall
sortie), donc c'est probablement un peu plus représentatif :)lz4
est légèrement plus rapide et plus efficace quelzop
, soit dit en passant. Il utilise cependant plus de RAM, ce qui est pertinent dans les systèmes embarqués.zstd -T4
également essayer . Pour les paramètres très rapides, vous pouvez essayerzstd -T4 -1
, parzstd
défaut-3
, qui est probablement le paramètre que vous avez testé.Utilisez pbzip2.
Le manuel dit:
Il détecte automatiquement le nombre de processeurs dont vous disposez et crée des threads en conséquence.
la source
pixz
etpigz
sur un tuyau.lbzip2
semble donner une meilleure vitesse, une utilisation de la mémoire et une compression légèrement meilleure quepbzip2
. Il y a des repères ici: vbtechsupport.com/1614lbzip2
air sympa! Je l'ai ajouté à ma réponse :)Certaines données:
Comparaison des algorithmes de compression Brotli, Deflate, Zopfli, LZMA, LZHAM et Bzip2
CanIUse.com: fonctionnalité: brotli affiche la prise en charge par Microsoft Edge, Mozilla Firefox, Google Chrome, Apple Safari, Opera (mais pas Opera Mini ou Microsoft Internet Explorer).
Comparaison: Brotli vs deflate vs zopfli vs lzma vs lzham vs bzip2
-
Si vous recherchez la vitesse de compression, alors ce que vous cherchez, c'est quelles lignes sont plus à droite sur ce graphique. (Les entrées en haut de ce graphique montrent un taux de compression serré. Plus élevé = plus serré. Cependant, si la vitesse de compression est votre priorité, alors vous voudrez faire plus attention aux lignes qui atteignent plus à droite sur le graphique.)
Comparaison: rapport de compression vs vitesse de compression pour les méthodes ZStandard 7-ZipVous n'avez pas mentionné de système d'exploitation. Si Windows, 7-Zip avec ZStandard (versions) est une version de 7-Zip qui a été modifiée pour prendre en charge l'utilisation de tous ces algorithmes.
la source
brotli
, mais je l'ai oublié. Je l'ai ajouté au tableau des repères dans ma réponse! J'étais en fait un peu déçu de ses performances, sauf au niveau de qualité 1, où il offrait le même taux de compression qu'àgzip
une vitesse beaucoup plus élevée.Utilisez zstd . Si c'est assez bon pour Facebook, c'est probablement aussi assez bien pour vous.
Plus sérieusement, c'est en fait assez bon . Je l'utilise pour tout maintenant car cela fonctionne, et il vous permet d'échanger la vitesse pour un rapport à grande échelle (le plus souvent, la vitesse compte plus que la taille de toute façon car le stockage est bon marché, mais la vitesse est un goulot d'étranglement).
À des niveaux de compression qui atteignent une compression globale comparable à celle de bzip2, c'est beaucoup plus rapide, et si vous êtes prêt à payer un peu plus de temps CPU, vous pouvez presque obtenir des résultats similaires à LZMA (bien que ce sera plus lent que bzip2). À des taux de compression légèrement inférieurs, il est beaucoup, beaucoup plus rapide que bzip2 ou toute autre alternative traditionnelle.
Maintenant, vous compressez un vidage SQL, ce qui est à peu près aussi embarrassant que compressé. Même les compresseurs les plus pauvres obtiennent de bons résultats sur ce type de données.
Vous pouvez donc exécuter
zstd
avec un niveau de compression inférieur, qui s'exécutera des dizaines de fois plus rapidement et atteindra toujours 95 à 99% la même compression sur ces données.En prime, si vous le faites souvent et que vous souhaitez investir un peu plus de temps, vous pouvez "entraîner" le
zstd
compresseur à l'avance, ce qui augmente à la fois le taux de compression et la vitesse. Notez que pour que la formation fonctionne bien, vous devrez lui fournir des enregistrements individuels, pas le tout. De la façon dont l'outil fonctionne, il attend de nombreux petits échantillons quelque peu similaires pour la formation, pas un énorme blob.la source
Il semble que l'ajustement (l'abaissement) de la taille du bloc puisse avoir un impact significatif sur le temps de compression.
Voici quelques résultats de l'expérience que j'ai faite sur ma machine. J'ai utilisé la
time
commande pour mesurer le temps d'exécution.input.txt
est un fichier texte de ~ 250 Mo contenant des enregistrements JSON arbitraires.Utilisation de la taille de bloc par défaut (la plus grande) (
--best
sélectionne simplement le comportement par défaut):Utilisation de la plus petite taille de bloc (
--fast
argument):Ce fut une découverte un peu surprenante, étant donné que la documentation dit:
la source