---
title: 如何使用 mysqlslap 在 OceanBase 数据库中模拟客户端高并发或快速构造测试数据 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于如何使用 mysqlslap 在 OceanBase 数据库中模拟客户端高并发或快速构造测试数据 相关的常见问题和使用技巧，帮助您快速解决如何使用 mysqlslap 在 OceanBase 数据库中模拟客户端高并发或快速构造测试数据 的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 如何使用 mysqlslap 在 OceanBase 数据库中模拟客户端高并发或快速构造测试数据

更新时间：2024-01-22 01:56

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：How-to  

mysqlslap 是 MySQL 原生的基准压力测试工具，可以模拟多个客户端同时并发的向服务器发出查询。本文主要介绍在 OceanBase 数据库中使用 mysqlslap 模拟客户端高并发或快速构造测试数据的方法。

## 适用场景

测试定位问题的时候，有个别场景需要快速在某张表灌入一定数量的测试数据，或者在特定场景中需要模拟大批量的并发连接执行 SQL 的需求。

本文适用于 OceanBase 数据库的 MySQL 模式中的以下场景。

- 基础简单压力测试。
 - 快速在测试表中导入执行目标指定 SQL，以构造测试数据。
 - 模拟特定 SQL 语句（SELECT、UPDATE）高并发，辅助定位 SQL，复现高并发场景的 bug。
 - 并发调用存储过程脚本测试。

## mysqlslap 介绍

mysqlslap 工具的使用方式可以在命令行中使用 `--help` 参数查看。

```unknow
mysqlslap --help
Usage: mysqlslap [OPTIONS]
--concurrency　　　　  并发数量，多个可以用逗号隔开。
--iterations 　　　　  重复运行次数
--number-of-queries 　 总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算
--debug-info 　　　　　 额外输出CPU以及内存的相关信息
--create-schema 　　　 测试的database
--query 　　　　　　　  脚本执行测试（可以在单引号中设置要执行的 SQL 语句或者 SQL 脚本路径）
--only-print 　　　　　 只打印不执行SQL

```

## 构造测试数据

使用 mysqlslap 快速构造测试数据的方法如下。

1. 创建测试数据表，本文以 `t1` 为例。

   ```unknow
   obclient> CREATE TABLE t1(id int auto_increment PRIMARY KEY,name VARCHAR(30),u_num INT ,comment VARCHAR(200));

   ```

   #### 说明

   如果创建数据库时未指定参数 `--create-schema`，mysqlslap 会自动创建数据库名称为 `mysqlslap` 的数据库。
 2. 创建测试 SQL 脚本。

   ```unknow
   [root@hostname /]# cd mysqlclap
   [root@hostname mysqlclap]# vim /tmp/query.sql

   insert into  t1(name,u_num,comment) values('Abed',30,'abcd');
   insert into  t1(name,u_num,comment) values('Jim',40,'abcd');

   ```
 3. 执行 mysqlslap 并发命令。

   本例中，SQL 脚本中有 2 条 INSERT 语句。其中，`--concurrency=100` 参数表示执行一次 100 个并发，`--iterations=1` 表示迭代执行一次。

   ```unknow
   [root@hostname mysqlclap]# mysqlslap -h[IP] -P[端口]-u[用户信息] -p['密码'] --concurrency=100 --iterations=1 --query=/tmp/query.sql

   ```
 4. 登录数据库查看执行结果。

   可以看到 t1 表中包含了将试脚本执行 100 次后的 200 行数据。

   ```unknow
   obclient> SELECT count(*) FROM t1;
   +----------+
   | count(*) |
   +----------+
   |      200 |
   +----------+
   1 row in set (0.01 sec)

   ```

## 模拟客户端高并发

使用 mysqlslap 模拟客户端高并发的方法如下。

1. 使用 select sleep(n) 发起 n 个并发。

   本例以 n=10 为例，发起 10 个并发查询。

   ```unknow
   [root@hostname mysqlclap]# mysqlslap -h[IP] -P[端口]-u[用户信息] -p['密码']  --concurrency=10 --query='select sleep(30)'

   ```

   #### 说明

   OceanBase 数据库会话的默认超时时间为 10s，注意保证 SQL 执行时间在超时时间内，或者调整超时时间变量进行测试。
 2. 登录数据库查看实时会话。

   可以看到正在并行执行的会话。

   ```unknow
   obclient> SELECT * FROM information_schema.processlist WHERE  user='root' AND COMMAND='Query' AND time<>0;

   ```

上一篇

[OceanBase 数据库日志中的 [lt=xxx] 和 [dc=xxx] 的含义是什么？](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000210149)

下一篇

[如何配置集群的 CPU 并发数](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000010172) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
