Hello All,
I have compiled mariadb 10.1.4 from source to have a play with innodb page compression. Not sure if these are bug or misunderstanding on my part, probably a combination of both…
I am running in a CentOS 7 x64 VirtualBox VM 10.1.4-MariaDB-wsrep. The compile support for page compression seems to have worked ok…
SHOW STATUS LIKE ‘innodb_have%’;
My experiments have been with the following example database…
https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2
When this is loaded onto a default install of mariadb (InnoDB Antelope / no compression) The db size is…
du -sh /var/lib/mysql/employees - 385MB
The when I run ALTER TABLE .. ROW_FORMAT=COMPRESSED the db size is…
du -sh /var/lib/mysql/employees - 119MB
Next I performed a series of reloads of this database after changing the compression algorithm. Note the total db size doesn’t change apart from when compression is lzma.
SET GLOBAL innodb_compression_algorithm='zlib';
du -sh /var/lib/mysql/employees - 385MB
SET GLOBAL innodb_compression_algorithm='lz4';
du -sh /var/lib/mysql/employees - 385MB
SET GLOBAL innodb_compression_algorithm='lzo';
du -sh /var/lib/mysql/employees - 385MB
SET GLOBAL innodb_compression_algorithm='lzma';
du -sh /var/lib/mysql/employees - 308MB
SET GLOBAL innodb_compression_algorithm='bzip2';
du -sh /var/lib/mysql/employees - 385MB
SET GLOBAL innodb_compression_algorithm='snappy';
du -sh /var/lib/mysql/employees - 385MB
SET GLOBAL innodb_compression_algorithm='lzma';
SET GLOBAL innodb_compression_level=9;
du -sh /var/lib/mysql/employees - 232M
SET GLOBAL innodb_compression_algorithm='zlib';
SET GLOBAL innodb_compression_level=9;
du -sh /var/lib/mysql/employees - 385MB
Note if you then try to execute..
ALTER TABLE departments ROW_FORMAT=COMPRESSED;
Table storage engine 'InnoDB' does not support the create option 'PAGE_COMPRESSED'
On further reading the
documentation I noted the “Persistent Trim” section. So I tried…
SET GLOBAL innodb_compression_algorithm='zlib';
SET GLOBAL innodb_compression_level=9;
SET GLOBAL innodb_use_trim=ON;
du -sh /var/lib/mysql/employees - 320MB
Note the db size is smaller by 65MB
FYI innodb_page_compression_saved = 0 at this point. Next I tried the following settings..
vi /etc/my.cnf.d/innodb_compression.cnf
innodb_file_format=Barracuda
innodb_file_format_max=Barracuda
innodb_compression_algorithm=zlib
innodb_compression_level=9
innodb_use_trim=1
innodb_use_fallocate=1
du -sh /var/lib/mysql/employees - 232M
SET GLOBAL innodb_compression_algorithm='lz4';
du -sh /var/lib/mysql/employees - 232M
innodb_page_compression_saved = 0 # All other counters for SHOW STATUS LIKE '%compres%' are zero
SET GLOBAL innodb_compression_algorithm='lzma';
du -sh /var/lib/mysql/employees - 232M
SET GLOBAL innodb_compression_algorithm='bzip2';
du -sh /var/lib/mysql/employees - 232M
SET GLOBAL innodb_compression_algorithm='snappy';
du -sh /var/lib/mysql/employees - 232M
innodb_page_compression_saved = 0 # All other counters for SHOW STATUS LIKE '%compres%' are zero
information_schema tables INNODB_CMP, INNODB_CMP_RESET, INNODB_CMPMEM & INNODB_CMP_RESET all zero.
So I guess the questions here would be…
1.
Why when trim is not used is the db size unchanged apart from lzma?
2.
Why is the compressed size the same for all algorithms? Is the correct algorithm being used?
3.
Can I confirm which algorithm has been used for a page. I can’t see anything in information_schema
4.
Status variables / info schema not working?
5.
ALTER TABLE … PAGE_COMPRESSED = 1 doesn’t work. Must I always do a full dump & load to enable page compression?
6.
Lzma/9 compression is not that impressive. Is it meant to rival tokudb? (converting to tokudb results in a db size of ~ 54MB and this includes logs!)
Cheers,
Rhys Campbell
Database Administrator
TradingScreen, Inc.
23 York House, 5th Floor
London WC2B 6UJ
Email:
rhys.campbell@tradingscreen.com
Follow TradingScreen on
Twitter ,
Facebook and our blog
Trading Smarter
This message is intended only for the recipient(s) named above and may contain confidential information. If you
are not an intended recipient, you should not review, distribute or copy this message. Please notify the sender immediately by e-mail if you have received this message in error and delete it from your system.