- 浏览: 497415 次
- 性别:
- 来自: 大连->北京
文章分类
最新评论
-
春天好:
写的很不错 推荐一个免费好用的云端爬虫开发平台不需要安装环境, ...
web爬虫 -
cpu88:
网络爬虫爬来爬去,网上信息可以瞬间扩散,但是也意味着,没有人愿 ...
web爬虫 -
biaoming:
牛。。学习了。。
MongoDB 关于索引的建议 -
biaoming:
楼主用mongo好早啊。
MongoDB 优化 -
biaoming:
好教程,学习了。。。
MongoDB 优化
基准测试的方法
一般在这之后,我们再来详细的说明怎样设计和执行基准测试。在我们讨论怎样能更好的做基准测试之前,先来看看一些错误,它们能导致不可用或者不准确的结果。
- 使用真实数据的子集,如本来这个应用需要处理几百G的数据,而测试数据仅为1G。再如,你计划这个程序处理的数据增长非常之快,而测试数据还是当前的数据量。
- 使用不正确的分布式数据。当真实的系统有一些所关注的“热点”却均匀分布数据。(随机生成的数据是不真实的分布)
- 使用不真实的分布参数(unrealistically distributed parameters)。假装所有的用户资料都是可见的。
- 对于多用户的应用,使用单用户的场景。
- 在单独的服务器上测试分布式应用。
- 不符合实际的用户行为。比如在网页的“等待时间”(think time)。真正的用户请求一个页面然后再去阅读;没有停顿的情况下,他们不能依次的点击链接。
- 在循环中执行同一语句。真正的语句不是相同的。因此它们忽略了缓存。相同的语句在某些级别被缓存了。
- 没有检查错误。如果基准测试结果没有意义。比如,一个缓慢的操作突然变快了,请检查错误。你做的基准测试可能会快速发现了MySQL的语法错误。基准测试之后查看错误日志,是个比较重要的准则。
- 忽略了系统没有预热(warmed up)下的执行情况。比如在重新启动之后,你要知道在启动之后,服务器需要多久才能达到一定的能力。因此就要看“预热”阶段,系统执行的情况。如果你要研究正常的性能,你需要关心的是,基准测试在服务器重启之后,许多缓存被清空的情况下,在系统预热之前,这基准测试是不能反映出正常的结果的。
- 使用默认的服务器设置。以后会详细讲到。
基准测试的设计和计划
基准测试计划的第一步就是发现问题和目标。接下来 决定是使用标准的基准测试还是自己设计一个。
如果你使用标准的基准测试,要选择一个适合你的需要。一个例子,不用TCP去基准测试电子商务系统。TCP已经说了。它比较适合决策支持系统。这个系统需要查看大量的数据。因此,它并不适合在线交易系统。
设计自己的基准测试是个比较复杂和迭代的过程。开始的时候,要做一个产品数据集的复制。确定在随后进行的测试,数据可以恢复。
接下来,需要针对数据运行大量的语句。你可以在基本的基准测试中创建一个单元测试包。你可以多次运行它,但是可能并不适合你使用数据库的方式。比较好的做法是在一个典型的时间段中如高峰期或一整天,在产品系统中记录所有的语句。如果你记录的语句在一个小时间段中,你可能需要选择很多的时间段。这样才能覆盖系统所有的活动。如语句的周报或者不在高峰时期的批量任务。
可以在不同级别记录日志。一个例子,如果你需要全栈的基准测试,那么就需要web服务器的日志。你也要开启MySQL的日志功能。如果你重新查看一个语句的日志,要重新新建一个独立的线程来执行,而不是仅仅重复执行这个语句。在日志中,为每一个连接创建一个独立的线程也是非常重要的。而不是把各个线程执行的语句弄混。日志应该显示链接哪个连接运行每条语句。
即使你不创建自己的基准测试,你也要应该有自己的基准测试计划。你的基准测试将会运行很多次以及你需要有能力去重新准确的创建它。计划意味着未来。你可能不会是下次运行基准测试那个人,即使你是,你可能也不会准确记住你第一次是怎样运行的。你的计划应该包含测试数据,设置系统的步骤以及预热(刚启动服务器的时候,性能并没有完全发挥的时候)的计划。
设计一些记录参数和结果的方法,并且仔细的记录系统运行情况。你的记录方法可能像电子表格或者记事本或者如复杂点的数据库。(记住,你可能需要写一些脚本区分析一些结果。因此它比那些电子表格和文本文件更容易处理)。
你可能会创建一个基准测试的目录,对于每个结果建立子目录。之后,可能会放置结果,配置文件或者记录每次运行情况。如果你的基准测试测量的数据要多于你所感兴趣的。有一些不需要的数据要好于丢失重要的数据,以及将来你可能会发现这些额外的数据非常有用。在基准测试中要尽量记录更多的信息。如CPU德使用。硬盘的I/O.以及网络流量分析。使用SHOW GLOBAL STATUS去发现一些计数统计等等。
获取精确地结果
最好的获取精确结果的方法就是,你设计的基准测试可以回答你想回答的问题。你选对了正确的基准测试了么?你正在捕获的数据能解答你需要知道的问题?用错误的标准进行基准测试了?你可能知道的是I/O边界基准测试,但是运行CPU边界的基准测试去预测程序的性能了么?
接下来,确定你的基准测试结果是可以重复验证的。在每次运行的开始,尽可能的确保系统是在相同的状态下。如果基准测试很重要,你应该在每次运行都去重启动系统。如果你需要基准测试预热的服务器,你应该也要确定你的预热时间是足够的长以及是可重复验证的。如果预热是由随机的语句所组成,这个基准测试结果就是不能重复验证的。
如果基准测试更改了数据或者数据模型,要在每次运行之前,进行数据重置。往一个上千数据的表的测试结果当然是和百万级别的表是不一样的。在硬盘上的数据碎片和分布也可能让你的结果是不可重复验证的。一个方法确认物理布局是差不多相近的,那么就快速格式化以及一个分区的文件拷贝。
要当心一些外部读取,程序剖析以及监控系统,详细的日志,周期性的任务,以及其他能使你结果偏离的因素。一个比较典型的因素就是周期性任务(con job),往往运行在基准测试之中,或者一个巡查读取周期(Patrol Read cycle)或者一个在RAID上进行一致性的检查。一定要确定一切资源都是为了基准测试。如果其它的一些影响了网络的能力,或者基准测试运行在与其他服务器共享的SAN上。你的结果可能不会准确。
在每次的基准测试中,尽可能的少更改参数。在这场景中,叫做“隔离变量”。如果你必须更该一些,那么可能要冒着丢掉某些东西的风险。参数可能还依赖于其他参数。因此有的时候,你不能单独的修改它们。有的时候你甚至不知道它们是相关的,这就更增加了复杂性。
一般情况下,都是迭代更改基准测试的参数。而不是在各个运行之间去更改。举个例子,使用一种如(divide-and-conquer)的技术(在各个运行之间,把差异分成两部分)对于服务器能得出一个有价值的信息。
我们看到了很多在移植之后的基准测试,如从Oracle移植到MySQL。这往往是令人讨厌的。因为MySQL与Oracle相比,有很多不同类型的语句运行的效果要好。如果你想知道从oracle移植到MySQL之后,这个应用的表现如何。你就需要修改数据模型和在MySQL下的语句了。(在许多案例中,如你要创建一个跨平台的应用,你可能想知道,同一语句在两个平台上的表现,但是这种案例很少见)
你也不能在MySQL默认配置的情况下获得有意义的数据。因为默认的配置都是面向的是极小的应用和消耗非常少的内存。
最终,如果你得到的是一个奇怪的结果,不要把它作为坏的数据而丢弃。调查和尽力找出哪出了问题。你可能会得到有价值的结果,一个严重的错误,或者是基准测试的设计缺陷。
运行基准测试和分析结果
一旦你准备好了所有的前期准备,你可以运行基准测试并获取并分析数据。
自动运行基准测试是个非常好的主意。这么做会提高结果的质量和精确程度。因为这能避免忘掉某个步骤或者每次运行都会有一些突发事件。它也能帮助你记录基准运行的方式。
任意的自动化方法都可以做,如,Makefile或者一些脚本。你可以任意选择一些脚本语言:shell,php,Perl等等。尽可能的让更多的步骤进行自动化。包括了读取数据,系统得预热,运行基准测试,以及记录结果。
你经常多次的运行基准测试。到底运行多少次,这和你计分方式和结果的重要性有很大关系。如果你要最准确的确定的事情。你需要更多次的运行基准测试。有许多好的方式有助于得到更准确的结果,如平均所有结果或者运行5次基准测试,取其中最好的3次取平均。可以精确的获得你想要的。你可能应用统计学来分析结果,找出可信的区间等等,但是往往你并不需要这个精确级别。如果这些结果可以令你满意,你可以简单的运行基准测试以及看这些结果的变化。如果结果变化非常大,那么只有多次运行或者运行时间更长。这样才能降低结果的差异。
一旦你有了结果,你需要分析它们-那就是把数量转换为知识。目标就是解决问题。比较理想的是,得到结果如:相同的延迟下升级到4个CPU可以提高50%的吞吐量。索引能使查询更迅速。
你怎样完全分析透数据取决于你怎样收集结果。你可能应该写脚本去分析结果,不仅仅能降低工作量,也可以自动运行基准测试:重复和记录。
发表评论
-
查询性能的优化 - 语句执行的基础 - 查询优化的过程 (一)
2010-01-20 12:00 3464在语句生命周期的下一步就是把一个SQL查询放入一个可执行 ... -
查询性能的优化 - 语句执行的基础 - 已缓存的查询语句
2009-12-01 09:58 1163在解析一个查询之前,如果缓存开启,MySQL要检查它的缓存。这 ... -
查询性能的优化 - 语句执行的基础 - MySQL 客户端/服务端 协议
2009-12-01 01:25 1931MySQL 客户端/服务端 协 ... -
查询性能的优化 - 语句执行的基础
2009-11-30 00:36 1018如果你想从MySQL服务器获得很高的性能,建议你花费一定的时间 ... -
查询性能的优化 - 重新构建查询的方法 - 分解JOIN查询
2009-11-29 11:54 1831分解JOIN查询 许多高性能的网站都分解了JOIN查询。你可 ... -
查询性能的优化 - 重新构建查询的方法 - 拆分一个查询语句
2009-11-28 23:17 1496拆分一个查询语句 另一个分解查询的方法是分步解决。本质上来 ... -
查询性能的优化 - 重新构建查询的方法 - 复杂查询VS多个查询语句
2009-11-28 01:32 1514当开始优化有问题的查 ... -
查询性能的优化 - 查询慢的基础知识:优化数据访问
2009-08-19 14:50 1568一个查询执行的不是 ... -
查询性能的优化 - 前言
2009-08-12 16:49 991上一章,我们解释了怎样优化schema.这是高性能的一个必要条 ... -
Schema的优化和索引 - 关于存储引擎的简单记录
2009-08-12 15:26 1056这一章的结束,我们来说一下关于设计模型的存储引擎的选择,这些你 ... -
Schema的优化和索引 - 加速ALTER TABLE
2009-08-12 14:02 1832当对于一个大表进行ALTER TABLE的时候,性能问题就产生 ... -
Schema的优化和索引 - 范式和非范式
2009-08-12 11:35 1681有很多方法来展现给定的数据。从完全范式到完全的非范式以及介于两 ... -
Schema的优化和索引 - 索引和表的维护
2009-08-10 15:38 1408当你已经创建了一张表 ... -
Schema的优化和索引 - 学习一个索引示例
2009-08-06 14:09 1044用例子来理解索引的概 ... -
Schema的优化和索引 - 高性能的索引策略 - 索引和锁
2009-07-31 15:48 1014InnoDB中,索引所扮演的角色是非常重要的。因为它们可以能让 ... -
Schema的优化和索引 - 高性能的索引策略 - 冗余和重复的索引
2009-07-31 11:37 2053MySQL可以在一个列上创建多个索引;这么做并不会提醒和防止发 ... -
Schema的优化和索引 - 高性能的索引策略 - 压缩索引(Packed Indexes)
2009-07-30 21:30 1413MyISAM使用前缀压缩来降低索引的大小,这样就可以把更多的索 ... -
Schema的优化和索引 - 高性能的索引策略 - 使用索引扫描来进行排序
2009-07-28 10:43 2190MySQL有两种方法生成有序的结果:使用文件排序或者按顺序的扫 ... -
Schema的优化和索引 - 高性能的索引策略 - 覆盖索引(Covering Indexes)
2009-07-22 15:25 2578索引是高效找到行的一 ... -
Schema的优化和索引 - 高性能的索引策略 - 聚簇索引(Clustered Indexes)
2009-07-20 23:29 3133聚簇索引并不是一个独立的索引类型。确切的说它们是存储数据的一个 ...
相关推荐
BenchmarkSQL 是一个免费的开源的数据库系统基准测试工具,用于测试衡量不同数据库系统的性能。 BenchmarkSQL 是用 Java 编写的,它可以在任何支持 Java 的操作系统上运行,并且允许用户自定义配置和运行基准测试。 ...
进一步来理解,基准测试是在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响,这也是基准测试最常见的用途。其他用途包括...
对该算法的测试实验首先采用基准测试数据 circle-in-the-square 测试了其学习能力,并 与ARTMAP(adaptive resonance theory supervised predictive mapping)和BP(back propagation)神经网络进行了比较; 然后采用标准...
端到端ML系统基准一个模块化套件,用于对机器学习管道的所有阶段进行基准测试。 为了找到此类管道中的瓶颈并比较不同的ML工具,该框架可以计算和可视化数据准备,模型训练,模型验证和推断阶段中的多个指标。当前的...
APT Android Performance Testing Tools 开源项目 适用于开发自测和定位性能瓶颈 帮助测试人员完成性能基准测试 竞品测试 APT提供了CPU利用率实时曲线图 多维度内存实时曲线图 方便竞品对比测试和定位内存泄露问题...
提出一种基于服务时间标记的性能异常侦测方法,标记相对稳定的请求服务时间,并通过分析该时间变化来定位性能瓶颈...该方法已经实现在一个典型的多层Web应用系统的支撑平台中,TPC-W测试基准的测试结果验证了其有效性。
该库特别适合对虚拟机性能进行基准测试,因为它计算量大,通常是游戏中的实际性能瓶颈,并且已移植到多种语言中。 您可以 ,和找到更多背景。最新结果(截至2016年6月5日): 毫秒/帧第五个百分位数95%百分位数与C...
HammerDB是一款开源的基准测试工具,专门用于测试关系型数据库系统的性能。它可以模拟高负载的情况,测试数据的读写速度、并发访问的能力等关键指标,从而评估数据库系统的性能水平。HammerDB可以支持多种主流的...
11.2.4 基准测试案例设计及运行 300 11.2.5 结果分析 305 11.2.6 优化建议 306 11.2.7 预测 306 11.3 案例实践:性能测试第二阶段Ajax系统负载测试 307 11.3.1 本轮测试目的 307 11.3.2 测试场景规划 307 11.3.3 ...
如果要提升能力,可能的瓶颈会是哪一块 如果要每个页面都去做调整,在实务上不切实际,时间的耗用上也相对过大。流程上我们会先这样设计: 先挑选出最常用且负载最大的页面- 通常是首页。 先简单压测一次(使用wrk) ...
延迟标头 PoC 向 http 响应添加 HTTP 标头使开发人员能够更好地了解其 API 层的延迟和网络瓶颈。说明基本上在这个概念证明中引入了两个标头: x-request-received由服务器设置,带有收到请求时的时间戳x-response-...
简单PHP类,用于以毫秒为单位的时间对代码进行计时/基准测试。 它是在Linux上开发的,但我认为没有理由不能在其他平台上使用。 如果您的平台上的单元测试失败,请与我联系。 产品特点 完成时自动向stdout报告代码...
在当前生产环境下,对xx系统进行单交易基准测试、单交易负载测试、混合交易负载测试、稳定性测试、异常测试、带宽容量测试,系统最大的并发用户量,发现性能瓶颈并协助进行解决,并给出生产环境上线的用户量与环境...
第2章:寻找瓶颈:基准测试(Benchmarking)与性能分析(Profiling) 32 第3章:架构优化和索引 80 第4章:查询性能优化 152 第5章:MySQL高级特性 204 第6章:优化服务器设置 265 第7章:操作系统和硬件优化 305 第...
它最初旨在针对不同的 Qemu 配置运行基准测试并找到最佳配置。运行压力基准该工具分为两个脚本: 用法: Usage: ./run.py [[-c|--config=] ] [[-v|--vms=] ] [-h|--help] -c|--config configuration file that will...
Dgraph团队最近根据最新版本v20.11.0对当前设置进行了基准测试。 您可以查看发布在其的结果。 随着时间的推移,v1.0.x版中的许多性能瓶颈都得到了改善。 基准结果 所有测试均在具有多路Intel:registered:Xeon:...
性能监控和告警 六步总结,从正确的角度出发,设定目标(性能优化不是漫无目的的),基准测试 (了解现有系统应用的运行时情况),根据情况分析瓶颈,优化它,设置监控和告警 (其实可以再扩展比如达到一定的负载,...
性能监控和告警 六步总结,从正确的角度出发,设定目标(性能优化不是漫无目的的),基准测试 (了解现有系统应用的运行时情况),根据情况分析瓶颈,优化它,设置监控和告警 (其实可以再扩展比如达到一定的负载,...
APT是一个Android平台高效性能测试组件,提供丰富实用的功能,适用于开发自测、定位性能瓶颈;测试人员完成性能基准测试、竞品对比测试 用法:APT是Eclipse的插件,放到plugins或者dropins,重启即可