seekdb Sysbench 测试
本文介绍如何使用 Sysbench 工具对 seekdb 进行性能测试。
什 么是 Sysbench
Sysbench 是一个基于 LuaJIT 的多线程基准测试工具,支持通过编写脚本自定义测试逻辑。它能对 CPU、内存、线程、磁盘 I/O 及数据库等核心组件进行性能测试,常用于评估不同系统参数对数据库负载的影响。该工具无需修改源码,仅需自定义 Lua 脚本即可模拟多样化业务场景的测试需求。Sysbench 的测试类型包括:CPU 性能、磁盘 I/O 性能、线程调度性能、内存分配与访问速度、POSIX 线程性能及数据库性能。本次将重点针对数据库性能进行测试。
环境准备
测试前请按照如下要求进行测试环境准备:
-
Sysbench:建议使用 1.1 及以上版本。
-
seekdb:使用服务器模式 seekdb,详细部署操作请参考 通过 yum install 部署 seekdb。
-
部署的 seekdb 所对应的日志盘、clog 盘、data 盘分三块盘,性能级别 PL1,即在启动 seekdb 时,需在
/etc/oceanbase/seekdb.cnf下设置以下参数:port=2881
base-dir=/data/1/seekdb
data-dir=/data/2/seekdb
redo-dir=/data/3/seekdb提示若测试的 seekdb 规格为 1C2G 时,需要设置参数
memory_limit=2G。
测试方案
-
本次测试需使用到 2 台机器,Sysbench 部署在一台机器上。seekdb 部署在另一台机器上,seekdb 的规格为 4C8G 或者 1C2G,其日志盘、clog 盘、data 盘分三块盘,性能级别 PL1。
-
通过 Sysbench 导入 30 张表,每张表有 1 万行数据。
-
启动 Sysbench 客户端,进行
point_select、read_write、read_only、insert、update和write_only测试。 -
每轮测试
--time设置为 10s,线程数取值可以为10/50/100/200/400等。
使用 Sysbench 工具执行 Sysbench 测试
步骤一:进行环境调优
开始测试前,先要进行 seekdb 调优。请登录 seekdb 并执行以下语句配置相关参数。
alter system SET syslog_level='PERF';
alter system set _lcl_op_interval = '0ms';
call DBMS_MONITOR.OB_TENANT_TRACE_DISABLE(TENANT_NAME => 'sys');
alter system set default_auto_increment_mode = 'noorder';
alter system set _enable_adaptive_compaction = false;
alter system set _enable_defensive_check = false;
参数说明:
syslog_level:设置日志的打印级别。_lcl_op_interval:用于控制 LCL(Lock Chain Length)死锁检测算法中节点间消息推送的间隔时间,此处设置为 0ms,表示关闭 LCL 死锁检测功能。default_auto_increment_mode:设置默认的自增列自增模式。_enable_adaptive_compaction:用于控制自适应合并。此处设置为 false,表示关闭自适应合并。_enable_defensive_check:禁用 4377 校验。DBMS_MONITOR.OB_TENANT_TRACE_DISABLE:禁用全链路追踪功能。
步骤二:安装 Sysbench
按照以下步骤安装 Sysbench。
-
安装需要的依赖。
sudo yum -y install make automake libtool pkgconfig libaio-devel mariadb-devel openssl-devel -
下载 Sysbench。
详细信息参考 Sysbench 下载地址。
-
解压 Sysbench。
unzip sysbench-master.zip -
编译 Sysbench。
进入 Sysbench 解压后的目录,运行以下命令编译 Sysbench:
[admin@localhost ~] $ cd sysbench-master
[admin@localhost sysbench-master] $ ./autogen.sh
[admin@localhost sysbench-master] $ ./configure --prefix=/usr/local/sysbench --with-mysql --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql
[admin@localhost sysbench-master] $ sudo make && sudo make install
[admin@localhost sysbench-master] $ sudo ln -s /usr/local/sysbench/bin/* /usr/bin/参数说明:
参数名 说明 --prefix 指定 Sysbench 的安装目录。 --with-mysql-includes 指定 MySQL 的 includes 目录。 --with-mysql-libs 指定 MySQL 的 lib 目录。 --with-mysql Sysbench 默认支持 MySQL -
运行以下命令,验证 Sysbench 是否安装成功:
[admin@localhost sysbench-master] $ sysbench --version如果返回以下信息,则 Sysbench 安装成功。
sysbench 1.1.0
步骤四:执行 Sysbench 测试
按照以下步骤进行 Sysbench 测试:
-
初始化测试数据。
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --time=20 --threads=10 oltp_read_write.lua prepare -
预热。
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --time=10 oltp_point_select.lua run
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --time=10 oltp_read_only.lua run -
执行性能测试。
#point_select
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --warmup-time=2 --time=10 oltp_point_select.lua run
#read_only
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --warmup-time=2 --time=10 oltp_read_only.lua run
#read_write
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --warmup-time=2 --time=10 --rand-seed=24433 --rand-type=uniform oltp_read_write.lua run
#insert
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --warmup-time=2 --time=10 --rand-type=uniform --rand-seed=12104 oltp_insert.lua run
#update_non_index
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --warmup-time=2 --time=10 --rand-type=uniform --rand-seed=10515 oltp_update_non_index.lua run
#write_only
sysbench --mysql-host=xxx.xxx.xxx.xxx --mysql-port=2881 --mysql-user=root --mysql-db=test --report-interval=1 --threads=400 --db-ps-mode=disable --percentile=99 --tables=30 --mysql-ignore-errors=1062 --table_size=10000 --auto_inc=on --warmup-time=2 --time=10 --rand-seed=11972 --rand-type=uniform oltp_write_only.lua run
参数说明
| 参数名 | 说明 |
|---|---|
| --mysql-host | 运行 seekdb 机器的 IP。 |
| --mysql-port | 端口号。 |
| --mysql-db | 待连接的数据库。 |
| --mysql-user | 用户名。 |
| --mysql-password | 密码。 |
| --table_size | 每张表初始化的数据数量。 |
| --tables | 初始化表的数量。 |
| --threads | 启动的线程数量。 |
| --time | 运行时间。设置为 0 时表示不限制时间。 |
| --report-interval | 运行期 间日志,单位为秒。 |
| --events | 最大请求数量,定义数量后可以不需要 --time 选项。 |
| --rand-type | 访问数据时使用的随机生成函数。取值可以为 special、uniform、gaussian 或 pareto。 默认值为 special,早期值为 uniform。 |
| --skip_trx=on | 在只读测试中打开或关闭事务。默认打开。 |
| --percentile=N | 打印百分位 rt,默认值为 95。 |
| oltp_write_only | 在 Sysbench 的 lua 目录下,自带有针对不同场景的测试用例,比如 insert 和 point_select 等。 |
说明
测试结果可参考 seekdb Sysbench 性能测试报告。