【赵渝强老师】MySQL的基准测试与sysbench

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。

b153.png


对数据库进行基准测试,以掌握数据库的性能情况是非常必要的。因此对数据库的性能指标进行定量的、可复现的、可对比的测试就显得非常的重要。


一、MySQL的基准测试与sysbench


MySQL的基准测试可以理解为是对数据库运行时的一种压力测试。但这样的测试不关心业务逻辑,更加简单、直接、易于测试。测试时使用的数据可以由工具生成,不要求真实。MySQL数据库基准测试时的关键指标包括以下3个方面:


  • TPS/QPS:衡量吞吐量。
  • 响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。
  • 并发量:同时处理的查询请求的数量。


MySQL利用sysbench基准测试工具可以很好地完成数据库的基准测试工作。sysbench支持多线程的工作,并且能够实现跨平台的安装部署。


视频讲解如下:


二、【实战】安装和使用sysbench


下面通过具体的步骤来演示如何安装sysbench,以及它的基本使用方法。


(1)sysbench可以通过yum方式直接进行安装,执行下面的语句。

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | bash
yum -y install sysbench


(2)查看sysbench的版本信息。

sysbench --version
# 输出的信息如下:
sysbench 1.0.20


(3)查看sysbench的使用帮助。

sysbench --help
# 输出的信息如下:
Usage:
  sysbench [options]... [testname] [command]


其中:

  • options代表sysbench进行测试时所使用的参数,主要分为通用选项和MySQL专用选项。下表列举了具体的选项名称和它们的含义。


  • testname指定了要进行测试的名称。
  • command代表sysbench要执行的命令,包括prepare、run和cleanup三个命令:prepare是为测试提前准备数据;run是执行正式的测试;cleanup是在测试完成后对数据库进行清理。


(4)使用sysbench测试服务器的CPU性能 。

sysbench cpu --cpu-max-prime=20000 --threads=2 run

提示:sysbench对CPU的测试主要是进行素数的加法运算进行测试,其中:

--cpu-max-prime: 生成素数的数量上限。

--threads: 启动进行素数计算的线程数。


输出的信息如下:

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
#指定线程个数
Number of threads: 2
Initializing random number generator from current time
#每个线程产生的素数上限为2万个
Prime numbers limit: 20000
Initializing worker threads...
Threads started!
CPU speed:
    #所有线程每秒完成了342.47次event
    events per second:       342.47
General statistics:
    total time:              10.0052s #共耗时10.0052秒
    total number of events:  3427    #在10.0052秒内共完成了3427次event
Latency (ms):
   min:                    2.67 #完成1次event最少耗时2.67ms
   avg:                    5.83 #完成所有events平均耗时5.83ms
   max:                   26.00 #完成1次event最大耗时26毫秒
   95th percentile:       13.95 #95%的events完成都在13.95ms完成
   sum:                19979.50 
Threads fairness:
    #平均每完成1713.5000次event,标准差是3.50
    events (avg/stddev):         1713.5000/3.50 
  
    #每个线程平均耗时9.9897秒,标准差为0.01event
    execution time (avg/stddev): 9.9897/0.01


(5)使用sysbench测试磁盘的IOPS,执行下面的语句。 

# 准备测试数据
sysbench fileio --file-total-size=1G --file-test-mode=rndrw \
--time=30 --max-requests=0 prepare

# 开始测试
sysbench fileio --file-total-size=1G --file-test-mode=rndrw \
--time=30 --max-requests=0 run

# 清除测试数据
sysbench fileio --file-total-size=1G --file-test-mode=rndrw \
--time=30 --max-requests=0 cleanup

提示:IOPS是Input/Output Per Second的缩写,即每秒的输入输出量(或读写次数)。它是衡量磁盘性能的主要指标之一。IOPS的计算公式如下:

IOPS = (Throughput read + Throughput written) * 1024 / 16kb


输出的信息如下:

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Extra file open flags: (none)
128 files, 8MiB each
1GiB total file size
Block size 16KiB
Number of IO requests: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads...
Threads started!
File operations:
    reads/s:                      3372.32
    writes/s:                     2248.21
    fsyncs/s:                     7195.38
Throughput:
    read, MiB/s:                  52.69
    written, MiB/s:               35.13
General statistics:
    total time:                   30.0309s
    total number of events:       384769
Latency (ms):
         min:                     0.00
         avg:                     0.08
         max:                    18.82
         95th percentile:         0.31
         sum:                 29737.74
Threads fairness:
    events (avg/stddev):           384769.0000/0.00
    execution time (avg/stddev):   29.7377/0.00
# 从上面的测试数据可以计算出当前磁盘的IOPS为:
IOPS=(52.69+35.13)*1024/16=5620.48



三、【实战】使用sysbench测试MySQL数据库


sysbench提供了相关的lua脚本对数据库的性能进行测试。这些脚本可以在目录“/usr/share/sysbench/”下找到。下面列出了这些lua的脚本。

tree /usr/share/sysbench/  -P *.lua 
/usr/share/sysbench/
 bulk_insert.lua
 oltp_common.lua
 oltp_delete.lua
 oltp_insert.lua
 oltp_point_select.lua
 oltp_read_only.lua
 oltp_read_write.lua
 oltp_update_index.lua
 oltp_update_non_index.lua
 oltp_write_only.lua
 select_random_points.lua
 select_random_ranges.lua
 tests
     include
        inspect.lua
        oltp_legacy
            bulk_insert.lua
            common.lua
            delete.lua
            insert.lua
            oltp.lua
            oltp_simple.lua
            parallel_prepare.lua
            select.lua
            select_random_points.lua
            select_random_ranges.lua
            update_index.lua
            update_non_index.lua
     t


下面通过具体的步骤来演示如何使用sysbench提供的lua脚本测试MySQL数据库。视频讲解如下:


(1)创建测试数据库sysbenchdemo。

mysql -hlocalhost -P3306 -uroot -pWelcome_1 \
-e 'create database sysbenchdemo'


(2)准备测试数据。

sysbench /usr/share/sysbench/oltp_insert.lua  \
         --mysql-host=localhost \
         --mysql-port=3306 \
         --mysql-socket=/tmp/mysql.sock \
         --mysql-user=root \
         --mysql-password=Welcome_1 \
         --mysql-db=sysbenchdemo \
         --db-driver=mysql \
         --tables=5 \
         --table-size=100000 \
         --time=180 prepare

提示:这调用了sysbench提供的脚本“/usr/share/sysbench/oltp_insert.lua”创建了5张表,并且往每张表中插入了100000条记录。


输出的信息如下:

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Creating table 'sbtest1'...
Inserting 100000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 100000 records into 'sbtest2'
Creating a secondary index on 'sbtest2'...
Creating table 'sbtest3'...
Inserting 100000 records into 'sbtest3'
Creating a secondary index on 'sbtest3'...
Creating table 'sbtest4'...
Inserting 100000 records into 'sbtest4'
Creating a secondary index on 'sbtest4'...
Creating table 'sbtest5'...
Inserting 100000 records into 'sbtest5'
Creating a secondary index on 'sbtest5'...


(3)开始进行测试。

sysbench /usr/share/sysbench/oltp_insert.lua  \
         --mysql-host=localhost \
         --mysql-port=3306 \
         --mysql-socket=/tmp/mysql.sock \
         --mysql-user=root \
         --mysql-password=Welcome_1 \
         --mysql-db=sysbenchdemo \
         --db-driver=mysql \
         --tables=5 \
         --table-size=100000 \
         --time=180 run

# 输出的信息如下:
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Initializing worker threads...
Threads started!
SQL statistics:
    queries performed:
        read:                 0
        # 总的写次数
        write:                175062
        other:                0
        total:                175062
    # 总的事务数和每秒事务数
    transactions:             175062 (972.55 per sec.)
    queries:                  175062 (972.55 per sec.)
    ignored errors:           0      (0.00 per sec.)
    reconnects:               0      (0.00 per sec.)
General statistics:
    # 总的执行时间和事件数
    total time:               180.0014s
    total number of events:   175062
# 延时的统计信息
Latency (ms):
         min:                      0.62
         avg:                      1.02
         max:                     94.24
         95th percentile:          1.58
         sum:                 179185.02
Threads fairness:
    events (avg/stddev):           175062.0000/0.00
    execution time (avg/stddev):   179.1850/0.00


(4)清理测试数据。

sysbench /usr/share/sysbench/oltp_insert.lua  \
         --mysql-host=localhost \
         --mysql-port=3306 \
         --mysql-socket=/tmp/mysql.sock \
         --mysql-user=root \
         --mysql-password=Welcome_1 \
         --mysql-db=sysbenchdemo \
         --db-driver=mysql \
         --tables=5 \
         --table-size=100000 \
         --time=180 cleanup



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
259 0
|
4月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
171 1
|
6月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
429 36
|
5月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL中的数据库对象
本教程详细介绍了MySQL数据库中的常见对象,包括表、索引、视图、事件、存储过程和存储函数的创建与管理。内容涵盖表的基本操作、索引的使用、视图简化查询、事件调度功能等,并通过具体示例演示相关SQL语句的使用方法。
105 0
|
6月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
279 5
|
7月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL的备份方案
本文详细介绍了MySQL数据库备份与恢复的多种方式,包括物理备份与逻辑备份的概念及区别、全量备份、增量备份和差异备份的特点,以及热备份与冷备份的适用场景与优缺点。通过图文结合的方式,并辅以视频讲解,帮助读者全面了解MySQL备份策略及其工具选择,为实际操作提供理论支持。
229 9
|
7月前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
365 5
|
6月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
283 0
|
8月前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
147 0
|
8月前
|
SQL 缓存 关系型数据库
MySQL8.4 Enterprise安装Firewall及测试
MySQL8.4 Enterprise安装Firewall及测试
251 0

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多