bzip2 troppo lento. Multicore o alternative

Sto eseguendo questo command:

pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2 

Ci vuole troppo tempo. Guardo i processi con il top . Il process bzip2 richiede circa il 95% e postgres 5% di un core. La voce wa è bassa. Ciò significa che il disco non è il collo di bottiglia.

Cosa posso fare per aumentare le performance?

Forse bzip2 utilizzare più core. I server hanno 16 core.

O utilizzare un'alternativa a bzip2?

Cosa posso fare per aumentare le performance?

  • Aggiornando Postgres.app da 9.1 a 9.2, i valori di lc_collate non corrispondono all'errore
  • Autorizzazioni utente PostgreSQL
  • Tuning Postgresql su un VDS di Linode da 16GB
  • Collegarsi a RDS dall'istanza EC2 - sia all'interno di VPC
  • Come convertire un database postgres a sqlite
  • Configurazione del file pg_hba.conf per consentire l'accesso da altri server al database
  • Postgres - non è in grado di creare prese TCP / IP
  • Automatizza pg_dump in uno script bash
  • 4 Solutions collect form web for “bzip2 troppo lento. Multicore o alternative”

    Ci sono molti algoritmi di compressione in giro, e bzip2 è uno dei più lenti. Il gzip normale tende ad essere significativamente più veloce, in genere non molto peggiore di compressione. Quando la velocità è la più importnte, lzop è il mio preferito. Povera compressione, ma oh così veloce.

    Ho deciso di divertirmi e confrontare alcuni algoritmi, tra cui le loro implementazioni parallele. Il file di input è l'output del command pg_dumpall sulla mia workstation, un file SQL di 1913 MB. L'hardware è un vecchio quad-core i5. I tempi sono i tempi di panetworking della compressione. Le implementazioni parallele sono impostate per utilizzare tutti i 4 core. Tabella ordinata per velocità di compressione.

     Algorithm Compressed size Compression Decompression lzop 398MB 20.8% 4.2s 455.6MB/s 3.1s 617.3MB/s lz4 416MB 21.7% 4.5s 424.2MB/s 1.6s 1181.3MB/s brotli (q0) 307MB 16.1% 7.3s 262.1MB/s 4.9s 390.5MB/s brotli (q1) 234MB 12.2% 8.7s 220.0MB/s 4.9s 390.5MB/s zstd 266MB 13.9% 11.9s 161.1MB/s 3.5s 539.5MB/s pigz (x4) 232MB 12.1% 13.1s 146.1MB/s 4.2s 455.6MB/s gzip 232MB 12.1% 39.1s 48.9MB/s 9.2s 208.0MB/s lbzip2 (x4) 188MB 9.9% 42.0s 45.6MB/s 13.2s 144.9MB/s pbzip2 (x4) 189MB 9.9% 117.5s 16.3MB/s 20.1s 95.2MB/s bzip2 189MB 9.9% 273.4s 7.0MB/s 42.8s 44.7MB/s pixz (x4) 132MB 6.9% 456.3s 4.2MB/s 7.9s 242.2MB/s xz 132MB 6.9% 1027.8s 1.9MB/s 17.3s 110.6MB/s brotli (q11) 141MB 7.4% 4979.2s 0.4MB/s 3.6s 531.6MB/s 

    Se i 16 core del tuo server sono abbastanza inattivi che tutti possono essere utilizzati per la compressione, pbzip2 probabilmente ti darà una velocità molto significativa. Ma hai bisogno di più velocità e tu puoi tollerare i file di 20% più grandi, gzip è probabilmente la tua scommessa migliore.

    Aggiornamento: Ho aggiunto alla tabella i risultati di brotli (vedi risposta di TOOGAMs). brotli impostazione della qualità della compressione della brotli ha un impatto molto grande sul rapporto di compressione e la velocità, quindi ho aggiunto tre impostazioni ( q0 , q1 e q11 ). Il valore predefinito è q11 , ma è estremamente lento e peggio ancora di xz . q1 sembra molto buono, però; lo stesso rapporto di compressione come gzip , ma 4-5 volte più veloce!

    Aggiornamento: Aggiunto lbzip2 (vedi commento di gmathts) e zstd (commento di Johnny) alla tabella, e ordinato per velocità di compressione. lbzip2 mette la famiglia bzip2 in esecuzione compressa tre volte più velocemente di pbzip2 con un grande rapporto di compressione! zstd sembra anche ragionevole ma è battuto da brotli (q1) sia in rapporto sia in velocità e velocità.

    La mia conclusione originale che il semplice gzip è la migliore scommessa sta cominciando a sembrare quasi stupido. Anche se per l'ubiquità, ancora non può essere battuto;)

    Usa pbzip2.

    Il manuale dice:

    pbzip2 è un'applicazione parallela del compressore di file di classificazione di bzip2 che utilizza pthreads e raggiunge accelerazione quasi lineare su macchine SMP. L'output di questa versione è completamente compatibile con bzip2 v1.0.2 o successivo (cioè qualsiasi cosa compressa con pbzip2 può essere decompressa con bzip2).

    Rileva automaticamente il numero di processri che hai e crea i thread in base a ciò.

    • Il brotli di Google è un formato più recente che ha recentemente guadagnato un ampio supporto all'interno dei browser, in quanto presenta una impressionante compressione, una velocità impressionante e forse la combinazione e l'equilibrio più impressionanti di entrambe le funzionalità.

    Alcuni dati:

    Confronto di algoritmi di compressione Brotli, Deflate, Zopfli, LZMA, LZHAM e Bzip2

    • ad esempio, questo grafico riportnte i numbers che mostrano Brotli essere approssimativamente 6-14 più veloce di Bzip2.

    CanIUse.com: feature: brotli mostra il supporto di Microsoft Edge, Mozilla Firefox, Google Chrome, Apple Safari, Opera (ma non Opera Mini o Microsoft Internet Explorer).

    Confronto: Brotli vs deflate vs zopfli vs lzma vs lzham vs bzip2

    • Se stai cercando la velocità di compressione, allora quello che stai cercando è che le linee siano più in giro su questo grafico. (Le voci in cima di questo grafico mostrano un rapporto di compressione stretto, maggiore è più stretto, ma se la velocità di compressione è la tua priorità, vorrai prestare maggiore attenzione a quali linee raggiungeranno più in alto sul grafico.)

    Confronto: rapporto di compressione vs velocità di compressione per i methods 7-Zip ZStandard

  • ZStandard di Facebook è un'altra opzione, cercando di ridurre i bit ma anche di concentrarsi sull'accumulazione dei dati in modo da ridurre le previsioni perse, consentendo così una velocità più veloce. La sua home page è a: Compressione dati più piccola e più veloce con ZStandard
  • La lucertola non è abbastanza alta di compressione come Brotli o ZStandard, ma potrebbe essere un po 'più vicina nel rapporto di compressione e essere piuttosto più veloce (alless in base a questo grafico che è di velocità, anche se questo sta riportndo la decompressione)
  • Non hai menzionato un sistema operativo. Se Windows, 7-Zip con ZStandard (Release) è una versione di 7-Zip che è stata modificata per fornire supporto per l'utilizzo di tutti questi algoritmi.

    Usa zstd . Se è abbastanza buono per Facebook, probabilmente è anche abbastanza buono per te.

    Su una nota più grave, è in realtà piuttosto buona . Lo uso per tutto ora perché funziona semplicemente e ti permette di velocizzare la velocità per il rapporto su larga scala (spesso, la velocità conta più di each dimensione, poiché l'archiviazione è a buon mercato, ma la velocità è un collo di bottiglia).
    A livelli di compressione che ottengono una compressione complessiva comparabile come bzip2, è significativamente più veloce e se si è disposti a pagare qualche extra nel tempo della CPU, è ansible get quasi risultati simili a LZMA (anche se quindi sarà più lento di bzip2). A slim peggiori rapporti di compressione, è molto, molto più veloce di bzip2 o di qualsiasi altra alternativa principale.

    Ora, la tua è la compressione di un dump SQL, che è quasi imbarazzante come banale per comprimere come può essere. Anche i compressori più poveri puntano bene su quel tipo di dati.
    Quindi è ansible eseguire zstd con un livello di compressione inferiore, che eseguirà decine di volte più velocemente e ancora raggiunge il 95-99% della stessa compressione su tali dati.

    Come bonus, se lo farai spesso e vuoi investire un po 'di tempo supplementare, puoi "addestrare" il compressore zstd anticipo, aumentando così il rapporto di compressione e la velocità. Si noti che per la formazione per funzionare bene, è necessario alimentare i singoli record, non l'intera cosa. Il modo in cui funziona lo strumento, si aspetta molti campioni piccoli e un po 'simili per la formazione, non un enorme blob.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.