基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
BenchMarkSQL
更新时间:2023-07-19 13:03:07
BenchMarkSQL 简介
BenchMarkSQL 是基于 TPC-C 标准的一种 JAVA 实现工具。TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使用一个商品销售模型对 OLTP 系统进行测试。详细信息,参考 TPC-C 简介。
测试方案
OceanBase 集群部署规模为 1:1:1。部署成功后,新建执行 TPC-C 测试的租户及用户(
sys租户是管理集群的内置系统租户,请勿直接使用该租户进行测试),将租户的PRIMARY_ZONE设置为RANDOM。测试规格如下所示:
warehouses=1000 loadWorkers=40 terminals=800 runMins=5 newOrderWeight=45 paymentWeight=43 orderStatusWeight=4 deliveryWeight=4 stockLevelWeight=4
测试环境
硬件配置
项目类型 内存 CPU OceanBase 数据库 3 台 * 128 G 3 台 * 32 核 BenchMarkSQL 1 台 * 128 G 1 台 * 32 核 ODP 1 台 * 128 G 1 台 * 32 核 租户规格
CREATE RESOURCE UNIT if not exists fu_xymysql MAX_CPU 80, MAX_MEMORY 500000000000, MAX_IOPS 128, MAX_DISK_SIZE 1000000000, MAX_SESSION_NUM 64, MIN_CPU=80, MIN_MEMORY=500000000000, MIN_IOPS=128; CREATE RESOURCE POOL if not exists f_pool_xymysql UNIT= 'fu_xymysql', UNIT_NUM=1, ZONE_LIST= ('z1','z2','z3'); CREATE TENANT xymysql RESOURCE_POOL_LIST=('f_pool_xymysql'), PRIMARY_ZONE=RANDOM, LOCALITY='F@z1,F@z2,F@z3' SET ob_compatibility_mode='mysql',ob_tcp_invited_nodes='%';说明
- 您需根据自身数据库的硬件配置进行动态调整。详细操作,参考 修改租户。
- 进行性能测试时,租户需配置最大可用资源。
软件版本
项目类型 软件版本及型号 OceanBase 数据库 V3.2.3 ODP V3.1.0 BenchMarkSQL V5.0 JDBC mysql-connector-java-5.1.47 OS CentOS Linux release 7.9.2009 (Core) CPU Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
环境信息
操作系统信息
$cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$uname -a
Linux testdriver 3.10.0-1160.24.1.el7.x86_64 #1 SMP Thu Apr 8 19:51:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
CPU 信息
$lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 16
座: 1
NUMA 节点: 1
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 106
型号名称: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
步进: 6
CPU MHz: 2699.998
BogoMIPS: 5399.99
超管理器厂商: KVM
虚拟化类型: 完全
L1d 缓存: 48K
L1i 缓存: 32K
L2 缓存: 1280K
L3 缓存: 49152K
NUMA 节点0 CPU: 0-31
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc eagerfpu pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512vbmi avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq arch_capabilities
内存信息
$free -g
total used free shared buff/cache available
Mem: 123 41 2 0 79 81
Swap: 0 0 0
软件信息
OBServer
$./observer -V
observer (OceanBase 3.2.3)
REVISION: 20220125174436-b765b7557c36d62bcd42597142fe0ee34bd21f6e
BUILD_BRANCH: 3_2_x_release
BUILD_TIME: Jan 25 2022 17:56:14
BUILD_FLAGS: RelWithDebInfo
BUILD_INFO:
Copyright (c) 2011-2020 Alipay Inc.
OBProxy
$./obproxy -V
obproxy (OceanBase 3.1.0 4358.el6)
REVISION: 4358-local-9a6209a5e7db8e692882782ce67cf6359f03c3ab
BUILD_TIME: May 5 2021 23:00:26
BUILD_FLAGS: -g -O2 -D_OB_VERSION=1000 -D_NO_EXCEPTION -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DNDEBUG -D__USE_LARGEFILE64 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -Wall -Wextra -Wunused-parameter -Wformat -Wconversion -Wno-deprecated -Wno-invalid-offsetof -finline-functions -fno-strict-aliasing -mtune=core2 -Wno-psabi -Wno-sign-compare -DGCC_52 -DUSE_POSIX_FALLOCATE -DSUPPORT_SSE4_2 -DHAVE_SCHED_GETCPU -DHAVE_REALTIME_COARSE -DOB_HAVE_EVENTFD -DHAVE_FALLOCATE -DHAVE_MINIDUMP -Werror
JDBC Driver
mysql-connector-java-5.1.47.jar
测试内容
测试配置
OBServer 启动参数
ALTER SYSTEM SET datafile_size='1T';
ALTER SYSTEM SET memory_limit='100g';
ALTER SYSTEM SET system_cpu_quota=10;
ALTER SYSTEM SET net_thread_count=12;
ALTER SYSTEM SET syslog_io_bandwidth_limit='2048M';
ALTER SYSTEM SET major_freeze_duty_time='disable';
ALTER SYSTEM SET memory_limit_percentage=90;
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;enable_syslog_wf=false;
ALTER SYSTEM SET __min_full_resource_pool_memory=1073741824;
ALTER SYSTEM SET system_memory=15G;
ALTER SYSTEM SET _ob_clog_disk_buffer_cnt=1000;
OBProxy 启动参数
ALTER PROXYCONFIG SET enable_strict_kernel_release=false;
ALTER PROXYCONFIG SET work_thread_num=16;
ALTER PROXYCONFIG SET automatic_match_work_thread=false;
ALTER PROXYCONFIG SET enable_compression_protocol=false;
ALTER PROXYCONFIG SET syslog_level=info;
ALTER PROXYCONFIG SET enable_async_log=true;
ALTER PROXYCONFIG SET enable_metadb_used='false';
kernel 配置
kernel.sched_migration_cost_ns = 0
集群配置
请使用 sys 租户登录,并执行以下命令:
ALTER SYSTEM SET enable_sql_audit=false;
ALTER SYSTEM SET enable_early_lock_release=false tenant=all;
ALTER SYSTEM SET enable_auto_leader_switch=false;
ALTER SYSTEM SET memory_chunk_cache_size=0;
ALTER SYSTEM SET clog_transport_compress_all=false;
ALTER SYSTEM SET trx_try_wait_lock_timeout='0ms';
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 builtin_db_data_verify_cycle=0;
ALTER SYSTEM SET enable_merge_by_turn=False;
ALTER SYSTEM SET minor_merge_concurrency=30;
ALTER SYSTEM SET system_memory='30G';
ALTER SYSTEM SET enable_pg=true;
ALTER SYSTEM SET memory_limit_percentage=85;
ALTER SYSTEM SET memstore_limit_percentage=70;
ALTER SYSTEM SET freeze_trigger_percentage=60;
ALTER SYSTEM SET micro_block_merge_verify_level=0;
ALTER SYSTEM SET max_kept_major_version_number=1;
ALTER SYSTEM SET sys_bkgd_io_high_percentage=90;
ALTER SYSTEM SET sys_bkgd_io_low_percentage=70;
ALTER SYSTEM SET merge_thread_count=20;
ALTER SYSTEM SET large_query_threshold='200s';
ALTER SYSTEM SET cpu_quota_concurrency=4;
ALTER SYSTEM SET minor_warm_up_duration_time=0;
ALTER SYSTEM SET minor_freeze_times=1;
ALTER SYSTEM SET minor_compact_trigger=0;
ALTER SYSTEM SET minor_merge_concurrency=20;
ALTER SYSTEM SET trace_log_slow_query_watermark='10s';
ALTER SYSTEM SET gts_refresh_interval='500us';
ALTER SYSTEM SET server_permanent_offline_time='36000s';
ALTER SYSTEM SET weak_read_version_refresh_interval=0;
ALTER SYSTEM SET _ob_get_gts_ahead_interval='1ms';
ALTER SYSTEM SET bf_cache_priority=10;
ALTER SYSTEM SET user_block_cache_priority=5;
ALTER SYSTEM SET merge_stat_sampling_ratio=1;
ALTER SYSTEM SET syslog_level='PERF';
ALTER SYSTEM SET enable_perf_event=false;
ALTER SYSTEM SET _cache_wash_interval='1m';
ALTER SYSTEM SET cache_wash_threshold='10G';
ALTER SYSTEM SET plan_cache_evict_interval='30s';
ALTER SYSTEM SET bf_cache_miss_count_threshold=1;
ALTER SYSTEM SET __easy_memory_limit='20G';
ALTER SYSTEM SET _clog_aggregation_buffer_amount=4 tenant=all;
ALTER SYSTEM SET _flush_clog_aggregation_buffer_timeout='1ms' tenant=all;
ALTER SYSTEM SET _enable_defensive_check=false;
SET GLOBAL binlog_row_image='MINIMAL';
租户配置
请使用测试租户登录,并执行以下命令:
ALTER SYSTEM SET enable_monotonic_weak_read=false;
ALTER SYSTEM SET ob_enable_batched_multi_statement=false;
SET GLOBAL ob_query_timeout=3600000000;
SET GLOBAL ob_trx_timeout=3600000000;
SET GLOBAL max_allowed_packet=67108864;
SET GLOBAL ob_sql_work_area_percentage=100;
SET GLOBAL parallel_servers_target=600;
SET GLOBAL binlog_row_image='MINIMAL';
OBProxy 配置
ALTER PROXYCONFIG SET proxy_mem_limited='2G';
ALTER PROXYCONFIG SET slow_proxy_process_time_threshold='500ms';
ALTER PROXYCONFIG SET syslog_level='ERROR';
ALTER PROXYCONFIG SET enable_prometheus=false;
ALTER PROXYCONFIG SET enable_compression_protocol=false;
bmsql 配置
driver=com.mysql.jdbc.Driver
conn=jdbc:mysql://IP:PORT/test?rewriteBatchedStatements=true&allowMultiQueries=true&useLocalSessionState=true&useUnicode=true&characterEncoding=utf-8&socketTimeout=30000000&useSSL=false
user=test@tt3
password=***********
warehouses=1000
loadWorkers=60
测试表结构
CREATE TABLE bmsql_config (
cfg_name varchar(30) primary key,
cfg_value varchar(50)
);
CREATE TABLEGROUP tpcc_group BINDING true PARTITION BY HASH PARTITIONS 128;
CREATE TABLE bmsql_warehouse (
w_id integer not null,
w_ytd decimal(12,2),
w_tax decimal(4,4),
w_name varchar(10),
w_street_1 varchar(20),
w_street_2 varchar(20),
w_city varchar(20),
w_state char(2),
w_zip char(9),
primary key(w_id)
) tablegroup='tpcc_group' partition by hash(w_id) partitions 128;
CREATE TABLE bmsql_district (
d_w_id integer not null,
d_id integer not null,
d_ytd decimal(12,2),
d_tax decimal(4,4),
d_next_o_id integer,
d_name varchar(10),
d_street_1 varchar(20),
d_street_2 varchar(20),
d_city varchar(20),
d_state char(2),
d_zip char(9),
PRIMARY KEY (d_w_id, d_id)
) tablegroup='tpcc_group' partition by hash(d_w_id) partitions 128;
CREATE TABLE bmsql_customer (
c_w_id integer not null,
c_d_id integer not null,
c_id integer not null,
c_discount decimal(4,4),
c_credit char(2),
c_last varchar(16),
c_first varchar(16),
c_credit_lim decimal(12,2),
c_balance decimal(12,2),
c_ytd_payment decimal(12,2),
c_payment_cnt integer,
c_delivery_cnt integer,
c_street_1 varchar(20),
c_street_2 varchar(20),
c_city varchar(20),
c_state char(2),
c_zip char(9),
c_phone char(16),
c_since timestamp,
c_middle char(2),
c_data varchar(500),
PRIMARY KEY (c_w_id, c_d_id, c_id)
) tablegroup='tpcc_group' partition by hash(c_w_id) partitions 128;
CREATE TABLE bmsql_history (
hist_id integer auto_increment,
h_c_id integer,
h_c_d_id integer,
h_c_w_id integer,
h_d_id integer,
h_w_id integer,
h_date timestamp,
h_amount decimal(6,2),
h_data varchar(24)
) tablegroup='tpcc_group' partition by hash(h_w_id) partitions 128;
CREATE TABLE bmsql_new_order (
no_w_id integer not null ,
no_d_id integer not null,
no_o_id integer not null,
PRIMARY KEY (no_w_id, no_d_id, no_o_id)
) TABLE_MODE='QUEUING' tablegroup='tpcc_group' partition by hash(no_w_id) partitions 128;
CREATE TABLE bmsql_oorder (
o_w_id integer not null,
o_d_id integer not null,
o_id integer not null,
o_c_id integer,
o_carrier_id integer,
o_ol_cnt integer,
o_all_local integer,
o_entry_d timestamp,
PRIMARY KEY (o_w_id, o_d_id, o_id)
) tablegroup='tpcc_group' partition by hash(o_w_id) partitions 128;
CREATE TABLE bmsql_order_line (
ol_w_id integer not null,
ol_d_id integer not null,
ol_o_id integer not null,
ol_number integer not null,
ol_i_id integer not null,
ol_delivery_d timestamp,
ol_amount decimal(6,2),
ol_supply_w_id integer,
ol_quantity integer,
ol_dist_info char(24),
PRIMARY KEY (ol_w_id, ol_d_id, ol_o_id, ol_number)
) tablegroup='tpcc_group' partition by hash(ol_w_id) partitions 128;
CREATE TABLE bmsql_item (
i_id integer not null,
i_name varchar(24),
i_price decimal(5,2),
i_data varchar(50),
i_im_id integer,
PRIMARY KEY (i_id)
) duplicate_scope='cluster';
CREATE TABLE bmsql_stock (
s_w_id integer not null,
s_i_id integer not null,
s_quantity integer,
s_ytd integer,
s_order_cnt integer,
s_remote_cnt integer,
s_data varchar(50),
s_dist_01 char(24),
s_dist_02 char(24),
s_dist_03 char(24),
s_dist_04 char(24),
s_dist_05 char(24),
s_dist_06 char(24),
s_dist_07 char(24),
s_dist_08 char(24),
s_dist_09 char(24),
s_dist_10 char(24),
PRIMARY KEY (s_w_id, s_i_id)
) tablegroup='tpcc_group' partition by hash(s_w_id) partitions 128;
create index bmsql_customer_idx1
on bmsql_customer (c_w_id, c_d_id, c_last, c_first) local;
create index bmsql_oorder_idx1
on bmsql_oorder(o_w_id, o_d_id, o_carrier_id, o_id) local;
测试过程
创建表。
sh runCreatetable.sh;导入数据,并创建索引。
sh runLoader.sh;执行数据库合并。
alter system major freeze;执行 workload。
sh runBenchmark.sh;
测试结果
[Thread-230] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 371208.93
[Thread-230] INFO jTPCC : Term-00, Measured tpmTOTAL = 824222.95
[Thread-230] INFO jTPCC : Term-00, Transaction Count = 4122460