你知道学校里的MySQL与社会中的MySQL有啥区别吗?(详解三基准测试)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 本文经验都是我看书学习的总结的一些经验,面试常问的知识点,所以请关注后再继续观看学习!下面已经给出了书的目录!今后将按目录的顺序继续更新学习心得!接上文继续分享

前言


简介

本文经验都是我看书学习的总结的一些经验,面试常问的知识点,所以请关注后再继续观看学习!下面已经给出了书的目录!今后将按目录的顺序继续更新学习心得!接上文继续分享

目标

希望通过这些MySQL的内部原理的知识可以帮助大家培养发现新问题的洞察力,能学习和实践的结合设计出维护基于MySQL的系统。

本篇文章讲述的是基准测试,MySQL的应用的基准测试的重要性,策略和工具。sysbeanch! 学MySQL性能的大多数是要进互联网行业的,进互联网行业不知道基准测试,性能测试,压力测试的能说的过去嘛!

更新目录

第一章:数据库基础知识(已更新完)第二章:基准测试(已更新完)第三章:服务器性能刨析 第四章:Schema与数据库类型优化 第五章:创建高性能的索引 第六章:查询性能优化 第七章:MySQL高级特性 第八章:优化服务器设置 第九章:操作系统和硬件优化 第十章:复制底层实现 第十一章:可扩展的MySQL 第十二章:高可用性 第十三章:云端的MySQL 第十四章:应用层优化 第十五章:备份与恢复 第十六章:MySQL用户工具


正文


为什么需要基准测试?

基准测试是什么,为什么?

基准测试是MySQL新手和专家都需要掌握的一项基本技能!是针对系统涉及的一种压力测试,目标是为了掌握系统的行为或者做新硬件的可靠性测试。基准测试可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些重要的变化,或者观察系统如何处理不同的数据。这里只关注与性能相关的测试

  1. 验证基于系统的一些假设,确认这些假设是否符合实际情况
  2. 重现系统中的某些异常行为,以解决这些异常
  3. 测试系统当前的运行情况
  4. 模拟比当前系统更高的负载,找出系统随着压力增加而可能遇到扩展性瓶颈
  5. 规划业务未来的增长
  6. 测试应用适应可变环境的能力
  7. 测试不同的硬件,软件和操作系统配置
  8. 证明新采购的设备是否配置正确

区别在哪?

  1. 基准测试相当于给施加一个压力,但是不是真实压力 。对真实压力来说,通常比较简单,真实压力是不可预期的,真实压力在测试的时候更难得出结论
  2. 影响基准测试的有数据量,数据,查询的分布。最重要的一点是基准测试往往是要尽可能快的执行完成,所以往往会给系统施加过多的压力。

TIP:举个例子,使用新数据库系统上线后往往要测试当前系统可以支持多大的业务增长?首先对原系统做一个基准测试,然后再对新系统做一个基准测试,结果发现新系统比原系统多40倍的TPS(每秒事务数)。这时不能简单的推断支持40倍的业务增长!因为随着系统的发展我们的用户,流量,数据以及数据之间的交互都在增长。最后得出结论我们只能进行大概的测试来确定系统大致的余量是多少!


基准测试的策略


基准测试主要分两种策略

  1. 针对整个系统的整体测试也称为集成式基准测试
  2. 单独测试MySQL也被称为单组件式基准测试


集成式基准测试原因

  1. 测试整个应用系统,包括web服务器,应用代码,网络和数据库是非常有用的,因为用户关注的是整体的性能而不是单独的性能
  2. 只有对整体进行测试,才能发现通过整体测试发现各部分之间的缓存带来的影响
  3. MySQL并非应用的瓶颈,通过整体测试可以证明这一点
  4. 整体测试更能揭示应用的真实表示,而单组件基准测试很难达到这样的效果

单组件式基准测试原因

  1. 需要比较不同的schema或查询的性能
  2. 针对应用中某个具体问题的测试
  3. 为了避免漫长的基准测试们可以通过短期的测试来检测出某些调整后的效果

测试何种指标

  1. 吞吐量:吞吐量是指单位时间内的事务处理数,非常适用于多用户的交互式应用。测试单位是每秒事务数(TPS),有些也采用每分钟事务数(TPM)
  2. 响应实际或延迟:用于测试任务所需的整体时间。测试单位是秒,毫秒,微秒,分钟。通过我们可以使用百分之响应时间来替代最大响应时间。例如:95%的响应时间都是5毫秒,表示任务在95%的时间段内5毫秒之内完成。
  3. 并发性:并发性是非常容易误解,误用,误解的一个性能指标。正确的答案是在任意时间有多少同时发生的并发请求。Web的高并发一般也会导致数据库的高并发。(例如:一个良好的应用,同时可以打开成百上千个MySQL数据库服务器连接但只有少数在执行查询。所以说web站点50000个用户,并发有可能只有10-15个)。我们需要关注的是正在工作的并发操作。当并发增加观察吞吐量是否下降以及响应时间是否拉长。
  4. 可扩展性:在系统业务压力发生变化的情况下,扩展性就非常重要了。可扩展性指给系统增加一倍的工作,在理想情况下就获得两倍的结果(吞吐量增加一倍)。或者说给系统增加一倍的资源(两倍的CPU),就可以获得两倍的吞吐量。

TIP:着重测试根据当前业务对用户来说最重要的指标。


基准测试的方法


在了解基本概念之后我们来看一下具体怎么设计和执行吧。先看一下如何避免一些常见的错误,这些错误可能导致测试结果无用或者不精确。只有避免了下列错误才能走上改进测试质量的漫漫长路。

  1. 使用真实数据的子集而不是全集。例如当前应用需要100G数据。测试只有1G
  2. 使用错误的数据分布。例如使用均匀分布的数据测试,而系统的真实数有很多热点区域。
  3. 使用不真实的分布参数,假如所有的用户个人信息都会被平均地读取。
  4. 在多用户场景,只做单用户测试
  5. 在单服务器上测试分布式应用
  6. 与真实用户行为不匹配
  7. 反复执行同一个查询
  8. 没有检查错误。
  9. 忽略了系统预热的过程
  10. 使用默认的服务器配置
  11. 测试时间太短

设计与规划

提出问题并明确目标,决定采用标准的基准测试还是设计专用的测试。

如果采用标准的基准测试应该确认选择合适的测试方案。例如不要使用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可以很方便得比较不同系统的性能。另一方面文件系统和磁盘基准测试,则可以在系统出现问题时有效地诊断和隔离异常的组件


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
12天前
|
关系型数据库 MySQL 测试技术
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
|
15天前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志(Redo Log)和二进制日志(Binary Log)是两种重要的日志系统。重做日志主要用于保证事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务更改。二进制日志则记录了数据库的所有逻辑变化操作,用于数据的复制、恢复和审计。两者在写入时机、存储方式、配置参数和使用范围上有所不同,共同确保了数据库的稳定性和可靠性。
|
1月前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
52 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
192 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
1月前
|
人工智能 前端开发
大模型体验体验报告:OpenAI-O1内置思维链和多个llm组合出的COT有啥区别?传统道家理论+中学生物理奥赛题测试,名不虚传还是名副其实?
一个月前,o1发布时,虽然让人提前体验,但自己并未进行测试。近期终于有机会使用,却仍忘记第一时间测试。本文通过两个测试案例展示了o1的强大能力:一是关于丹田及练气的详细解答,二是解决一道复杂的中学生物理奥赛题。o1的知识面广泛、推理迅速,令人印象深刻。未来,或许可以通过赋予o1更多能力,使其在更多领域发挥作用。如果你有好的测试题,欢迎留言,一起探索o1的潜力。
|
1月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
2月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
528 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
1月前
|
存储 SQL 关系型数据库
mysql中主键索引和联合索引的原理与区别
本文详细介绍了MySQL中的主键索引和联合索引原理及其区别。主键索引按主键值排序,叶节点仅存储数据区,而索引页则存储索引和指向数据域的指针。联合索引由多个字段组成,遵循最左前缀原则,可提高查询效率。文章还探讨了索引扫描原理、索引失效情况及设计原则,并对比了InnoDB与MyISAM存储引擎中聚簇索引和非聚簇索引的特点。对于优化MySQL性能具有参考价值。
|
2月前
|
存储 算法 测试技术
面向对象测试和传统测试的区别
面向对象测试和传统测试的区别
59 9