Last week I wrote an article on InnoDB plugin, which explains how to explore all the new features in the plugin along with comparing different row formats.
The article is live now from here:
http://www.innodb.com/wp/wp-content/uploads/2008/05/venu-anuganti-article-april-29-2008.html
Thanks to Ken Jacobs, who took the initiative to post the article on the web site.
Here is a quick comparison of the new InnoDB plugin performance between different compression, row formats that is introduced recently.
The table is a pretty simple one:
CREATE TABLE `sbtest` ( `id` int(10) unsigned NOT NULL, `k` int(10) unsigned NOT NULL DEFAULT ‘0′, `c` char(120) NOT NULL DEFAULT ”, `pad` char(60) NOT NULL DEFAULT ”, PRIMARY KEY (`id`), KEY `k` (`k`) ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
The table is populated with 10M rows with average row length being 224 bytes. The tests are performed for Compact, Dynamic and Compressed (8K and 4K) row formats using MySQL-5.1.24 with InnoDB plugin-1.0.0-5.1 on Dell PE2950 1x Xeon quad core with 16G RAM, RAID-10 with RHEL-4 64-bit.
Here are the four test scenarios:
All the above tests are repeated with innodb_buffer_pool_size=6G and 512M to make sure one fits everything in memory and another one overflows. The rest of the InnoDB settings are all default except that innodb_thread_concurrency=32.
Here is the summary of the test results:
Table Load:
Load time from a dump of SQL script having 10M rows (not batched)
| Compact | Compressed (8K) | Compressed (4K) | Dynamic |
| 28m 18s | 29m 46s | 36m 43s | 27m 55s |
File Sizes:
Here is the size of the .ibd file after each data load
| Compact | Compressed (8K) | Compressed (4K) | Dynamic |
| 2.3G | 1.2G | 592M | 2.3G |
Data and Index Size from Table Status:
Here is the Data and Index size in bytes from SHOW TABLE STATUS and you can see the original data size here rather than the compressed size
| Compact | Compressed (8K) | Compressed (4K) | Dynamic | |
| Data | 2247098368 | 2247098368 | 2249195520 | 2247098368 |
| Index | 137019392 | 137035776 | 160301056 | 137019392 |
Compression Stats:
Here is the compression stats after the table is populated from information_schema.InnoDB_cmp; and you notice that 4K takes more operations and time for both compression and un-compression
| Page_size | Compress_ops | Compress_ops_ok | Compress_time | Uncompress_ops | Uncompress_time | |
| 8K | 8192 | 446198 | 445598 | 73 | 300 | 0 |
| 4K | 4096 | 1091421 | 1012917 | 463 | 38801 | 13 |
Performance:
Here is the performance of various row formats with threads ranging from 1-512 for both 512M and 6G buffer pool size for both concurrent reads and writes.
Observations:
Few key observations from the performance tests that I performed without looking to any of the sources, as I could be wrong, someone can correct me here. Its hard to draw from these input scenarios, but helps to estimate what is what.