一次oceanbase数据库Sysbench性能测试实践

2024年 7月 20日 91.6k 0

测试方案

- 此为实验场景,所有机器都为虚拟机

- OceanBase 集群部署规模为 1:1:1。部署成功后,新建执行 Sysbench 测试的租户及用户(sys 租户是管理集群的内置系统租户,请勿直接使用该租户进行测试),将租户的 PRIMARY_ZONE 设置为 RANDOM。

- 启动 Sysbench 客户端,进行 point_select、read_write、read_only 等测试。

- 每轮测试 --time 设置为 30s,线程数取值可以为 1000。

测试规格如下所示:

--mysql-db=test 
--mysql-host=$obproxy_ip(填写 OBProxy 的 IP)
--table_size=1000000 
--tables=30 
--threads=10000
--report-interval=3
--time=30
--db-ps-mode=disable

测试环境

硬件配置

项目类型 内存 CPU
OceanBase 数据库 3 台 * 132G 3 台 * 32 核
Sysbench(复用OCP) 1 台 * 132G 1 台 * 32 核
ODP(复用OBServer) 1 台 * 132G 1 台 * 32 核

租户规格

- 租户规格

说明

- 您需根据自身数据库的硬件配置进行动态调整。

- 进行性能测试时,租户需配置最大可用资源

CREATE RESOURCE UNIT box1 MAX_CPU 25, MAX_MEMORY '109G', MAX_IOPS 128, MAX_DISK_SIZE '10G', MAX_SESSION_NUM 64, MIN_CPU=25, MIN_MEMORY='109G', MIN_IOPS=128;
CREATE RESOURCE POOL fpool UNIT='box1', UNIT_NUM=1, ZONE_LIST=('z1','z2','z3');
CREATE TENANT tt1 RESOURCE_POOL_LIST=('fpool'), PRIMARY_ZONE='RANDOM' SET ob_compatibility_mode='mysql',ob_tcp_invited_nodes='%';

软件版本

项目类型 软件版本及型号
OceanBase 数据库 V3.2.4
ODP V3.2.9
Sysbench 1.0.20
OS CentOS Linux release 7.6.1810 (Core)
CPU Intel(R) Xeon(R) Gold 5320 CPU @ 2.20GHz

环境信息

操作系统信息
 $cat /etc/redhat-release
 $uname -a
CPU信息
cat /proc/cpuinfo
内存信息
free -g
软件信息
 #observer
 cd /home/admin/oceanbase/bin
 ./observer --version
 
 #obproxy
 cd /home/admin/oceanbase/obproxy/bin
 ./obproxy --version
 
 #sysbench
 cd /usr/sysbench/bin/
 ./sysbench --version

测试内容

创建测试租户

查看可用资源
select a.zone,concat(a.svr_ip,':',a.svr_port) observer,
cpu_total,(cpu_total-cpu_max_assigned) cpu_free,
floor(mem_total/1024/1024/1024) as mem_total_gb,floor((mem_total-mem_max_assigned)/1024/1024/1024) mem_free_gb,
floor(disk_total/1024/1024/1024) as disk_total_gb,floor((disk_total-disk_assigned)/1024/1024/1024) disk_free_gb
from __all_virtual_server_stat a
order by a.zone,a.svr_ip;
创建测试租户
CREATE RESOURCE UNIT box1 MAX_CPU 25, MAX_MEMORY '109G', MAX_IOPS 128, MAX_DISK_SIZE '10G', MAX_SESSION_NUM 64, MIN_CPU=25, MIN_MEMORY='109G', MIN_IOPS=128;
CREATE RESOURCE POOL fpool UNIT='box1', UNIT_NUM=1, ZONE_LIST=('z1','z2','z3');
CREATE TENANT tt1 RESOURCE_POOL_LIST=('fpool'), PRIMARY_ZONE='RANDOM' SET ob_compatibility_mode='mysql',ob_tcp_invited_nodes='%';

配置参数

OBServer启动参数
启动参数设置完成后,需要重启
ALTER SYSTEM SET net_thread_count=12;
ALTER SYSTEM SET use_large_pages="true";
ALTER SYSTEM SET system_cpu_quota=10;
ALTER SYSTEM SET syslog_io_bandwidth_limit='20M';
ALTER SYSTEM SET major_freeze_duty_time='disable';
ALTER SYSTEM SET memstore_limit_percentage=50;
ALTER SYSTEM SET merger_warm_up_duration_time='0s';
ALTER SYSTEM SET zone_merge_concurrency=0;
ALTER SYSTEM SET schema_history_expire_time='1d';
ALTER SYSTEM SET minor_freeze_times=3;
ALTER SYSTEM SET enable_syslog_wf=false;
OBProxy启动参数
启动参数设置完成后,需要重启
ALTER PROXYCONFIG SET enable_strict_kernel_release=false;
ALTER PROXYCONFIG SET work_thread_num=128;
ALTER PROXYCONFIG SET automatic_match_work_thread=false;
ALTER PROXYCONFIG SET enable_prometheus=false;
ALTER PROXYCONFIG SET enable_compression_protocol=false;
ALTER PROXYCONFIG SET proxy_mem_limited=4g;
ALTER PROXYCONFIG SET enable_qos=true;
集群参数
ALTER SYSTEM SET enable_sql_audit=false;
ALTER SYSTEM SET cpu_quota_concurrency=4;
ALTER SYSTEM SET server_data_copy_out_concurrency=1000;
ALTER SYSTEM SET server_data_copy_in_concurrency=1000;
ALTER SYSTEM SET memory_chunk_cache_size='16G';
ALTER SYSTEM SET minor_freeze_times=200;
ALTER SYSTEM SET clog_transport_compress_all=false;
ALTER SYSTEM SET trx_try_wait_lock_timeout='0ms';
ALTER SYSTEM SET large_query_threshold='1s';
ALTER SYSTEM SET trace_log_slow_query_watermark='500ms';
ALTER SYSTEM SET syslog_io_bandwidth_limit='30m';
ALTER SYSTEM SET enable_async_syslog=true;
ALTER SYSTEM SET merger_warm_up_duration_time='0';
ALTER SYSTEM SET merger_switch_leader_duration_time='0';
ALTER SYSTEM SET large_query_worker_percentage=10;
ALTER SYSTEM SET minor_compact_trigger= 2;
ALTER SYSTEM SET builtin_db_data_verify_cycle=0;
ALTER SYSTEM SET micro_block_merge_verify_level=0;
ALTER SYSTEM SET freeze_trigger_percentage=50;
ALTER SYSTEM SET sys_bkgd_io_low_percentage=70;
ALTER SYSTEM SET _mini_merge_concurrency=5;
ALTER SYSTEM SET weak_read_version_refresh_interval=0;
ALTER SYSTEM SET _ob_enable_prepared_statement=true;
ALTER SYSTEM SET _clog_aggregation_buffer_amount=4 tenant=all;
ALTER SYSTEM SET enable_early_lock_release=false tenant=all;
ALTER SYSTEM SET enable_perf_event=false;
ALTER SYSTEM SET enable_auto_leader_switch=false;
ALTER SYSTEM SET weak_read_version_refresh_interval='5s';
OBProxy 参数
ALTER PROXYCONFIG SET enable_ob_protocol_v2=false;
ALTER PROXYCONFIG SET proxy_mem_limited='10G';
ALTER PROXYCONFIG SET enable_qos=false;
ALTER PROXYCONFIG SET slow_proxy_process_time_threshold='500ms';
租户配置
ALTER SYSTEM SET _clog_aggregation_buffer_amount=4;
ALTER SYSTEM SET _flush_clog_aggregation_buffer_timeout='1ms';
ALTER SYSTEM SET weak_read_version_refresh_interval='5s';
ALTER SYSTEM SET enable_monotonic_weak_read=false;
SET GLOBAL binlog_row_image='MINIMAL';
Kernal 配置
sudo sysctl kernel.sched_migration_cost_ns=0

测试过程

注意:

lua脚本默认路径:/usr/sysbench/share/sysbench/

在实测时:--warmup-time=5这个参数不可用,这个参数时预热时间,本次省略

1.初始化环境。

sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=10000000 --warmup-time=5 ./oltp_read_write.lua cleanup

2.导入 30 张表,每张表包含 1000 w 数据。

sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=10000000  --threads=20 ./oltp_read_write.lua prepare

3.预热 10 s。

sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=10000000  --threads=1000 --time=10 ./oltp_point_select.lua run 

4.执行每一个 case 执行 30 s,避免执行过程中发生转储。

sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=1000000  --threads=1000 ./oltp_point_select.lua run
sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=1000000  --threads=1000 ./oltp_read_only.lua run
sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=1000000  --threads=1000 --rand-type=uniform  ./oltp_read_write.lua run
sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=1000000  --threads=1000 ./oltp_insert.lua run
sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=1000000  --threads=1000 ./oltp_update_non_index.lua run
sysbench --mysql-host=127.0.0.1 --mysql-port=2828 --mysql-user=root@tt1 --mysql-db=test --report-interval=3 --time=30 --threads=1000 --db-ps-mode=disable --percentile=99 --auto_inc=on --tables=30 --mysql-ignore-errors=1062 --table_size=1000000  --threads=1000 ./oltp_write_only.lua run

测试结果

分布式场景 ( primary zone = 'RANDOM' ),这里只举一例(read_write),用来说明各统计信息的含义。

SQL statistics:
    queries performed:
        read:          1173858   # 执行的读操作数量
        write:         335388   # 执行的写操作数量
        other:         167694    # 执行的其它操作数量
        total:         1676940
    transactions:      83847   (2766.99 per sec.)    # 执行事务的平均速率
    queries:           1676940  (55339.80 per sec.)   # 平均每秒能执行多少次查询
    ignored errors:    0      (0.00 per sec.)
    reconnects:        0      (0.00 per sec.)

General statistics:
    total time:                  30.3008s     # 总消耗时间
    total number of events:      83847         # 总请求数量(读、写、其它)

Latency (ms):
         min:                            134.14
         avg:                           359.09
         max:                          822.37
         99th percentile:              623.33    # 采样计算的平均延迟
         sum:                        30108634.12

Threads fairness:
    events (avg/stddev):           83.8470/0.39
    execution time (avg/stddev):   30.1086/0.07

测试结果统计表:

项目 read write insert write only read only point select update_non_index update_index
qps 55339.80 14728.48 72092.68 66955.33 143621.07 15545.55 15819.75
Latency(ms)avg 359.09 67.48 82.73 237.84 7.37 64.02 62.90
Latency(ms)(99th percentile) 623.33 101.13 125.52 287.38 11.04 102.97 82.96

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论