简介:以上文章讲述的是【数据库性能调优知识与面试知识(详解二存储引擎)】接下来我总结一下【数据库性能调优知识与面试知识(详解三基准测试)】。觉得我还可以的可以加群一起督促学习探讨技术。QQ群:1076570504 个人学习资料库http://www.aolanghs.com/ 微信公众号搜索【欢少的成长之路】
简介
本文经验都是我看书学习的总结的一些经验,面试常问的知识点,所以请关注后再继续观看学习!下面已经给出了书的目录!今后将按目录的顺序继续更新学习心得!接上文继续分享
目标
希望通过这些MySQL的内部原理的知识可以帮助大家培养发现新问题的洞察力,能学习和实践的结合设计出维护基于MySQL的系统。
本篇文章讲述的是基准测试,MySQL的应用的基准测试的重要性,策略和工具。sysbeanch! 学MySQL性能的大多数是要进互联网行业的,进互联网行业不知道基准测试,性能测试,压力测试的能说的过去嘛!
更新目录
第一章:数据库基础知识(已更新完)
第二章:基准测试(已更新完)
第三章:服务器性能刨析
第四章:Schema与数据库类型优化
第五章:创建高性能的索引
第六章:查询性能优化
第七章:MySQL高级特性
第八章:优化服务器设置
第九章:操作系统和硬件优化
第十章:复制底层实现
第十一章:可扩展的MySQL
第十二章:高可用性
第十三章:云端的MySQL
第十四章:应用层优化
第十五章:备份与恢复
第十六章:MySQL用户工具
基准测试是什么,为什么?
基准测试是MySQL新手和专家都需要掌握的一项基本技能!是针对系统涉及的一种压力测试,目标是为了掌握系统的行为或者做新硬件的可靠性测试。基准测试可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些重要的变化,或者观察系统如何处理不同的数据。这里只关注与性能相关的测试!
区别在哪?
TIP:举个例子,使用新数据库系统上线后往往要测试当前系统可以支持多大的业务增长?首先对原系统做一个基准测试,然后再对新系统做一个基准测试,结果发现新系统比原系统多40倍的TPS(每秒事务数)。这时不能简单的推断支持40倍的业务增长!因为随着系统的发展我们的用户,流量,数据以及数据之间的交互都在增长。最后得出结论我们只能进行大概的测试来确定系统大致的余量是多少!
基准测试主要分两种策略
集成式基准测试原因
单组件式基准测试原因
测试何种指标
TIP:着重测试根据当前业务对用户来说最重要的指标。
在了解基本概念之后我们来看一下具体怎么设计和执行吧。先看一下如何避免一些常见的错误,这些错误可能导致测试结果无用或者不精确。只有避免了下列错误才能走上改进测试质量的漫漫长路。
设计与规划
提出问题并明确目标,决定采用标准的基准测试还是设计专用的测试。
如果采用标准的基准测试应该确认选择合适的测试方案。例如不要使用TPC-H测试电子商务系统,因为TPC-H是即席查询和决策支持型应用的基准测试,不适合OLTP系统。
如果采用设计专用的测试,它是很复杂的,往往需要一个迭代的一个过程。首先要获得生产数据集的快照,并且容易还原快照,以便后续测试。
针对数据查询可以建立一个单元测试集作为初步测试,并运行多遍。但是这和真实的数据库环境还是存在偏差的,为了更好的模拟现场的数据库环境建议选择一个具有代表性的时间段,比如高峰期的一个小时,或者一整天。
应该运行多长时间
基准测试应该运行足够长的时间,这一点非常重要。如果系统有大量的数据和内存,要达到稳定状态可能需要非常长的时间。大部分系统都会有一些突发情况的余量,能够吸收性能的剑锋,延迟到高峰后运行。
获取系统性能和状态
需要记录的数据包括系统状态和性能指标,诸如CPU使用率,磁盘IO,网络流量统计,show geobal status计数器等。
获取准确的测试结果
获取准确的测试结果要注意很多因素,比如外部的压力,性能分析和监控系统,详细的日志记录,周期性作业以及其他因素都会影响测试的结果。
如果测试的数据出现了异常,不要轻易当做坏数据而丢弃,应该认真研究并找到产生这种结构的原因。
集成式测试工具
ab:ab是一个Apache HTTP服务器基准测试工具。它可以测试HTTP服务器每秒最多可以处理多少请求。如果测试的是Web应用服务,这个结果可以转换成整个应用每秒可以满足多少请求。只能针对单个URL进行尽可能快的压力测试。
http_load:这个工具和ab差不多,也被设计为对Web服务器进行测试,但比ab要更加灵活。可以通过一个输入文件提供多个URL,http_load在这些url中随机选择进行测试。也可以定制http_load使其按照时间比率进行测试,而不仅仅是测试最大请求处理能力。
JMeter:一个Java应用程序,可以加载其他应用并测试其性能。它虽然是设计用来测试Web应用的。但也可以利用测试其他例如FTP服务器,或者通过JDBC进行数据库查询测试。JMeter比ab和http_load复杂的多,它可以通过控制预热时间等参数,更加灵活的模拟真实的用户的访问。JMeter拥有绘图接口,还可以对测试进行记录,然后离线重演测试结果。
单组件式测试工具
mysqlslap:可以模拟服务器的负载并输出计时信息。如果没有指定SQL语句,mysqlslap会自动生成查询schema的select语句。
MySQL Benchmark Suite:MySQL发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的操作在服务器上执行得更快。这个套件的好处是包含了大量预定义的测试,容易使用,所以可以很轻松地用于比较不同的存储引擎或不同配置的性能测试。也可以用于高层次测试比较两个服务器的整体性能。缺点是:单用户模式,测试的数据集很小且用户无法指定数据测试,并同一个测试多次运行的结果可能会相差很大。因为是单线程串行执行的,所以无法测试多CPU能力,只能用于比较单CPU服务器的性能差别。使用这套还要有BDB和Perl的支持。
super smack:是一款基于MySQL和PostgreSQL的基准测试工具。可以提供压力测试和负载生成。这是一个复杂而强大的工具,可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。
Database Test Suite:这是一款类似某些工业标准测试的测试工具集。
Perconas TPCC-MySQL Tool:这是一个类似TPC-C的基准测试工具集,在评估大压力下MySQL的一些行为时,我们经常会使用这个工具进行测试。
sysbench:是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。可以测试文件IO,操作系统调度器,内存分配和传输速度,posix线程以及数据库服务器等。支持lua脚本语言,lua对于各种测试场景的设置可以非常灵活。sysbench是非常好的一种全能测试工具,支持MySQL,操作系统和硬件测试。
以上知识基本都是关于基准测试的,每一个MySQL的使用者都应该或多或少的懂一些这方面的知识。不仅是用来解决业务问题的一种实践行动,也是一种很好的学习方法。学习如何将问题分解成可以通过基准测试来获得答案的方法。
如果没做过基准测试,建议从sysbench开始熟悉。可以先学习oltp和fileio测试。oltp可以很方便得比较不同系统的性能。另一方面文件系统和磁盘基准测试,则可以在系统出现问题时有效地诊断和隔离异常的组件
具体的案例不做分享了,需要的联系公众号博主
目前更新出来的是我学习到的经验知识与心得,剩下的部分将过几天持续更新!
知道的越多,不知道的就越多。找准方向,坚持自己的定位!加油向前不断前行,终会有柳暗花明的一天!
创作不易,你们的支持就是对我最大认可!
文章将持续更新,我们下期见!下期将持续更新【详解四服务器性能剖析】 QQ群:1076570504 微信公众号搜索【欢少的成长之路】请多多支持!