1、双主一从测试环境搭建
主机名 | ip | 角色 | cpu/内存 |
master1 | 172.16.84.150 | 主 | 2c/4G |
master2 | 172.16.84.151 | 主 | 2c/4G |
slave | 172.16.84.152 | 从 | 2c/4G |
双主一从结构按照文档https://blog.csdn.net/du18020126395/article/details/115288524安装(文档是mysql企业版的,换成percona版本即可)
rpm -ivh Percona-Server-shared-compat-57-5.7.31-34.1.el7.x86_64.rpm
rpm -ivh Percona-Server-shared-57-5.7.31-34.1.el7.x86_64.rpm
rpm -ivh Percona-Server-client-57-5.7.31-34.1.el7.x86_64.rpm
rpm -ivh Percona-Server-server-57-5.7.31-34.1.el7.x86_64.rpm
rpm -ivh Percona-Server-rocksdb-57-5.7.31-34.1.el7.x86_64.rpm
rpm -ivh jemalloc-3.6.0-1.el7.x86_64.rpm
rpm -ivh Percona-Server-tokudb-57-5.7.31-34.1.el7.x86_64.rpm
配置双主时,双主分别配置:
change master to master_host='master2',master_port=3306,master_user='rpl_user',master_password='123',MASTER_AUTO_POSITION=1;
change master to master_host='master1',master_port=3306,master_user='rpl_user',master_password='123',MASTER_AUTO_POSITION=1;
从节点配置:
change master to master_host='master2',master_port=3306,master_user='rpl_user',master_password='123',MASTER_AUTO_POSITION=1;
start slave即可
2、启动rocksdb和tokudb引擎(三节点均操作)
安装rocksdb和tokudb引擎
ps-admin --enable-rocksdb -uroot -p123
ps-admin --enable-tokudb -u root -p123
安装tokudb结束后需要重启mysql实例,并在此执行:
ps-admin --enable-tokudb -u root -p123
3、sysbench安装
rpm -ivh ck-0.5.2-2.el7.x86_64.rpm
rpm -ivh luajit-2.0.4-3.el7.x86_64.rpm
rpm -ivh postgresql-libs-9.2.24-1.el7_5.x86_64.rpm
rpm -ivh sysbench-1.0.17-2.el7.x86_64.rpm
sysbench --version
4、造数据
建10个100万和5个1000万的rocksdb、tokudb和innodb作为存储引擎的表
create database sbrocksdb; ---存储10张100万的rocksdb引擎的表
create database sbtokudb; ---存储10张100万的tokudb引擎的表
create database sbinnodb; ---存储10张100万的innodb引擎的表
create database sbrocksdb0; ---存储5张1000万的rocksdb引擎的表
create database sbtokudb0; ---存储5张1000万的tokudb引擎的表
create database sbinnodb0; ---存储5张1000万的innodb引擎的表
/usr/share/sysbench/oltp_common.lua中找到CREATE DATABASE 将storage部分分别改为ENGINE=TokuDB、ROCKSDB和INNODB
ROCKSDB:
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=1000000 --mysql-db=sbrocksdb prepare
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_common.lua --tables=5 --table_size=10000000 --mysql-db=sbrocksdb0 prepare
TokuDB:
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=1000000 --mysql-db=sbtokudb prepare
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_common.lua --tables=5 --table_size=10000000 --mysql-db=sbtokudb0 prepare
INNODB:
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=1000000 --mysql-db=sbinnodb prepare
sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_common.lua --tables=5 --table_size=10000000 --mysql-db=sbinnodb0 prepare
5、Innodb参数优化
innodb_buffer_pool_instances=8
innodb_write_io_threads=4
innodb_read_io_threads=4
innodb_buffer_pool_size=2G
6、Rocksdb参数优化
rocksdb_max_open_files=-1
rocksdb_max_background_jobs=8
rocksdb_max_total_wal_size=4G
rocksdb_block_size=16384
rocksdb_block_cache_size=2G
rocksdb_table_cache_numshardbits=6
rocksdb_bytes_per_sync=16777216
rocksdb_wal_bytes_per_sync=4194304
rocksdb_compaction_sequential_deletes_count_sd=1
rocksdb_compaction_sequential_deletes=199999
rocksdb_compaction_sequential_deletes_window=200000
rocksdb_default_cf_options="write_buffer_size=256m;target_file_size_base=32m;max_bytes_for_level_base=512m;max_write_buffer_number=4;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=20;level0_stop_writes_trigger=30;max_write_buffer_number=4;block_based_table_factory={cache_index_and_filter_blocks=1;filter_policy=bloomfilter:10:false;whole_key_filtering=0};level_compaction_dynamic_level_bytes=true;optimize_filters_for_hits=true;memtable_prefix_bloom_size_ratio=0.05;prefix_extractor=capped:12;compaction_pri=kMinOverlappingRatio;compression=kLZ4Compression;bottommost_compression=kLZ4Compression;compression_opts=-14:4:0"
rocksdb_max_subcompactions=4
rocksdb_compaction_readahead_size=16m
rocksdb_use_direct_reads=ON
rocksdb_use_direct_io_for_flush_and_compaction=ON
7、Tokudb参数优化
tokudb_row_format=tokudb_fast
tokudb_directio=on
tokudb_cache_size=2G
8、读写压测
(1)100万行表压测
100万行的rocksdb引擎跑100s和200s读写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbrocksdb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=1000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbrocksdb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=1000000 run
100万行的tokudb引擎跑100s和200s读写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbtokudb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=1000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbtokudb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=1000000 run
100万行的innodb引擎跑100s和200s读写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbinnodb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=1000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbinnodb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=1000000 run
条件 | engine | tps | qps | 时间(s) | 表行数 | 平均tps | 平均qps |
复制开启,读写测试 | ROCKSDB | 192.97 | 3859.34 | 100 | 1000,000 | 177.225 | 3544.44 |
复制开启,读写测试 | ROCKSDB | 161.48 | 3229.54 | 200 | 1000,000 | ||
复制开启,读写测试 | TokuDB | 189.84 | 3796.82 | 100 | 1000,000 | 160.88 | 3217.63 |
复制开启,读写测试 | TokuDB | 131.92 | 2638.44 | 200 | 1000,000 | ||
复制开启,读写测试 | INNODB | 167.81 | 3356.13 | 100 | 1000,000 | 180.245 | 3604.84 |
复制开启,读写测试 | INNODB | 192.68 | 3853.54 | 200 | 1000,000 |
(2)1000万行表压测
1000万行的rocksdb引擎跑100s和200s读写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbrocksdb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=10000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbrocksdb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=10000000 run
1000万行的tokudb引擎跑100s和200s读写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbtokudb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=10000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbtokudb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=10000000 run
1000万行的innodb引擎跑100s和200s读写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbinnodb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=10000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbinnodb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=10000000 run
条件 | engine | tps | qps | 时间(s) | 表行数 | 平均tps | 平均qps |
复制开启,读写测试 | ROCKSDB | 172.47 | 3449.35 | 100 | 10,000,000 | 173.21 | 3464.18 |
复制开启,读写测试 | ROCKSDB | 173.95 | 3479.00 | 200 | 10,000,000 | ||
复制开启,读写测试 | TokuDB | 150.17 | 3003.34 | 100 | 10,000,000 | 144.61 | 2892.17 |
复制开启,读写测试 | TokuDB | 139.05 | 2780.99 | 200 | 10,000,000 | ||
复制开启,读写测试 | INNODB | 131.86 | 2637.12 | 100 | 10,000,000 | 161.715 | 3234.23 |
复制开启,读写测试 | INNODB | 191.57 | 3831.34 | 200 | 10,000,000 |
9、写压测(相当于load data)
(1)100万行表压测
100万行的rocksdb引擎跑100s和200s写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbrocksdb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=1100000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbrocksdb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=1100000 run
100万行的tokudb引擎跑100s和200s写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbtokudb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=1100000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbtokudb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=1100000 run
100万行的innodb引擎跑100s和200s写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbinnodb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=1100000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbinnodb --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=10 --table_size=1100000 run
条件 | engine | tps | qps | 时间(s) | 表行数 | 平均tps | 平均qps |
复制开启,写测试 | ROCKSDB | 903.51 | 903.51 | 100 | 1000,000 | 818.46 | 818.46 |
复制开启,写测试 | ROCKSDB | 733.41 | 733.41 | 200 | 1000,000 | ||
复制开启,写测试 | TokuDB | 467.27 | 467.27 | 100 | 1000,000 | 631.935 | 631.935 |
复制开启,写测试 | TokuDB | 796.60 | 796.60 | 200 | 1000,000 | ||
复制开启,写测试 | INNODB | 597.11 | 597.11 | 100 | 1000,000 | 702.285 | 702.285 |
复制开启,写测试 | INNODB | 807.46 | 807.46 | 200 | 1000,000 |
(2)1000万行表压测
1000万行的rocksdb引擎跑100s和200s写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbrocksdb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=11000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbrocksdb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=11000000 run
1000万行的tokudb引擎跑100s和200s写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbtokudb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=11000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbtokudb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=11000000 run
1000万行的innodb引擎跑100s和200s写:
sysbench --threads=4 --time=100 --report-interval=10 --mysql-db=sbinnodb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=11000000 run
sysbench --threads=4 --time=200 --report-interval=10 --mysql-db=sbinnodb0 --mysql-host=localhost --mysql-port=3306 --mysql-user=sysbench --mysql-password=123 /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=11000000 run
条件 | engine | tps | qps | 时间(s) | 表行数 | 平均tps | 平均qps |
复制开启,写测试 | ROCKSDB | 431.12 | 431.12 | 100 | 10,000,000 | 499.935 | 499.935 |
复制开启,写测试 | ROCKSDB | 568.75 | 568.75 | 200 | 10,000,000 | ||
复制开启,写测试 | TokuDB | 436.43 | 436.43 | 100 | 10,000,000 | 553.575 | 553.575 |
复制开启,写测试 | TokuDB | 670.72 | 670.72 | 200 | 10,000,000 | ||
复制开启,写测试 | INNODB | 813.51 | 813.51 | 100 | 10,000,000 | 722.71 | 722.71 |
复制开启,写测试 | INNODB | 631.91 | 631.91 | 200 | 10,000,000 |
10、总结
条件 | engine | 平均tps | 平均qps |
复制开启,读写测试 | ROCKSDB | 175.2175 | 3504.31 |
复制开启,读写测试 | TokuDB | 152.745 | 3054.9 |
复制开启,读写测试 | INNODB | 170.98 | 3419.535 |
条件 | engine | 平均tps | 平均qps |
复制开启,写测试 | ROCKSDB | 659.1975 | 659.1975 |
复制开启,写测试 | TokuDB | 592.755 | 592.755 |
复制开启,写测试 | INNODB | 712.4975 | 712.4975 |
读写测试可以看出3个存储引擎,rocksdb平均tps和qps较高
写测试看出3个存储引擎,innodb平均tps和qps较高