xzは5.2からマルチスレッド対応になったと聞き
Ubuntuで簡単に導入できないか検証しました。
調査したところXestyであれば5.2に対応しております。
#インストール(Ubuntu16.04の場合)
sudo vi /etc/apt/sources.list.d/xesty.list
+ deb http://jp.archive.ubuntu.com/ubuntu/ zesty main restricted
+ deb http://security.ubuntu.com/ubuntu zesty-security main restricted
sudo vi /etc/apt/preferences.d/xz
+ Package: *
+ Pin: release n=xenial
+ Pin-priority: 501
+
+ Package: xz-utils liblzma5
+ Pin: release n=zesty
+ Pin-Priority: 502
sudo apt-get update
sudo apt-get install xz-utils
xz --version
#インストール(CentOS6の場合)
cd /tmp
wget http://tukaani.org/xz/xz-5.2.3.tar.bz2
tar xzvf xz-5.2.3.tar.bz2
cd xz-5.2.3
yum groupinstall 'Development tools'
./configure
make
make install
xz --version
#測定
検証機は32コアと8コア、速度が安定するようSSDにしてあります。
検証にはmysqldumpを先頭1Gだけ切り出したものを使用しました。
xz -v --threads=32 ファイル名
という風に使います。
cat 入力ファイル名 | xz --threads=32 > 出力ファイル名
にしても速度は変わりませんでした。
gzipはシングルスレッドなので
pigzにしないと本来は不公平なのかな?
#結果
##32コア
圧縮 | 時間 | サイズ | 速度比 |
---|---|---|---|
xz(5.1.1) | 7:30 | 158,246,724 | 100.0% |
xz(5.2.2) | 7:01 | 158,246,724 | 104.5% |
xz(マルチスレッド) | 0:46 | 158,608,200 | 1434.7% |
gzip | 0:34 | 244,416,462 | 1941.1% |
##8コア(別環境)
圧縮 | 時間 | サイズ | 速度比 |
---|---|---|---|
xz(5.2.3) | 15:47 | 158,246,724 | 100.0% |
xz(マルチスレッド) | 2:33 | 158,608,200 | 620.0% |
gzip | 1:08 | 244,416,458 | 1392.6% |
##32コア
解凍 | 時間 | 速度比 |
---|---|---|
xz(5.2.2) | 0:14 | 100.0% |
xz(マルチスレッド) | 0:14 | 100.0% |
gzip | 0:06 | 233.3% |
##8コア(別環境)
| 解凍 | 時間 | 速度比 |
|:----|-----:|-------:|------:|
| xz(5.2.3) | 0:27 | 100.0% |
| xz(マルチスレッド) | 0:27 | 100.0% |
| gzip | 0:20 | 135.0% |
#まとめ
いかがでしょうか。サイズが若干増えましたが8コアあれば実用速度になったのではないでしょうか。
MySQLのInnoDBなら32コアまでなら確実にスケールするので1個16CPUのMySQLサーバを用意してNUMAを回避
足りなくなってきたら2個目の16CPUを用意とかいかがでしょう。
なお、負荷からすると切り離さないとこの負荷ではユーザの接続が不安定になりますね。
バックアップはまず使わないものなのでxzにするのはいかがでしょうか。