跳到主要内容

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_selectread_writeread_onlyinsertupdatewrite_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。

  1. 安装需要的依赖。

    sudo yum -y install make automake libtool pkgconfig libaio-devel mariadb-devel openssl-devel
  2. 下载 Sysbench。

    详细信息参考 Sysbench 下载地址

  3. 解压 Sysbench。

    unzip sysbench-master.zip
  4. 编译 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-mysqlSysbench 默认支持 MySQL
  5. 运行以下命令,验证 Sysbench 是否安装成功:

    [admin@localhost sysbench-master] $ sysbench --version

    如果返回以下信息,则 Sysbench 安装成功。

    sysbench 1.1.0

步骤四:执行 Sysbench 测试

按照以下步骤进行 Sysbench 测试:

  1. 初始化测试数据。

    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
  2. 预热。

    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
  3. 执行性能测试。

    #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访问数据时使用的随机生成函数。取值可以为 specialuniformgaussianpareto。 默认值为 special,早期值为 uniform
--skip_trx=on在只读测试中打开或关闭事务。默认打开。
--percentile=N打印百分位 rt,默认值为 95
oltp_write_only在 Sysbench 的 lua 目录下,自带有针对不同场景的测试用例,比如 insert 和 point_select 等。

说明

测试结果可参考 seekdb Sysbench 性能测试报告