mysql-cluster系列:
- mysql-cluster(1)——简介
- mysql-cluster(2)——部署
- mysql-cluster(3)——集群管理和维护
- mysql-cluster(4)——创建内存表和磁盘表
- mysql-cluster(5)——jdbc
- mysql-cluster(6)——配置详解
- mysql-cluster(7)——基准测试
- mysql-cluster(8)——最佳实践
- mysql-cluster(9)——NDB和InnoDB区别
- mysql-cluster(10)——注意事项
本文目录:
1 mysql-cluster部署和配置
见附录。
2 测试
准备库:
mysql -u root
create database sbtest;
2.1 只读
sysbench --test=/opt/mysql/sysbench/share/tests/db/oltp.lua \
--mysql-host=10.5.11.87 --mysql-port=3306 --mysql-user=root \
--mysql-db=sbtest1 --oltp-tables-count=10 --oltp-table-size=100000 \
--mysql-table-engine=ndbcluster
--report-interval=10 --oltp-dist-type=uniform --rand-init=on --max-requests=0 \
--oltp-test-mode=nontrx --oltp-nontrx-mode=select \
--oltp-read-only=on --oltp-skip-trx=on \
--max-time=120 --num-threads=12 \
[prepare|run|cleanup]
注意最后一行,一项测试开始前需要用prepare来准备好表和数据,run执行真正的压测,cleanup用来清除数据和表。实际prepare的表结构:
mysql> desc sbtest1.sbtest1;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| k | int(10) unsigned | NO | MUL | 0 | |
| c | char(120) | NO | | | |
| pad | char(60) | NO | | | |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
上面的测试命令代表的是:对mysql进行oltp基准测试,表数量10,每表行数约50w(几乎delete多少就会insert的多少),并且是非事务的只读测试,持续120s,并发线程数12。
需要说明的选项:
- –mysql-db=sbtest1:测试使用的目标数据库,这个库名要事先创建
- –oltp-tables-count=10:产生表的数量
- –oltp-table-size=500000:每个表产生的记录行数
- –oltp-dist-type=uniform:指定随机取样类型,可选值有 uniform(均匀分布), Gaussian(高斯分布), special(空间分布)。默认是special
- –oltp-read-only=off:表示不止产生只读SQL,也就是使用oltp.lua时会采用读写混合模式。默认 off,如果设置为on,则不会产生update,delete,insert的sql。
- –oltp-test-mode=nontrx :执行模式,这里是非事务式的。可选值有simple,complex,nontrx。默认是complex
- simple:简单查询,SELECT c FROM sbtest WHERE id=N
- complex (advanced transactional):事务模式在开始和结束事务之前加上begin和commit, 一个事务里可以有多个语句,如点查询、范围查询、排序查询、更新、删除、插入等,并且为了不破坏测试表的数据,该模式下一条记录删除后会在同一个事务里添加一条相同的记录。
- nontrx (non-transactional):与simple相似,但是可以进行update/insert等操作,所以如果做连续的对比压测,你可能需要重新cleanup,prepare。
- –oltp-skip-trx=[on|off]:省略begin/commit语句。默认是off
- –rand-init=on:是否随机初始化数据,如果不随机化那么初始好的数据每行内容除了主键不同外其他完全相同
- –num-threads=12: 并发线程数,可以理解为模拟的客户端并发连接数
- –report-interval=10:表示每10s输出一次测试进度报告
- –max-requests=0:压力测试产生请求的总数,如果以下面的max-time来记,这个值设为0
- –max-time=120:压力测试的持续时间,这里是2分钟。
注意,针对不同的选项取值就会有不同的子选项。比如oltp-dist-type=special,就有比如oltp-dist-pct=1、oltp-dist-res=50两个子选项,代表有50%的查询落在1%的行(即热点数据)上,另外50%均匀的(sample uniformly)落在另外99%的记录行上。
以上代表的是一个只读的例子,可以把num-threads依次递增(16,36,72,128,256,512),或者调整my.cnf参数,比较效果。另外需要注意的是,大部分mysql中间件对事务的处理,默认都是把sql发到主库执行,所以只读测试需要加上oltp-skip-trx=on来跳过测试中的显式事务。
ps1: 只读测试也可以使用share/tests/db/select.lua进行,但只是简单的point select。
ps2: 我在用sysbench压的时候,在mysql后端会话里有时看到大量的query cache lock,如果使用的是uniform取样,最好把查询缓存关掉。当然如果是做两组性能对比压测,因为都受这个因素影响,关心也不大。
结果:
[ 10s] threads: 12, tps: 0.00, reads: 3444

最低0.47元/天 解锁文章
3526

被折叠的 条评论
为什么被折叠?



