| 表数量 | 单表数据 | 并发线程数 | 压测时间 | 数据库机器 | 数据库架构 |
|---|---|---|---|---|---|
| 10 | 500万 | 64 | 300秒 | 16核64G | MGR架构,3台机器,单主 |
上面的数据来源于
sysbench--生产--01--mysql压测--压测的影响因素

mycat性能损耗在20%到25%之间

通过上面的图,我们将发表阈值定义在800W
vi /root/test/initDb.sh
内容
#!/bin/bash
# 压测时间
time=600
# 压测线程
threadnum=64
# mysql host
host=111.111.111.111
# mysql port
port=3307
# mysql user
user=root
# mysql password
password=1234
#数据库名称
db_name=test
# savePath
savePath=/root/test
# model
model=oltp_read_write
# table_num
table_num=1
# report-interval
report_interval=5
# report-tableSize
tableSize=18000000
message="";
message=$message"------------------------"$tableSize"数据测试------------------------\n";
message=$message"time="$time"\n";
message=$message"threadnum="$threadnum"\n";
message=$message"host="$host"\n";
message=$message"port="$port"\n";
message=$message"user="$user"\n";
message=$message"password="$password"\n";
message=$message"table_num="$table_num"\n";
message=$message"report_interval="$report_interval"\n";
# 综合读写测试
echo -e $message > $savePath/oltp_read_write"_"$tableSize.log
# 测试前要清除构建的测试数据
sysbench oltp_read_write --db-driver=mysql --time=$time --threads=10 --report-interval=$report_interval --mysql-host=$host --mysql-port=$port --mysql-user=$user --mysql-password=$password --mysql-db=$db_name --tables=$table_num --table_size=$tableSize --db-ps-mode=disable cleanup >> $savePath/oltp_read_write"_"$tableSize.log
# 准备数据
sysbench oltp_read_write --db-driver=mysql --time=$time --threads=$threadnum --report-interval=$report_interval --mysql-host=$host --mysql-port=$port --mysql-user=$user --mysql-password=$password --mysql-db=$db_name --tables=$table_num --table_size=$tableSize --db-ps-mode=disable prepare >> $savePath/oltp_read_write"_"$tableSize.log
chmod +x /root/test/initDb.sh
/root/test/initDb.sh &
将数据id 1到800W切割为一份sql,sql_1-800W
将数据id 800W到1000W切割为一份sql,sql_800W-1000W
将数据id 1000W到1600W切割为一份sql,sql_1000W-1600W
将数据id 1600W到1800W切割为一份sql,sql_1600W-1800W
vi /root/test/sql_read_write.sh
内容
#!/bin/bash
# ------mysql 读写测试----------
tableSize=$1
# 压测时间
time=600
# 压测线程
threadnum=64
# mysql user
user=root
# mysql password
password=1234
#数据库名称
db_name=test
# savePath
savePath=/root/test
# model
model=oltp_read_write
# table_num
table_num=1
# report-interval
report_interval=5
# mysql host
host=111.111.111.111
# mysql port
port=3307
# 综合读写测试
sysbench oltp_read_write --forced-shutdown=3 --mysql-ignore-errors=1003,1203,1213,1003,1205,6002,6004,4012,2013,4016 --db-driver=mysql --time=$time --threads=$threadnum --report-interval=$report_interval --mysql-host=$host --mysql-port=$port --mysql-user=$user --mysql-password=$password --mysql-db=$db_name --tables=$table_num --table_size=$tableSize --db-ps-mode=disable run >> $savePath/mycat_oltp_read_write"_"$tableSize.log
chmod +x /root/test/mycat_read_write.sh
/root/test/sql_read_write.sh 8000000 &
/root/test/sql_read_write.sh 10000000 &
/root/test/sql_read_write.sh 16000000 &
/root/test/sql_read_write.sh 18000000 &

分库分表,已800W作为临界点
当表数据在500W的时候,mycat性能损耗23.38%
当表数据在800W的时候,mycat性能损耗26.05%
当表数据在1000W的时候,mycat性能提高2.49%
当表数据在1600W的时候,mycat性能提高39.82%
当表数据在1800W的时候,mycat性能提高73.91%