MySQL测试、基准测试与性能分析全解析
立即解锁
发布时间: 2025-08-23 01:43:11 阅读量: 2 订阅数: 11 

### MySQL测试、基准测试与性能分析全解析
#### 高级测试命令
MySQL测试套件提供了丰富的命令来创建强大的测试,但目前暂无全面文档解释所有可用命令。下面介绍一些实用的高级测试命令:
1. **记录测试结果**:使用 `--record` 命令行参数可创建结果文件。例如,运行 `./mysql-test-run.pl --record cab` 能记录 `cab` 测试文件的结果。
2. **预期错误处理**:若期望特定错误发生,可使用 `--error num` 命令。此命令告知测试套件预期该错误,出现时测试不会失败,且应置于产生错误的命令之前。还能通过逗号分隔指定多个错误号,如 `--error 1550, 1530`。
3. **控制流代码**:可在测试中使用控制流代码,如循环。以下代码将命令执行100次:
```plaintext
let $1 = 100;
while ($1)
{
# Insert your commands here
dec($1)
}
```
4. **暂停命令**:`sleep` 命令可让测试套件在执行下一个命令前暂停指定秒数。例如,`--real_sleep 3.5` 会暂停3.5秒。不过,通过插入 `sleep` 来解决服务器代码中的计时问题并非良策,像测试多连接查询时使用 `sleep` 可能在不同机器上效果不同。
5. **查看命令元数据**:使用 `--enable_metadata` 命令可查看命令的额外信息,有助于调试复杂测试。
6. **控制输出记录**:使用 `--disable_result_log` 关闭输出记录,`--enable_result_log` 重新开启。
7. **忽略可变数据**:若命令结果包含可能随运行变化的数据(如日期或时间字段),可使用 `--replace_column column string` 命令。例如,`--replace_column 2 CURTIME` 会将下一个命令输出的第二列替换为 “CURTIME”。
8. **包含额外测试命令**:使用 `--source include/filetoinclude.inc` 可从 `mysql-test/include` 目录包含文件。
#### 报告Bug
在测试中发现Bug时,向相关方报告前需彻底确认。具体步骤如下:
1. 单独运行测试,找出导致失败的准确命令和错误代码。
2. 通过在全新安装或已知正常的安装上运行测试,判断错误是否由环境引起。可参考MySQL参考手册中的 “操作系统特定说明” 了解潜在问题。
3. 手动运行测试中的命令,确认错误和错误代码,有时手动运行能揭示更多信息。
4. 若可能,以调试模式运行服务器。
5. 若测试和错误条件可重复,提交Bug报告时应包含测试文件、测试结果、测试拒绝文件和任何测试数据。
#### MySQL基准测试
MySQL提供了基准测试套件,它由Perl模块和脚本组成,用于测试系统性能并保存性能指标。该套件多数二进制和源代码发行版都有,可在Windows上运行,但需安装 `dbi` 和 `DBD::mysql` 模块,可从 [MySQL下载页面](http://dev.mysql.com/downloads/dbi.html) 下载。
##### 基准测试套件特点
- **多系统测试**:能对MySQL、Oracle、Microsoft SQL Server等不同系统运行相同基准测试,使用 `--server = 'server'` 命令行开关指定目标服务器,参数值包括 `MySQL`、`Oracle`、`Informix` 和 `MS-SQL`。
- **命令行参数控制**:有许多命令行参数控制基准测试套件,常见参数如下表:
| 命令行参数 | 解释 |
| --- | --- |
| `--log` | 将基准测试结果保存到文件,需与 `--dir` 选项配合指定保存目录,结果文件名使用Unix命令 `uname –a` 的输出。 |
| `--user` | 指定登录服务器的用户。 |
| `--password` | 指定登录服务器的用户密码。 |
| `--host` | 指定服务器的主机名。 |
| `--small-test` | 指定运行最小基准测试,省略该参数将执行整个基准测试套件。多数情况下,小测试足以确定常见性能指标。 |
##### 基准测试运行方式
- **运行全部测试**:导航到安装目录下的 `sql-bench` 目录,运行 `run-all-tests` 命令。需注意,所有测试是串行运行的。
- **运行部分测试**:若只需基本基准测试集,可运行 `run-all-tests --small-test` 命令。若想测试系统特定部分,可独立运行单个测试,如测试连接服务器速度可运行 `test-connect` 命令。部分独立测试如下表:
| 测试 | 描述 |
| --- | --- |
| `test-ATIS.sh` | 创建多个表并进行若干查询。 |
| `test-connect.sh` | 测试与服务器的连接速度。 |
| `test-create.sh` | 测试创建表的速度。 |
| `test-insert.sh` | 测试表的创建和填充操作。 |
| `test-wisconsin.sh` | 运行该基准测试的PostgreSQL版本移植。 |
##### 示例:运行小测试
以下是运行小测试的输出示例:
```plaintext
$ ./run-all-tests --small-test --password = XXX --user = root
Benchmark DBD suite: 2.15
Date of test: 2012-06-20 10:39:38
Running tests on: Linux 2.6.38-15-generic x86_64
Arguments: --small-test
Comments:
Limits from:
Server version: MySQL 5.1.63 0ubuntu0.11.04.1
Optimization: None
Hardware:
alter-table: Total time: 1 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.03 CPU)
ATIS: Total time: 2 wallclock secs ( 0.75 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.98 CPU)
big-tables: Total time: 0 wallclock secs ( 0.06 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.07 CPU)
connect: Total time: 1 wallclock secs ( 0.39 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.53 CPU)
create: Total time: 1 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.03 CPU)
insert: Total time: 3 wallclock secs ( 1.22 usr 0.24 sys + 0.00 cusr 0.00 csys = 1.46 CPU)
select: Total time: 3 wallclock secs ( 1.27 usr 0.21 sys + 0.00 cusr 0.00 csys = 1.48 CPU)
transactions: Test skipped because the database doesn't support transactions
wisconsin: Total time: 4 wallclock secs ( 1.40 usr 0.49 sys + 0.00 cusr 0.00 csys = 1.89 CPU)
All 9 test executed successfully
```
测试结果还会给出每个操作的具体数据,如下表:
| 操作 | 秒数 | 用户时间 | 系统时间 | CPU时间 | 测试次数 |
| --- | --- | --- | --- | --- | --- |
| `alter_table_add` | 1.00 | 0.01 | 0.00 | 0.01 | 92 |
| `alter_table_drop` | 0.00 | 0.00 | 0.01 | 0.01 | 46 |
| `connect` | 0.00 | 0.04 | 0.01 | 0.05 | 100 |
| `connect + select_1_row` | 0.00 | 0.05 | 0.00 | 0.05 | 100 |
| `connect + select_simple` | 0.00 | 0.03 | 0.02 | 0.05 | 100 |
| ... | ... | ... | ... | ... | ... |
建议将这些数据转换为电子表格进行统计分析,同时创建并存档自己的数据库服务器基准测试。
##### 运行单个测试
若想运行创建表的基准测试,可导航到 `sql-bench` 目录,运行 `perl test-create` 命令。以下是运行该命令的输出示例:
```plaintext
$ ./test-create --user = root --password = XXXX
Testing server 'MySQL 5.1.63 0ubuntu0.11.04.1' at 2012-06-20 10:40:59
Testing the speed of creatin
```
0
0
复制全文
相关推荐










