0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MySQL基准测试和sysbench工具

数据分析与开发 来源:数据分析与开发 作者:编程迷思 2021-01-06 16:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、基准测试简介

1、什么是基准测试

数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。

基准测试与压力测试

基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。

2、基准测试的作用

对于多数Web应用,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。

而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。

3、基准测试的指标

常见的数据库指标包括:

TPS/QPS:衡量吞吐量。

响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。

并发量:同时处理的查询请求的数量。

4、基准测试的分类

对MySQL的基准测试,有如下两种思路:

(1)针对整个系统的基准测试:通过http请求进行测试,如通过浏览器、APP或postman等测试工具。该方案的优点是能够更好的针对整个系统,测试结果更加准确;缺点是设计复杂实现困难。

(2)只针对MySQL的基准测试:优点和缺点与针对整个系统的测试恰好相反。

在针对MySQL进行基准测试时,一般使用专门的工具进行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更强大,且更适合Innodb(因为模拟了许多Innodb的IO特性),下面介绍使用sysbench进行基准测试的方法。

二、sysbench

1、sysbench简介

sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:

cpu性能

磁盘io性能

调度程序性能

内存分配及传输速度

POSIX线程性能

数据库性能(OLTP基准测试)

本文主要介绍对数据库性能的测试。

2、sysbench安装

本文使用的环境时CentOS 6.5;在其他Linux系统上的安装方法大同小异。MySQL版本是5.6。

(1)下载解压

wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
unzip sysbench-1.0.zip
cd sysbench-1.0

(2)安装依赖

yum install automake libtool –y

(3)安装

安装之前,确保位于之前解压的sysbench目录中。

./autogen.sh
./configure
export LD_LIBRARY_PATH=/usr/local/mysql/include #这里换成机器中mysql路径下的include
make
make install

(4)安装成功

[root@testsysbench-1.0]#sysbench--versionsysbench 1.0.9

3、sysbench语法

执行sysbench –help,可以看到sysbench的详细使用方法。

sysbench的基本语法如下:

sysbench [options]。.. [testname] [command]

下面说明实际使用中,常用的参数和命令。

(1)command

command是sysbench要执行的命令,包括prepare、run和cleanup,顾名思义,prepare是为测试提前准备数据,run是执行正式的测试,cleanup是在测试完成后对数据库进行清理。

(2)testname

testname指定了要进行的测试,在老版本的sysbench中,可以通过--test参数指定测试的脚本;而在新版本中,--test参数已经声明为废弃,可以不使用--test,而是直接指定脚本。

例如,如下两种方法效果是一样的:

sysbench--test=./tests/include/oltp_legacy/oltp.luasysbench ./tests/include/oltp_legacy/oltp.lua
  • 测试时使用的脚本为lua脚本,可以使用sysbench自带脚本,也可以自己开发。对于大多数应用,使用sysbench自带的脚本就足够了。不同版本的sysbench中,lua脚本的位置可能不同,可以自己在sysbench路径下使用find命令搜索oltp.lua。P.S.:大多数数据服务都是oltp类型的,如果你不了解什么是oltp,那么大概率你的数据服务就是oltp类型的。

    (3)options

    sysbench的参数有很多,其中比较常用的包括:

    MySQL连接信息参数

    --mysql-host:MySQL服务器主机名,默认localhost;如果在本机上使用localhost报错,提示无法连接MySQL服务器,改成本机的IP地址应该就可以了。

    --mysql-port:MySQL服务器端口,默认3306

    --mysql-user:用户名

    --mysql-password:密码

    MySQL执行参数

    --oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。

    --oltp-tables-count:测试的表数量,根据实际情况选择

    --oltp-table-size:测试的表的大小,根据实际情况选择

    --threads:客户端的并发连接数

    --time:测试执行的时间,单位是秒,该值不要太短,可以选择120

    --report-interval:生成报告的时间间隔,单位是秒,如10

    4、sysbench使用举例

    在执行sysbench时,应该注意:

    (1)尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。

    (2)可以逐步增加客户端的并发连接数(--thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。

    (3)一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。

    (4)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

    下面是sysbench使用的一个例子:

    (1)准备数据

sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 prepare

其中,执行模式为complex,使用了10个表,每个表有10万条数据,客户端的并发线程数为10,执行时间为120秒,每10秒生成一次报告。

cdab7c6c-4fca-11eb-8b86-12bb97331649.png

(2)执行测试

将测试结果导出到文件中,便于后续分析。

sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> /home/test/mysysbench.log

(3)清理数据

执行完测试后,清理数据,否则后面的测试会受到影响。

sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 cleanup

5、测试结果

测试结束后,查看输出文件,如下所示:

d13a6d34-4fca-11eb-8b86-12bb97331649.png

其中,对于我们比较重要的信息包括:

queries:查询总数及qps

transactions:事务总数及tps

Latency-95th percentile:前95%的请求的最大响应时间,本例中是344毫秒,这个延迟非常大,是因为我用的MySQL服务器性能很差;在正式环境中这个数值是绝对不能接受的。

三、建议

下面是使用sysbench的一些建议。

1、在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对MySQL的基准测试,还是二者都需要。

2、如果需要针对MySQL的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。

3、基准测试要进行多次才有意义。

4、测试时需要注意主从同步的状态。

5、测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。

参考文献http://blog.csdn.net/oahz4699092zhao/article/details/53332105

责任编辑:xj

原文标题:详解 MySQL 基准测试和 sysbench 工具

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    4078

    浏览量

    68522
  • 基准测试
    +关注

    关注

    0

    文章

    21

    浏览量

    7815
  • MySQL
    +关注

    关注

    1

    文章

    928

    浏览量

    29738

原文标题:详解 MySQL 基准测试和 sysbench 工具

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    恒讯科技解析:如何安装MySQL并创建数据库

    安装和管理MySQL不必复杂。只需几分钟,你就能在Linux服务器上搭建MySQL,创建第一个数据库,甚至自动化备份——同时确保数据安全有序。 什么是 MySQL  MySQL 是一个
    的头像 发表于 01-14 14:25 325次阅读

    Sandisk闪迪公司发布全新开源工具,突破数据存储测试瓶颈

    Sandisk闪迪公司日前正式推出一款创新的开源工具SPRandom,旨在解决SSD基准测试中的重大技术瓶颈。简而言之,预处理是基于实际工作负载对SSD进行测试的关键步骤,以确保性能表
    的头像 发表于 12-22 17:41 596次阅读

    工业数据中台支持接入MySQL数据库吗

    可行性:MySQL与数据中台的无缝对接 数据同步与采集 工业数据中台通过数据同步工具(如CDC变更数据捕获)或批量同步方式,可将MySQL中的业务数据实时或准实时抽取至中台。例如,数据中台可解析生产设备的PLC数据,经清洗、转换
    的头像 发表于 12-04 11:23 492次阅读
    工业数据中台支持接入<b class='flag-5'>MySQL</b>数据库吗

    如何选择适合的智驾仿真工具进行场景生成和测试

    在自动驾驶技术日益发展的背景下,选择合适的智驾仿真工具进行场景生成和测试显得尤为重要。该工具不仅需要支持高精度的场景重建,还需满足多种环境条件和传感器模型的兼容性。本文将深入探讨如何评估不同智驾仿真
    的头像 发表于 11-25 10:32 468次阅读
    如何选择适合的智驾仿真<b class='flag-5'>工具</b>进行场景生成和<b class='flag-5'>测试</b>?

    嵌入式软件测试与专业测试工具的必要性深度解析

    嵌入式系统作为控制、监视或辅助装置运行的专用计算机系统,其软件测试面临着独特的挑战和严格的要求。专业测试工具在嵌入式软件开发过程中发挥着不可替代的作用,是确保系统可靠性和安全性的关键保障。嵌入式软件
    发表于 09-28 17:42

    mysql数据恢复—mysql数据库表被truncate的数据恢复案例

    某云ECS网站服务器,linux操作系统,部署了mysql数据库。工作人员在执行数据库版本更新测试时,错误地将本应在测试库执行的sql脚本在生产库上执行了,导致部分表被truncate,部分表内数据
    的头像 发表于 09-11 09:28 1161次阅读
    <b class='flag-5'>mysql</b>数据恢复—<b class='flag-5'>mysql</b>数据库表被truncate的数据恢复案例

    量化评估企业软件测试能力的评估工具

    “每次版本迭代,测试团队总是最晚下班的一群人...”在汽车软件快速迭代的今天,这样的场景已成为行业常态:开发效率不断提升,但测试环节却逐渐成为拖慢交付的“最后一公里”。复杂的工具链、割裂的流程、模糊
    的头像 发表于 08-27 10:04 898次阅读
    量化评估企业软件<b class='flag-5'>测试</b>能力的评估<b class='flag-5'>工具</b>包

    是德示波器MSOX2024A时间基准稳定性的测试方法

    一、时间基准稳定性对示波器性能的影响 1.1 时间基准稳定性如何影响示波器的测量精度 时间基准稳定性直接影响示波器测量精度。若时间基准不稳定,示波器在采样时会出现偏差,导致测量出的信号
    的头像 发表于 08-18 17:19 819次阅读
    是德示波器MSOX2024A时间<b class='flag-5'>基准</b>稳定性的<b class='flag-5'>测试</b>方法

    CentOS 7下MySQL 8双主热备高可用架构全解

    Centos7部署MySQL8+keepalived双主热备(含Keepalived配置与GTID同步优化方案) 架构拓扑原理 GTID同步 VIP 192.168.1.100 MySQL主节点1
    的头像 发表于 08-12 17:08 972次阅读

    MySQL 8.0性能优化实战指南

    作为一名运维工程师,MySQL数据库优化是我们日常工作中最具挑战性的任务之一。MySQL 8.0作为当前主流版本,在性能、安全性和功能上都有了显著提升,但如何充分发挥其潜力,仍需要我们掌握正确的优化策略。
    的头像 发表于 07-24 11:48 1022次阅读

    【米尔RK3576开发板免费体验】1.米尔RK3576性能测试

    很高兴收到米尔电子的RK3576开发板,开发板如下 这期主要是来测试一下米尔RK3576的硬件性能参数。主要分为以下几个方面。 1。CPU测试 SysBench是一个模块化的、跨平台的多线程性能
    发表于 07-15 21:17

    MySQL数据备份与恢复策略

    数据是企业的核心资产,MySQL作为主流的关系型数据库管理系统,其数据的安全性和可靠性至关重要。本文将深入探讨MySQL的数据备份策略、常用备份工具以及数据恢复的最佳实践,帮助运维工程师构建完善的数据保护体系。
    的头像 发表于 07-14 11:11 864次阅读

    企业级MySQL数据库管理指南

    在当今数字化时代,MySQL作为全球最受欢迎的开源关系型数据库,承载着企业核心业务数据的存储与处理。作为数据库管理员(DBA),掌握MySQL的企业级部署、优化、维护技能至关重要。本文将从实战角度出发,系统阐述MySQL在企业环
    的头像 发表于 07-09 09:50 863次阅读

    MySQL数据库是什么

    MySQL数据库是一种 开源的关系型数据库管理系统(RDBMS) ,由瑞典MySQL AB公司开发,后被Oracle公司收购。它通过结构化查询语言(SQL)进行数据存储、管理和操作,广泛应用于Web
    的头像 发表于 05-23 09:18 1418次阅读

    如何在Visual Studio 2022中运行FX3吞吐量基准测试工具

    我正在尝试运行 John Hyde 的书“SuperSpeed by Design”中的 FX3 吞吐量基准测试工具。 但是,我面临一些困难,希望得到任何指导。 具体来说,我正在使用 Visual
    发表于 05-13 08:05