高性能MySQL第二章笔记



MySQL基准测试
(因为我用的是windows系统。其中内容都是Linux下运行。没有进行测试,只是大概了解)

2.1为什么需要基准测试

基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些是重要的变化。
有很多因素会影响基准测试,不如数据量、数据和查询的分布。
我们只能进行大概的测试,来确定系统大致的余量有多少。

2.2基准测试的策略

基准测试有两种主要的策略:针对整个系统的整体测试和单独测试。
针对整个系统做集成式测试的原因:用户关注的不仅仅是MySQL本身的性能,而是应用整体的性能;MySQL并非总是应用的瓶颈;只有对应用做整体测试,才能发现各部分之间的缓存带来的影响;整体应用的集成式测试更能揭示应用的真实表现。
应用的整体测试很难建立,甚至很难正确设置。如果基准测试的设计有问题,那么结果就无法反应真实的情况,从而基于此做的决策也就可能是错误的。
需要关注MySQL的性能,可以选择只测试MySQL:需要比较不同的schema或查询的性能;针对应用中某个具体问题的测试;通过一个短期的基准测试,做快速的“周期循环”,来检测出某些调整后的效果。

不同的方法测试不同的指标。
吞吐量:指的是单位时间内的事务处理数。这类基准测试主要针对在线事务处理的吞吐量,非常适用于多用户的交互式应用。常用的测试单位是每秒事务数,有些也采用每分钟事务数。
响应时间或者延迟:用于测试任务所需的整体时间。可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。
并发性:它经常被表示成多少用户在同一时间浏览一个Web站点,经常使用的指标是有多少个会话,但Web服务器的并发性更准确的度量指标应该是在任意时间有多少同时发生的并发请求。并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接数。当并发性增加时,需要测量吞吐量是否下降,响应时间是否变长,如果是,应用可能就无法处理峰值压力。并发性测试通常不是为了测试应用能达到的并发度,而是为了测试应用在不同并发下的性能。
可扩展性:简单的说,可扩展性指的是,给系统加一倍的工作,在理想情况下就能获得两倍的结果。或者给系统增加一倍的资源,就可以获得两倍的吞吐量。性能也不许在可以接收的范围内。

2.3基准测试的方法

基准测试时应该避免的错误:①使用真实数据的子集而不是全集②使用错误的数据分布③使用不真实的分布参数④在多用户场景中,只做单用户的测试⑤在单服务器上测试分布式应用⑥与真实用户行为不匹配⑦反复执行同一个查询⑧没有检查错误⑨忽略眊系统预热的过程⑩使用默认的服务器配置⑪测试时间太短。

规划基准测试的第一步是提出问题并明确目标。然后决定是采用标准的基准测试,还是设计专用的测试。
如果采用标准的基准测试,应该确认选择了合适的测试方案。
设计专用基准测试是很复杂的,往往需要一个迭代的过程。首先需要获得生产数据集的快照,并且该快照很容易还原,以便进行后续的测试。
然后准对数据运行查询。可以在不同级别记录查询。
详细地写下测试规划也是必需的。
应该建立将参数和结果文档化的规范,每一轮测试都必需进行详细记录。经常要写一些脚本来分析结果,因此如果能够不用打开电子表格或者文本文件等额外操作更好。

基准测试应该运行足够长的时间。有时候无法确认测试需要运行多长时间才足够,可以让测试一直运行,持续观察知道确认系统已经稳定。
一个简单的测试规则,就是等系统看起来稳定的时间至少等于系统预热的时间。
一个常见的错误的测试方式是,只执行一系列短期的测试。

在执行基准测试时,需要尽可能多地收集被测试系统的信息。最好为基准测试建立一个目录,并且每执行一轮测试都创建单独的子目录,将测试结果、配置文件、测试指标、脚本和其他相关说明都保存在其中。

获得准确测试结果的最好办法,是回答一些关于基准测试的基本问题:是否选择了正确的基准测试?是否为问题收集了相关的数据?是否采用了错误的测试标准?
接着,确认测试结果是否可重复。
如果测试的过程会修改数据或者schema,那么每次测试钱,需要利用快照还原数据。
要注意很多因素,包括外部的压力、性能分析和监控系统、详细的日志、周期性作业,以及其他一些因素,都会影响到测试结果。
每次测试中,修改的参数应该尽量少。
一般情况下,都是通过迭代逐步地修改基准测试的参数,而不是每次运行时都做大量的修改。
很多基准测试都是用来做预测系统迁移后的性能,通常需要重新设计MySQL的schema和查询。
基于MySQL的默认配置的测试没有什么意义,因为默认配置是基于消耗很少内存的极小应用的。
最后,如果测试中出现异常结果,不要轻易当做坏数据点而丢弃。测试可能会得到有价值的结果,或者一个严重的错误,抑或基准测试的设计缺陷。

自动化基准测试,要尽可能地使所有测试过程都自动化,包括装载数据、系统预热、执行测试、记录结果等。
基准测试通常需要运行多次,获得测试结果后还需要对结果进行分析。
如何从数据中抽象出有意义的结果,依赖与如何收集数据。通常需要写一些脚本来分析数据,能减轻分析的工作量,可以重复运行,并易于文档化。

绘图很重要,最简单有效的图形,就是将性能指标按照时间顺序绘制。通过图形可以立刻发现一些问题。
在执行基准测试的时候要尽可能地收集更多的细节数据,然后将数据绘制成图形,这样可以帮助快速地发现问题。

2.4基准测试工具

有些工具是针对整个应用进行测试,也有写工具是针对MySQL或者其他组件单独进行测试的。

集成式测试工具:ab、http_load、JMeter

有一些有用的工具可以测试MySQL和基于MySQL的系统性能。
单组件式测试工具:mysqlslap、MySQL BenchmarkSuite(sql-bench)、SuperSmack、Database Test Suite、Percona's TPCC-MySQL Tool、sysbench
MySQL有一个内置的BENCHMARK()函数,可以测试某些特定操作的执行速度。参数可以是需要执行的次数和表达式。
例:
SET @input := 'hello world';
SELECT BENCHMARK(1000000, MD5(@input));

2.5基准测试案例(略)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值