This blog post will detail the results of Samsung storage in tpcc-mysql benchmark using Percona Server.
I had an opportunity to test different Samsung storage devices under tpcc-mysql benchmark powered by Percona Server 5.7. You can find a summary with details here https://github.com/Percona-Lab-results/201607-tpcc-samsung-storage/blob/master/summary-tpcc-samsung.md
I have in my possession:
I am going to use 1000 warehouses in the tpcc-mysql benchmarks, which corresponds roughly to a data size of 100GB.
This benchmark varies the innodb_buffer_pool_size from 5GB to 115GB. With 5GB buffer pool size only a very small portion of data fits into memory, which results in intensive foreground IO reads and intensive background IO writes. With 115GB almost all data fits into memory, which results in very small (or almost zero) IO reads and moderate background IO writes.
All buffer pool sizes in the middle of the interval correspond to resulting IO reads and writes. For example, we can see the read to write ratio on the chart below (received for the PM1725 device) with different buffer pool sizes:
We can see that for the 5GB buffer pool size we have 56000 read IOPs operations and 32000 write IOPs. For 115GB, the reads are minimal at about 300 IOPS and the background writes are at the 20000 IOPs level. Reads gradually decline with the increasing buffer pool size.
The charts are generated with the Percona Monitoring and Management tools.
Results
Let’s review the results. The first chart shows measurements taken every one second, allowing us to see the trends and stalls.
If we take averages, the results are:
In table form (the results are in new order transactions per minute (NOTPM)):
| bp, GB | pm1725 | sam850 | sam863 | pm1725 / sam863 | pm1725 / sam850 |
|---|---|---|---|---|---|
| 5 | 42427.57 | 1931.54 | 14709.69 | 2.88 | 21.97 |
| 15 | 78991.67 | 2750.85 | 31655.18 | 2.50 | 28.72 |
| 25 | 108077.56 | 5156.72 | 56777.82 | 1.90 | 20.96 |
| 35 | 122582.17 | 8986.15 | 93828.48 | 1.31 | 13.64 |
| 45 | 127828.82 | 12136.51 | 123979.99 | 1.03 | 10.53 |
| 55 | 130724.59 | 19547.81 | 127971.30 | 1.02 | 6.69 |
| 65 | 131901.38 | 27653.94 | 131020.07 | 1.01 | 4.77 |
| 75 | 133184.70 | 38210.94 | 131410.40 | 1.01 | 3.49 |
| 85 | 133058.50 | 39669.90 | 131657.16 | 1.01 | 3.35 |
| 95 | 133553.49 | 39519.18 | 132882.29 | 1.01 | 3.38 |
| 105 | 134021.26 | 39631.03 | 132126.29 | 1.01 | 3.38 |
| 115 | 134037.09 | 39469.34 | 132683.55 | 1.01 | 3.40 |
The Samsung 850 obviously can’t keep with the more advanced SM863 and PM1725. The PM1725 shows a greater benefit with smaller buffer pool sizes. In cases using large amounts of memory, there is practically no difference with SM863. The reason is that with big buffer pool sizes, MySQL does not push IO subsystem much to use all the PM1725 performance.
For the reference, my.cnf file is
|
1 |
[mysqld]<br>datadir=/var/lib/mysql<br>socket=/tmp/mysql.sock<br>ssl=0<br><br>symbolic-links=0<br><br>sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES<br><br># general<br>thread_cache_size=2000<br>table_open_cache = 200000<br>table_open_cache_instances=64<br>back_log=1500<br>query_cache_type=0<br>max_connections=4000<br><br># files<br>innodb_file_per_table<br>innodb_log_file_size=15G<br>innodb_log_files_in_group=2<br>innodb_open_files=4000<br><br>innodb_io_capacity=10000<br>loose-innodb_io_capacity_max=12000<br>innodb_lru_scan_depth=1024<br>innodb_page_cleaners=32<br><br># buffers<br>innodb_buffer_pool_size= 200G<br>innodb_buffer_pool_instances=8<br>innodb_log_buffer_size=64M<br><br># tune<br>innodb_doublewrite= 1<br>innodb_support_xa=0<br>innodb_thread_concurrency=0<br>innodb_flush_log_at_trx_commit= 1<br>innodb_flush_method=O_DIRECT_NO_FSYNC<br>innodb_max_dirty_pages_pct=90<br>join_buffer_size=32K<br>sort_buffer_size=32K<br>innodb_use_native_aio=0<br>innodb_stats_persistent = 1<br><br># perf special<br>innodb_adaptive_flushing = 1<br>innodb_flush_neighbors = 0<br>innodb_read_io_threads = 16<br>innodb_write_io_threads = 8<br>innodb_purge_threads=4<br><br>innodb_adaptive_hash_index=0<br>innodb_change_buffering=none<br><br>loose-innodb-log_checksum-algorithm=crc32<br>loose-innodb-checksum-algorithm=strict_crc32<br>loose-innodb_sched_priority_cleaner=39<br>loose-metadata_locks_hash_instances=256<br><br> |
Resources
RELATED POSTS