2014年5月19日月曜日

Percona XtraBackupの圧縮メモ

innobackupexのオプションごとにどれくらいかメモ。
主にファイルサイズと処理時間を比べたいだけなので、MySQLは起動しておれどトラフィックはなし。tpcc-mysqlのWH= 100をロードしただけ。


$ du -sh /data/mysql
14G     /data/mysql

データファイル意外と小さかった。。RESET MASTERしたのでバイナリーログは当然含まず。


tarボールストリーム圧縮なし

$ time innobackupex /data/mysql --stream=tar | ssh mysql@backup-server "cat - > /data/tmp/xtrabackup.tar"
..
real    4m53.213s
user    4m13.456s
sys     0m37.721s

$ ls -lh xtrabackup*
-rw-rw-r--  1 mysql mysql 8.5G May 19 16:35 xtrabackup.tar

$ mkdir xtrabackup

$ time tar ixf xtrabackup.tar -C xtrabackup

real    0m16.243s
user    0m0.163s
sys     0m16.073s

$ time innobackupex --apply-log xtrabackup
..
real    0m45.953s
user    0m0.297s
sys     0m5.908s


tarボールgzip圧縮

$ time innobackupex /data/mysql --stream=tar | gzip -c | ssh mysql@backup-server "cat - > /data/tmp/xtrabackup.tar.gz"
..
real    13m2.701s
user    15m19.741s
sys     0m28.345s

$ ls -lh xtrabackup*
-rw-rw-r-- 1 mysql mysql 4.8G May 19 16:58 xtrabackup.tar.gz

$ mkdir xtrabackup

$ time tar ixf xtrabackup.tar.gz -C xtrabackup

real    1m37.648s
user    1m31.823s
sys     0m21.962s

$ time innobackupex --apply-log xtrabackup
..
real    0m44.944s
user    0m0.277s
sys     0m6.055s


tarボールpbzip2圧縮(8並列)

$ time innobackupex /data/mysql --stream=tar | pbzip2 -p8 -c | ssh backup-server "cat - > /data/tmp/xtrabackup.tar.bz2"
..
real    3m11.137s
user    27m21.804s
sys     0m30.629s

$ ls -lh xtrabackup*
-rw-rw-r-- 1 mysql mysql 4.3G May 19 17:09 xtrabackup.tar.bz2

$ mkdir xtrabackup

$ time pbzip2 -p8 -dc xtrabackup.tar.bz2 | tar ix -C xtrabackup
tar: Read 2560 bytes from -

real    1m24.567s
user    11m18.711s
sys     0m30.188s

$ time innobackupex --apply-log xtrabackup
..
real    0m43.918s
user    0m0.291s
sys     0m6.073s


xbstream圧縮なし(1並列)

$ time innobackupex /data/mysql --stream=xbstream | ssh backup-server "cat - > /data/tmp/xtrabackup.xb"
..
real    5m17.412s
user    4m36.084s
sys     0m38.236s

$ ll -h xtrabackup.*
-rw-rw-r-- 1 mysql mysql 8.5G May 19 17:54 xtrabackup.xb

$ mkdir xtrabackup

$ time xbstream -x -C xtrabackup < xtrabackup.xb

real    1m32.016s
user    0m18.126s
sys     0m27.725s

$ time innobackupex --apply-log xtrabackup
..
real    0m47.103s
user    0m0.297s
sys     0m6.376s
xbstream圧縮あり(1並列)
$ time innobackupex /data/mysql --stream=xbstream --compress | ssh backup-server "cat - > /data/tmp/xtrabackup.xb"
..
real    5m44.481s
user    4m59.169s
sys     0m29.153s

$ ll -h xtrabackup.*
-rw-rw-r-- 1 mysql mysql 6.7G May 19 18:13 xtrabackup.xb

$ mkdir xtrabackup

$ time xbstream -x -C xtrabackup < xtrabackup.xb

real    1m11.434s
user    0m14.041s
sys     0m21.624s

$ time innobackupex --decompress xtrabackup/
..
real    1m54.178s
user    1m31.540s
sys     0m24.585s

$ time innobackupex --apply-log xtrabackup
..
real    0m45.782s
user    0m0.263s
sys     0m5.995s
xbstream圧縮あり(8並列)
$ time innobackupex /data/mysql --stream=xbstream --compress --compress-thread=8 --parallel=8 | ssh backup-server "cat - > /data/tmp/xtrabackup.xb"
..
real    3m40.315s
user    5m0.383s
sys     0m26.421s

$ ll -h xtrabackup.*

$ time xbstream -x -C xtrabackup < xtrabackup.xb
real    1m12.859s
user    0m13.734s
sys     0m20.157s

$ time innobackupex --decompress --parallel=8 xtrabackup/
..
real    2m16.178s
user    1m30.866s
sys     0m24.585s

$ time innobackupex --apply-log xtrabackup
..
real    0m45.722s
user    0m0.289s
sys     0m5.997s
decompress、多重化したらむしろ遅くなっててしょぼん。 tarボール無圧縮、--compact
$ time innobackupex /data/mysql --stream=tar --compact | ssh mysql@backup-server "cat - > /data/tmp/xtrabackup.tar"
..
real    4m50.256s
user    4m5.120s
sys     0m38.300s

$ ll -h xtrabackup.*
-rw-rw-r-- 1 mysql mysql 8.5G May 19 18:53 xtrabackup.tar

$ time tar ixf xtrabackup.tar -C xtrabackup

real    0m14.358s
user    0m0.209s
sys     0m13.879s

$ time innobackupex --apply-log xtrabackup
..
real    3m54.054s
user    0m24.002s
sys     0m41.084s
--stream=tarでは--parallelが効かないので、ごりごりやって良いなら--stream=xbstreamでいきたいところ。 容量面でcompactが全然効いた気配がないのに、--apply-logではちゃんとExpandingになって時間がかかってなんだかなぁ。 --rebuild-threads=8とかすれば多少速くなるのかも知れないけどそこまで試すアレなし。 ところでこの--compact(セカンダリーインデックスのそぎ落とし)が効かないのって、 tpcc_loadかましたあとにALTER TABLEでインデックスつけてるのがいけないような気がしてきた。
mysql> SHOW CREATE TABLE stock\G
*************************** 1. row ***************************
       Table: stock
Create Table: CREATE TABLE `stock` (
  `s_i_id` int(11) NOT NULL,
  `s_w_id` smallint(6) NOT NULL,
  `s_quantity` smallint(6) DEFAULT NULL,
  `s_dist_01` char(24) DEFAULT NULL,
  `s_dist_02` char(24) DEFAULT NULL,
  `s_dist_03` char(24) DEFAULT NULL,
  `s_dist_04` char(24) DEFAULT NULL,
  `s_dist_05` char(24) DEFAULT NULL,
  `s_dist_06` char(24) DEFAULT NULL,
  `s_dist_07` char(24) DEFAULT NULL,
  `s_dist_08` char(24) DEFAULT NULL,
  `s_dist_09` char(24) DEFAULT NULL,
  `s_dist_10` char(24) DEFAULT NULL,
  `s_ytd` decimal(8,0) DEFAULT NULL,
  `s_order_cnt` smallint(6) DEFAULT NULL,
  `s_remote_cnt` smallint(6) DEFAULT NULL,
  `s_data` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`s_w_id`,`s_i_id`),
  KEY `fkey_stock_2` (`s_i_id`),
  CONSTRAINT `fkey_stock_1` FOREIGN KEY (`s_w_id`) REFERENCES `warehouse` (`w_id`),
  CONSTRAINT `fkey_stock_2` FOREIGN KEY (`s_i_id`) REFERENCES `item` (`i_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> SHOW TABLE STATUS LIKE 'stock'\G
*************************** 1. row ***************************
           Name: stock
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 9793316
 Avg_row_length: 354
    Data_length: 3469737984
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2014-05-19 15:51:37
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

$ mysql-5.7.4-m14-linux-glibc2.5-x86_64/bin/innochecksum -S /data/tmp/mysql/tpcc/stock.ibd
File::/data/tmp/mysql/tpcc/stock.ibd
================PAGE TYPE SUMMARY==============
#PAGE_COUNT     PAGE_TYPE
===============================================
  224349        Index page
       0        Undo log page
       1        Inode page
       0        Insert buffer free list page
    1158        Freshly allocated page
      14        Insert buffer bitmap
       0        System page
       0        Transaction system page
       1        File Space Header
      13        Extent descriptor page
       0        BLOB page
       0        Compressed BLOB page
       0        Other type of page
===============================================
Additional information:
Undo page type: 0 insert, 0 update, 0 other
Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other

なぜかindex_lengthに計上されない謎。このあたりなのかなぁ?
【2014/05/20 15:59】 計上されないのはたぶん関係ない ⇒ 日々の覚書: InnoDBオンラインALTER TABLEではIndex_lengthが更新されない

5.7.4のinnochecksumでも、セカンダリーインデックスなのかクラスターインデックス(=データページ)なのかは分けられないのかー。

取り敢えずマシンパワーがあるのあらxbstream+ pbzip2, ほそぼそやるならxbstream+ compressでいいかな。

0 件のコメント :

コメントを投稿