MySQL性能测试

一、性能指标

  • TPS :Transactions Per Second ,即数据库每秒执行的事务数,以 commit 成功次数为准。
  • QPS :Queries Per Second ,即数据库每秒执行的 SQL 数(含 insert、select、update、delete 等)。
  • RT :Response Time ,响应时间。包括平均响应时间、最小响应时间、最大响应时间、每个响应时间的查询占比。比较需要重点关注的是,前 95-99% 的最大响应时间。因为它决定了大多数情况下的短板。
  • Concurrency Threads :并发量,每秒可处理的查询请求的数量。

总结来说,实际就是 2 个维度:

  • 吞吐量
  • 延迟

二、测试工具

  • mysqlslap

    mysqlslap可以模拟服务器的负载,并输出计时信息。在MySQL 4.1或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL 语句(可以在命令行上执行,也可以把SQL 语句写入到参数文件中)。如果没有指定SQL 语句,mysqlslap 会自动生成查询schema 的SELECT 语句。

  • sysbench

    sysbench是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件I/O、操作系统调度器、内存分配和传输速度、POSIX 线程,以及数据库服务器等。sysbench 支持Lua 脚本语言,Lua 对于各种测试场景的设置可以非常灵活。sysbench 是我们非常喜欢的一种全能测试工具,支持MySQL、操作系统和硬件的硬件测试。

  • MySQL Benchmark Suite (sql-bench)

    在MySQL 的发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的操作在服务器上执行得更快。

      这个测试套件的主要好处是包含了大量预定义的测试,容易使用,所以可以很轻松地用于比较不同存储引擎或者不同配置的性能测试。其也可以用于高层次测试,比较两个服务器的总体性能。当然也可以只执行预定义测试的子集(例如只测试UPDATE 的性能)。这些测试大部分是CPU 密集型的,但也有些短时间的测试需要大量的磁盘I/O 操作。

      这个套件的最大缺点主要有:它是单用户模式的,测试的数据集很小且用户无法使用指定的数据,并且同一个测试多次运行的结果可能会相差很大。因为是单线程且串行执行的,所以无法测试多CPU 的能力,只能用于比较单CPU 服务器的性能差别。使用这个套件测试数据库服务器还需要Perl 和BDB 的支持,相关文档请参考.

  • Super Smack

    Super Smack是一款用于MySQL 和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。这是一个复杂而强大的工具,可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。测试定义在"smack"文件中,smack 文件使用一种简单的语法定义测试的客户端、表、查询等测试要素。

  • 等等

三、sysbench测试实例

参考:sysbench 中的测试示例

四、mysqlslap测试实例

mysqlslap是一个mysql官方提供的压力测试工具。以下是比较重要的参数:

  • –defaults-file,配置文件存放位置
  • –concurrency,并发数
  • –engines,引擎
  • –iterations,迭代的实验次数
  • –socket,socket文件位置

自动测试:

  • –auto-generate-sql,自动产生测试SQL
  • –auto-generate-sql-load-type,测试SQL的类型。类型有mixed,update,write,key,read。
  • –number-of-queries,执行的SQL总数量
  • –number-int-cols,表内int列的数量
  • –number-char-cols,表内char列的数量
  • –create-schema,指定数据库名称
  • –query,指定SQL语句,可以定位到某个包含SQL的文件

1、测试同时不同的存储引擎的性能进行对比

mysqlslap -uroot -p123456 \
-a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb

2、执行一次测试,分别50和100个并发,执行1000次总查询

mysqlslap -uroot -p123456 \
-a --concurrency=50,100 --number-of-queries 1000 6

3、50和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:

mysqlslap -uroot -p123456 \
-a --concurrency=50,100 --number-of-queries 1000 --iterations=5
Copyright Curiouser all right reserved,powered by Gitbook该文件最后修改时间: 2022-05-16 17:26:46

results matching ""

    No results matching ""