阅读《高性能mysql第三版》笔记(二)
前言:全文笔记都是阅读书籍记录的,请各位大佬多多指教,有不对的地方指点一番。谢谢!
(1)基准测试
基准测试(benchmark)是MySQL新手和专家都需要掌握的一项基本技能。验证基于系统的一些假设,确认是否符合实际情况。重现系统中的某一些异常行为,已解决这些异常。
(2)基准测试的策略
2.1 基准测试有两种主要策略:
(1)针对整个系统的整体测试;(集成式)
(2)单独测试MySQL;(单组件式)
2.2 针对整个系统做集成式测试,有一下原因:
- 用户关注的不仅仅是MySQL的性能,而是整个应用,应该测试整个应用系统;
- MySQL并非总是应用瓶颈,通过整体测试可以揭示;
- 只有对应用做整体测试,才能发现各部分之间的缓存带来的影响;
- 整体应用的集成式测试更能揭示应用的真实表现,而单独组件的测试很难做到这一点。
2.3 基准测试方法
测试结果无用或者不准确:
其中使用默认的服务器配置,有吸引力还有测试时间太短;
2.4 基准测试工具
-
集成式测试工具:
(1)ab:是一个Apache HTTP服务器基准测试工具;
(2)http_load:可以随机选择测试多个URL,比ab更灵活;
(3)JMeter:JMeter是一个应用程序,可以加载其他应用并测试其性能。效果较好。 -
单组件式测试工具:
(1)mysqlslap:可以模拟服务器的负载,并输出即时信息。它包含在MySQL 5.1的发行包。可以测试并发连接数。
(2)MySQL Benchmark Suit(sql-bench):在MySQL的发行包中也提供了一款自己的基准测试套件,可以用于不同数据库服务器进行比较测试。好处:包含大量预定义的测试。
(3)Super Smack,是一款用于MySQL和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。
(4)Database Test Suite:是开源软件开发实验室涉及到。
(5)Percona’s TPCC-MySQL Tool,作者开源的,源码地址:https://launchpad.net/perconatools下载
(6)sysbench:是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。可以测试I/O,操作系统调度器,内存分配,传输速度。sysbench的github学习地址
benchmark()函数内置测试如图:
benchmark函数测试发现:小数据量查询不大,但是大数据是差距就明显;书本上解释为:小数据量是,缓存命中几率;
2.5 测试例子
(1)http_load
创建 urls.txt文件,在里面输入URL,敲命令 : http_load -parallel 1 -seconds 10 urls.txt
(2)MySQL基准测试套件
①sql-bench:在MySQL安装目录的sql-bench子目录有工具,默认路径是/usr/share/mysql/sql-bench
(3)sysbench测试
①CPU基准测试:查看cpu型号,cat /proc/cpuinfo
;使用sysbench --test=cpu --cpu-max-prime=20000 run
计算出素数的时间,比较计算时间长短。
②I/O基准测试:先准备测试文件sysbench --test=fileio --file-total-size=150G prepare
,测试文件的大小必须要大于内存的大小,防止操作系统缓存大部分的数据,导致测试结果无法体现IO密集型的工作负载。然后运行针对不同IO类型进行测试:seqwr
顺序写入。seqrewr
顺序重写。seqrd
顺序读取。rndrd
随机读取。rndwr
随机写入。rdnrw
混合随机读/写。下图例子运行"随机读/写":
最后清除测试数据,sysbench --test=fileio--file-total-size=150G cleanup
③OLPT基准测试:OLPT模拟一个简单事务的负载。先生成一张一百万的表,sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test/ --mysql-user=root prepare
。然后测试,sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root/ --max-time=60 --oltp-read-only=on --max-requests=0 --nun-threads=8 run
, 开启8个并发线程,只读模式,测试时长60秒。关注下面这些指标:* 总的事务数 * 每秒事务数。 * 时间统计信息(最小、平均、最大响应时间,以及95%百分比响应时间)。 * 线程公平性统计信息(thread-fairness),用于表示模拟负载的公平性。
2.6 学习sysbench测试
sysbench对CPU的测试
参考文章:[https://www.jianshu.com/p/d0abdc29cd7a](https://www.jianshu.com/p/d0abdc29cd7a)