12 KiB
OceanBase 数据库 Sysbench 测试
本文介绍如何使用 Sysbench 测试对 OceanBase 数据库的 OLTP 性能进行测试。
什么是 Sysbench
Sysbench 是一个基于 LuaJIT 的可编写脚本的多线程基准测试工具,可以执行 CPU/内存/线程/IO/数据库等方面的性能测试,常用于评估测试各种不同系统参数下的数据库负载情况,不需要修改源码,通过自定义lua脚本就可以实现不同业务类型的测试。Sysbench 主要包括以下几种测试:
-
CPU 性能
-
磁盘 IO 性能
-
调度程序性能
-
内存分配及传输速度
-
POSIX 线程性能
-
数据库性能(OLTP 基准测试)
环境准备
-
JDK:建议使用 1.8u131 及以上版本
-
make:yum install make
-
automake:yum install automake
-
autoconf:yum install autoconf
-
libtool:yum install libtool
-
gcc:yum install gcc
-
mariadb-devel:yum install mariadb-devel mariadb
-
JDBC:建议使用mysql-connector-java-5.1.47版本
-
Sysbench:建议使用 1.0 及以上版本
-
OBClient :详细信息,参考 OBClient 文档。
-
OceanBase 数据库:建议单独部署 ODP。详细信息,参考 使用 OBD 部署 OceanBase 数据库。
测试方案
-
通过 OBD 部署 oceanbase集群,ODP 和 Sysbench 单独部署在一台机器上, 作为客户端的压力机器。OceanBase 集群规模为1:1:1,部署成功后先新建跑Sysbench测试的租户及用户(sys租户是管理集群的内置系统租户,请勿直接使用sys租户进行测试),设置租户的primary_zone为RANDOM,RANDOM表示新建表分区的leader随机到这3台机器。租户详情,参考 创建用户租户。
-
通过 Sysbench 导入 30 张表,每张表有 100 万行数据。
-
启动 Sysbench 客户端,进行
point_select、read_write、read_only和write_only测试。 -
每轮测试
--time设置为 60s,线程数取值可以为32/64/128/256/512/1024等。
测试规格
--mysql-db=test
--table_size=1000000
--tables=30
--threads=32/64/128/256/512/1024
--report-interval=10
--time=60
--db-ps-mode=disable
安装 Sysbench
按照以下步骤安装 Sysbench。
-
下载 Sysbench。
详细信息参考 Sysbench 下载地址。
-
解压 Sysbench。
unzip ./1.0.20.zip -
编译 Sysbench。
进入 Sysbench 解压后的目录,运行以下命令编译 Sysbench:
[wieck@localhost ~] $ cd sysbench-1.0.20 [wieck@localhost sysbench-1.0.20] $./autogen.sh [wieck@localhost sysbench-1.0.20] $./configure --prefix=/usr/sysbench/ --with-mysql-includes=/usr/include/mysql/ --with-mysql-libs=/usr/lib64/mysql/ --with-mysql [wieck@localhost sysbench-1.0.20] $make [wieck@localhost sysbench-1.0.20] $make install参数说明:
参数名 说明 --prefix 指定 Sysbench 的安装目录。 --with-mysql-includes 指定mysql的 includes 目录。 --with-mysql-libs 指定mysql的 lib 目录。 --with-mysql Sysbench 默认支持 MySQL -
运行以下命令,验证 Sysbench 是否安装成功:
[wieck@localhost sysbench-1.0.20] $./src/sysbench --help如果返回以下信息,则 Sysbench 安装成功。
Usage: sysbench [options]... [testname] [command] Commands implemented by most tests: prepare run cleanup help
环境调优
在执行 Sysbench 测试前,您需要对 OceanBase 数据库进行简单的设置,以发挥其最大性能。
-
Observer调优(sys租户登录设置)
在系统租户下执行
obclient -h$host_ip -P$host_port -uroot@sys -A命令。alter system set enable_auto_leader_switch=false; alter system set enable_one_phase_commit=false; alter system set weak_read_version_refresh_interval='5s'; alter system set system_memory ='30G';--可根据实际环境动态调整 ##调整日志级别及保存个数 alter system set syslog_level='PERF'; alter system set max_syslog_file_count=100; alter system set enable_syslog_recycle='True'; alter system set trace_log_slow_query_watermark='10s'; alter system set large_query_threshold='1s'; alter system set clog_sync_time_warn_threshold='2000ms'; alter system set syslog_io_bandwidth_limit='10M'; alter system set enable_sql_audit=false; alter system set enable_perf_event=false; alter system set clog_max_unconfirmed_log_count=5000; alter system set memory_chunk_cache_size ='16G'; alter system set autoinc_cache_refresh_interval='86400s'; ##cpu_quota_concurrency*租户cpu=工作线程数,具体的数值需要根据业务模型和机器配置调整 alter system set cpu_quota_concurrency=2; alter system set enable_early_lock_release=false tenant=all; alter system set default_compress_func = 'lz4_1.0'; -
ODP 调优(sys租户登录设置)
在系统租户下执行
obclient -h$host_ip -P$host_port -uroot@sys -A命令。alter proxyconfig set enable_compression_protocol=false; --关闭压缩,降低cpu% alter proxyconfig set proxy_mem_limited='16G'; --防止oom,可根据实际环境动态调整 alter proxyconfig set enable_prometheus=false; alter proxyconfig set enable_metadb_used=false; alter proxyconfig set enable_standby=false; alter proxyconfig set enable_strict_stat_time=false; alter proxyconfig set use_local_dbconfig=true; -
设置租户(进行测试的用户登录设置)
在测试用户下执行
obclient -h$host_ip -P$host_port -u$user@$tenant -p$password -A命令。##把日志聚合,减小网络开销,提高并发读 alter system set _clog_aggregation_buffer_amount=4;--需要在建表前配置 alter system set _flush_clog_aggregation_buffer_timeout='1ms'; ##数据库下租户设置,防止事务超时 set global ob_timestamp_service='GTS'; set global autocommit=ON; set global ob_query_timeout=36000000000; set global ob_trx_timeout=36000000000; set global max_allowed_packet=67108864; set global ob_sql_work_area_percentage=100; /* parallel_max_servers推荐设置为测试租户分配的resource unit cpu数的10倍 如测试租户使用的unit配置为:create resource unit $unit_name max_cpu 26 那么该值设置为260 parallel_server_target推荐设置为parallel_max_servers * 机器数*0.8 那么该值为260*3*0.8=624 */ set global parallel_max_servers=260; set global parallel_servers_target=624;
操作步骤
按照以下步骤进行 Sysbench 测试:
-
运行以下命令,初始化数据库:
/usr/bin/sysbench oltp_read_write.lua --mysql-host=x.x.x.x --mysql-port=xxxx --mysql-db=test --mysql-user=$user@$tenant --mysql-password=xxx --table_size=1000000 --tables=30 --threads=150 --report-interval=10 --time=60 cleanup -
运行以下命令,新建表:
/usr/bin/sysbench oltp_read_write.lua --mysql-host=x.x.x.x --mysql-port=xxxx --mysql-db=test --mysql-user=$user@$tenant --mysql-password=test --table_size=1000000 --tables=30 --threads=150 --report-interval=10 --time=60 prepare -
运行以下命令,执行测试:
/usr/bin/sysbench oltp_read_write.lua --mysql-host=x.x.x.x --mysql-port=xxxx --mysql-db=test --mysql-user=$user@$tenant --mysql-password=xxx --table_size=1000000 --tables=30 --threads=150 --report-interval=10 --time=60 --db-ps-mode=disable run参数说明:
参数名 说明 --mysql-host 运行 OceanBase 数据库机器的 IP。如果有 ODP 建议使用 ODP 的 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 等。
FAQ
-
安装 Sysbench 失败。报错信息如下:
automake 1.10.x (aclocal) wasn't found, exiting操作系统没有安装 Automake。运行以下命令安装 Automake:
yum install automake.noarch -
安装 Sysbench 失败。报错信息如下:
libtoolize 1.4+ wasn't found, exiting操作系统没有安装 Libtool。运行以下命令安装 Libtool:
yum install libtool -
安装 Sysbench 失败。报错信息如下:
drv_mysql.c:35:19: fatal error: mysql.h: No such file or directory操作系统没有安装 MySQL 的 lib 库。运行以下命令安装:
yum install mysql-community-devel.x86_64 -
安装 Sysbench 失败。报错信息如下:
cannot find MySQL client libraries in /usr/lib/mysql/执行以下命令查找 MySQL 的 lib 库。可能位于
/usr/lib64/mysql。find /usr -name mysql -
在 Sysbench 和 OceanBase 数据库 配置均合理的情况下,性能还是很差。
-
Sysbench 是对 CPU/内存/网络非常敏感的测试。如果客户端和目标测试数据库不在一个局域网中, 网络延迟可能会影响 Sysbench 性能。
-
与 OceanBase 数据库集群使用了 ODP 有关,可以先对单个 OceanBase 数据库进程进行高并发压力测试,将结果和使用 ODP 的场景对比。
-
建议将 ODP 和 Sysbench 单独部署在同一台机器上, 通过ODP进行Sysbench测试。
-
-
在高并发压力下,为什么系统的 CPU 利用率依然很低?
虽然整体 CPU 偏低,但是部分模块的 CPU 可能达到很高的利用率。