金融行业实践:对 OceanBase 做性能测试

2024年 5月 7日 79.5k 0

作者简介:张霁:数据库架构师。

环境准备

由于手上正好有7台物理机,在作业三中会使用OBD直接部署了2:2:2架构的OceanBase集群。这里直接拿来进行TPC-C测试。

  • 机器信息如下:

金融行业实践:对 OceanBase 做性能测试-1

机器划分如下:

金融行业实践:对 OceanBase 做性能测试-2

测试方案

  • 使用 OBD 部署OceanBase 数据库集群。TPC-C 单独部署在一台机器上, 作为客户端的压力机器。
  • OceanBase 集群规模为 2:2:2。部署成功后,新建执行 TPC-C 测试的租户及用户:租户tpcc,用户benchmarksql。将租户的 primary_zone 设置为 RANDOM。RANDOM 表示新建表分区的 Leader 随机到这 6 台机器。

测试规格

warehouses=2000
loadWorkers=100
terminals=20
runMins=10
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

安装 Benchmark SQL

按照以下步骤安装 Benchmark SQL:

下载 Benchmark SQL。

本次使用的是开源社区进行适配了 mysql 的 benchmarksql 。所以不包含修改源代码适配过程。

解压 Benchmark SQL。

unzip ./benchmarksql-5.0.zip

适配 OceanBase

这里测试实验的是已经适配了 mysql 数据库的 benchmarksql.

创建 ob 测试使用的配置文件

benchmarksql\run 文件夹内创建 prop.ob 文件。

prop.ob中的参数说明:

JDBC 连接串:conn=jdbc:mysql:loadbalance://10.144.2.106:2883,10.144.2.107:2883,10.144.2.108:2883,10.144.2.109:2883,10.144.2.110:2883,10.144.2.111:2883/benchmark?rewriteBatchedStatements=true&allowMultiQueries=true&useLocalSessionState=true&useUnicode=true&characterEncoding=utf-8&socketTimeout=3000000

user=benchmarksql@tpcc

password=benchmarksql

rewriteBatchedStatements:

  • 参数非常重要,会严重影响导数据效率,不可以忽略。
  • 如果导数据较慢,可以用对应租户登录上去通过show full processlist检查是否开启。
  • new order事务中也用到了batch update,因此导数和benchmark阶段都需要开启。

并发数量(terminals):200,mysql 租户配置下并发需要结合具体配置动态调整。

useLocalSessionState:是否使用autocommit,read_only和transaction isolation的内部值(jdbc端的本地值),建议设置为true,如果设置为false,则需要发语句到远端请求,增加发送请求频次,影响性能。

warehouses/loadWorkers这两项用于设置压测数据量,可以适当调整。

numTerminals > 0 && numTerminals <= 10*numWarehouses,terminals的范围需要在这个区间内。

db=mysql 目前开源版只支持mysql租户,所以这里设置mysql

warehouses:指定仓库数。

通常仓库数就决定了这个性能测试理论上的成绩。如果期望测试结果越高,仓库数就不能太低。生产环境机器测试,建议 5000 仓库起步。如果机器配置较差,建议 100 仓起步。

loadWorkers:指定仓库数据加载时的并发。

如果机器配置很好,该值可以设置大一些,比如说 100 个。 如果机器配置不高(尤其是内存),该值需要设置小一些,如 10 个并发。并发指定得过高,可能导致内存消耗太快,出现报错,导致数据加载前功尽弃。

terminals:指定性能压测时的并发数。

建议并发数不要高于仓库数 * 10 。否则,会有不必要的锁等待。在生产环境中,该并发数设置到 1000 就很高了。一般环境测试建议从 100 开始。

runMins:指定性能测试持续的时间。

时间越久,越能考验数据库的性能和稳定性。建议不要少于 10 分钟。生产环境中机器建议不少于 1 小时。

LoadStartW 和 LoadStopW:指定补仓时的开始值和截止值。

如果导数据时发现某个仓库数据导入失败(大事务超时),您可以指定这个仓库重新导入。

修改建表语句

修改benchmarksql/run/sql.mysql/tableCreates.sql

create table bmsql_config (
 cfg_name  varchar(30) primary key,
 cfg_value varchar(50)
);

-- drop tablegroup tpcc_group;
create tablegroup tpcc_group 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,
 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)
)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' use_bloom_filter=true partition by hash(s_w_id) partitions 128;

修改索引创建语句

修改benchmarksql/run/sql.mysql/indexCreates.sql

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;

修改删除语句

修改benchmarksql/run/sql.mysql/tableDrops.sql

drop table bmsql_config;
drop table bmsql_new_order;
drop table bmsql_order_line;
drop table bmsql_oorder;
drop table bmsql_history;
drop table bmsql_customer;
drop table bmsql_stock;
drop table bmsql_item;
drop table bmsql_district;
drop table bmsql_warehouse;

purge recyclebin;

-- tpcc_group
drop tablegroup tpcc_group

环境调优

OBProxy 调优

请在sys租户下执行。

在系统租户下执行命令。

(1)启动配置
alter proxyconfig set enable_strict_kernel_release=false;
alter proxyconfig set automatic_match_work_thread=false;
(2)跑性能需要调整
alter proxyconfig set proxy_mem_limited='4G'; --防止oom
alter proxyconfig set enable_compression_protocol=false; --关闭压缩,降低cpu%
alter proxyconfig set slow_proxy_process_time_threshold='500ms';
alter proxyconfig set enable_ob_protocol_v2=false;
alter proxyconfig set enable_qos=false;
alter proxyconfig set syslog_level='error';

初始后需要调整的参数

[admin@localhost ~]$ mysql -h10.144.2.106 -uroot@sys -P2883 -p -c -A oceanbase
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [oceanbase]> alter proxyconfig set enable_strict_kernel_release=false;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter proxyconfig set automatic_match_work_thread=false;
Query OK, 0 rows affected (0.01 sec)

跑性能前需要调整的参数

[admin@localhost ~]$ mysql -h10.144.2.106 -uroot@sys -P2883 -p -c -A oceanbase
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [oceanbase]> alter proxyconfig set proxy_mem_limited='4G';
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter proxyconfig set enable_compression_protocol=false; 
Query OK, 0 rows affected (0.00 sec)

MySQL [oceanbase]> alter proxyconfig set slow_proxy_process_time_threshold='500ms';
Query OK, 0 rows affected (0.00 sec)

MySQL [oceanbase]> alter proxyconfig set enable_ob_protocol_v2=false;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter proxyconfig set enable_qos=false;
Query OK, 0 rows affected (0.00 sec)

MySQL [oceanbase]> alter proxyconfig set syslog_level='error';
Query OK, 0 rows affected (0.01 sec)

测试操作执行

以下命令均在 …/benchmarksql/run 目录下执行。按照以下步骤进行 TPC-C 测试:

导数

导数前调优

OceanBase 数据库导数据前sys租户调优

请在 sys 租户下执行。

在系统租户下执行 obclient -h$host_ip -P$host_port -uroot@sys -A 命令。

alter system set memory_chunk_cache_size ='0';
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 builtin_db_data_verify_cycle = 0;
alter system set enable_merge_by_turn = False;
alter system set minor_merge_concurrency=30;
alter system set memory_limit_percentage = 85;
alter system set memstore_limit_percentage = 80;
alter system set freeze_trigger_percentage = 30;
alter system set enable_syslog_recycle='True';
alter system set max_syslog_file_count=100;
alter system set minor_freeze_times=500;
alter system set minor_compact_trigger=5;
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 = 45;
alter system set merge_stat_sampling_ratio = 1;
alter system set writing_throttling_trigger_percentage=75 tenant=xxx;
alter system set writing_throttling_maximum_duration='15m';
set global ob_plan_cache_percentage=20;
alter system set enable_perf_event='false';
alter system set use_large_pages='true';
alter system set micro_block_merge_verify_level=0;
alter system set builtin_db_data_verify_cycle=20;
alter system set net_thread_count=4;

[admin@localhost ~]$ mysql -h10.144.2.111 -uroot@sys -P2881 -p -c -A oceanbase
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3222798340
Server version: 5.7.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [oceanbase]> alter system set memory_chunk_cache_size ='0';
Query OK, 0 rows affected (0.03 sec)

MySQL [oceanbase]> alter system set trx_try_wait_lock_timeout='0ms';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set large_query_threshold='1s';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set trace_log_slow_query_watermark='500ms';
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set syslog_io_bandwidth_limit='30m';
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set enable_async_syslog=true;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set merger_warm_up_duration_time='0';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set merger_switch_leader_duration_time='0';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set large_query_worker_percentage=10;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set builtin_db_data_verify_cycle = 0;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set enable_merge_by_turn = False;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set minor_merge_concurrency=30;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set memory_limit_percentage = 85;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set memstore_limit_percentage = 80;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set freeze_trigger_percentage = 30;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set enable_syslog_recycle='True';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set max_syslog_file_count=100;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set minor_freeze_times=500;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set minor_compact_trigger=5;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set max_kept_major_version_number=1;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set sys_bkgd_io_high_percentage = 90;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set sys_bkgd_io_low_percentage = 70;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set merge_thread_count = 45;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set merge_stat_sampling_ratio = 1;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set writing_throttling_trigger_percentage=75 tenant=tpcc;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set writing_throttling_maximum_duration='15m';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> set global ob_plan_cache_percentage=20;
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set enable_perf_event='false';
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set use_large_pages='true';
Query OK, 0 rows affected (0.01 sec)

MySQL [oceanbase]> alter system set micro_block_merge_verify_level=0;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set builtin_db_data_verify_cycle=20;
Query OK, 0 rows affected (0.02 sec)

MySQL [oceanbase]> alter system set net_thread_count=4;
Query OK, 0 rows affected (0.02 sec)

OceanBase 数据库导数据前业务租户调优

请在具体用户下执行。在测试用户下执行 obclient -h$host_ip -P$host_port -u$user@$tenant -p$password -A 命令。

数据库下租户设置,防止事务超时
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;

执行调优参数

[admin@localhost ~]$ obclient -h10.144.2.106 -ubenchmarksql@tpcc -P2883 -pbenchmarksql -c -A oceanbase
Welcome to the OceanBase. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.6.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [oceanbase]> set global ob_query_timeout=36000000000;
Query OK, 0 rows affected (0.012 sec)

MySQL [oceanbase]> set global ob_trx_timeout=36000000000;
Query OK, 0 rows affected (0.102 sec)

MySQL [oceanbase]> set global max_allowed_packet=67108864;
Query OK, 0 rows affected (0.001 sec)

MySQL [oceanbase]> set global ob_sql_work_area_percentage=100;
Query OK, 0 rows affected (0.002 sec)
MySQL [oceanbase]> set global parallel_max_servers=260;
Query OK, 0 rows affected, 1 warning (0.012 sec)

MySQL [oceanbase]> set global parallel_servers_target=624;
Query OK, 0 rows affected (0.012 sec)

调优参数设置完毕请重启集群

obd cluster restart $cluster_name

导数执行

运行以下命令,初始化环境:

./runDatabaseDestroy.sh prop.ob 

运行以下命令,创建表并导入数据:

 ./runDatabaseBuild.sh prop.ob

导数后调优

合并

执行合并(需要使用sys租户登录)

Major 合并将当前大版本的 SSTable 和 MemTable 与前一个大版本的全量静态数据进行合并,使存储层统计信息更准确,生成的执行计划更稳定。

MySQL [(none)]> use oceanbase
Database changed
MySQL [oceanbase]> alter system major freeze;
Query OK, 0 rows affected 

查看合并是否完成

MySQL [oceanbase]> select name,value from oceanbase.__all_zone where name='frozen_version' or name='last_merged_version';
+---------------------+-------+
| name        | value |
+---------------------+-------+
| frozen_version   |  2 |
| last_merged_version |  2 |
| last_merged_version |  2 |
| last_merged_version |  2 |
| last_merged_version |  2 |
+---------------------+-------+

frozen_version 和 last_merged_version 的值相等即表示合并完成。

OceanBase 数据库压力测试阶段sys租户调优

请在 sys 租户下执行。

在系统租户下执行 obclient -h$host_ip -P$host_port -uroot@sys -A 命令。

##如果导入阶段开启了限速需要关闭
alter system set writing_throttling_trigger_percentage=100 tenant=xxx;
alter system set writing_throttling_maximum_duration='1h';
alter system set memstore_limit_percentage = 80; 
alter system set freeze_trigger_percentage = 30; 
alter system set large_query_threshold = '200s';
alter system set trx_try_wait_lock_timeout = '0ms';
alter system set cpu_quota_concurrency = 4;
alter system set minor_warm_up_duration_time = 0;
alter system set minor_freeze_times=500;
alter system set minor_compact_trigger=3;
alter system set sys_bkgd_io_high_percentage = 90;
alter system set sys_bkgd_io_low_percentage = 70;
alter system set minor_merge_concurrency =20;
alter system set builtin_db_data_verify_cycle = 0;
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 = '5ms';
##为频繁空查的宏块建立bloomfilter并缓存,减少磁盘IO和CPU消耗,提升写入性能
alter system set bf_cache_priority = 10;
alter system set user_block_cache_priority=5;
alter system set merge_stat_sampling_ratio = 0;
##close sql audit
alter system set enable_sql_audit=false;
##调整日志级别及保存个数
alter system set syslog_level='PERF';
alter system set max_syslog_file_count=100;
alter system set enable_syslog_recycle='True';
alter system set ob_enable_batched_multi_statement=true tenant=all;
alter system set _cache_wash_interval = '1m';
alter system set plan_cache_evict_interval = '30s';
alter system set enable_one_phase_commit=false;
alter system set enable_monotonic_weak_read = false;

OceanBase 数据库测试阶段业务租户调优

在进行测试 TPCC 的租户下执行。

在测试用户下执行 obclient -h$host_ip -P$host_port -u$user@$tenant -p$password -A 命令。

alter system set _clog_aggregation_buffer_amount=8;
alter system set _flush_clog_aggregation_buffer_timeout='1ms';

[admin@localhost ~]$ mysql -h10.144.2.111 -uroot@tpcc -P2881 -p -c -A oceanbase
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3222798341
Server version: 5.7.25 OceanBase 3.1.2 (r10000392021123010-d4ace121deae5b81d8f0b40afbc4c02705b7fc1d) (Built Dec 30 2021 02:47:29)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [oceanbase]> alter system set _clog_aggregation_buffer_amount=8;
Query OK, 0 rows affected (0.00 sec)

MySQL [oceanbase]> alter system set _flush_clog_aggregation_buffer_timeout='1ms';
Query OK, 0 rows affected (0.00 sec)

TPCC测试操作执行

执行以下命令,执行压力测试:

./runBenchmark.sh prop.ob

测试结果

2000仓,200并发

Term-00, Running Average tpmTOTAL: 742679.46  Current tpmTOTAL: 49075944  Memory Usage: 964MB / 2834MB      
22:50:33,344 [Thread-36] INFO jTPCC : Term-0022:50:33,344 [Thread-36] INFO jTPCC : Term-0022:50:33,344 [Thread-36] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 334225.02
22:50:33,344 [Thread-36] INFO jTPCC : Term-00, Measured tpmTOTAL = 742589.64
22:50:33,345 [Thread-36] INFO jTPCC : Term-00, Session Start  = 2022-01-14 22:40:33
22:50:33,345 [Thread-36] INFO jTPCC : Term-00, Session End   = 2022-01-14 22:50:33
22:50:33,345 [Thread-36] INFO jTPCC : Term-00, Transaction Count = 7426997

2000仓,400并发

Term-00, Running Average tpmTOTAL: 894273.20  Current tpmTOTAL: 59132196  Memory Usage: 2937MB / 3748MB     
00:46:04,613 [Thread-368] INFO jTPCC : Term-0000:46:04,614 [Thread-368] INFO jTPCC : Term-0000:46:04,614 [Thread-368] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 402109.83
00:46:04,614 [Thread-368] INFO jTPCC : Term-00, Measured tpmTOTAL = 894131.49
00:46:04,614 [Thread-368] INFO jTPCC : Term-00, Session Start  = 2022-01-15 00:36:04
00:46:04,614 [Thread-368] INFO jTPCC : Term-00, Session End   = 2022-01-15 00:46:04
00:46:04,614 [Thread-368] INFO jTPCC : Term-00, Transaction Count = 8943132

2000仓,600并发

Term-00, Running Average tpmTOTAL: 1036197.84  Current tpmTOTAL: 68482356  Memory Usage: 2370MB / 2662MB     
01:33:52,474 [Thread-449] INFO jTPCC : Term-0001:33:52,474 [Thread-449] INFO jTPCC : Term-0001:33:52,474 [Thread-449] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 466181.02
01:33:52,474 [Thread-449] INFO jTPCC : Term-00, Measured tpmTOTAL = 1035911.66
01:33:52,475 [Thread-449] INFO jTPCC : Term-00, Session Start  = 2022-01-15 01:23:52
01:33:52,475 [Thread-449] INFO jTPCC : Term-00, Session End   = 2022-01-15 01:33:52
01:33:52,475 [Thread-449] INFO jTPCC : Term-00, Transaction Count = 10362586

2000仓,800并发

02:01:10,202 [Thread-514] INFO jTPCC : Term-0002:01:10,202 [Thread-514] INFO jTPCC : Term-0002:01:10,202 [Thread-514] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 482945.87
02:01:10,202 [Thread-514] INFO jTPCC : Term-00, Measured tpmTOTAL = 1073274.03
02:01:10,202 [Thread-514] INFO jTPCC : Term-00, Session Start  = 2022-01-15 01:51:09
02:01:10,202 [Thread-514] INFO jTPCC : Term-00, Session End   = 2022-01-15 02:01:10
02:01:10,202 [Thread-514] INFO jTPCC : Term-00, Transaction Count = 10739018

注意事项

终端数量无效。报错信息如下:

Invalid number of terminals!

这是 prop.oceanbase 中设置的 terminals 值不对,需填写 numTerminals <= 0 || numTerminals > 10*numWarehouses 范围内的 terminals 值。

事务超时。报错信息如下:

Worker 198: ERROR: Transaction is timeout
Worker 192: ERROR: Transaction is timeout

需增大超时时间,测试租户下执行set global ob_query_timeout=36000000000;set global ob_trx_timeout=36000000000。

修改Obproxy参数,开启二次路由,提高性能

alter proxyconfig set enable_ob_protocol_v2=True;
alter proxyconfig set enable_reroute=True; 
alter proxyconfig set enable_index_route=True

关闭 SQL 审计

ALTER SYSTEM SET enable_sql_audit = false;

修改关闭性能收集

alter system set enable_perf_event=false;

————————————————

附录:

练习题:

实践练习一(必选):OceanBase Docker 体验 

实践练习二(必选):手动部署 OceanBase 集群 

实践练习三(可选):使用OBD 部署一个 三副本OceanBase 集群 

实践练习四(必选):迁移 MySQL 数据到 OceanBase 集群 

实践练习五(可选):对 OceanBase 做性能测试 

实践练习六(必选):查看 OceanBase 执行计划 

还没交作业的小伙伴要抓紧啦!

可以免费带走 OBCP 考试券喔~~

方法一:完成四道必选练习

方法二:任意一道练习题 ➕ 结业考试超过80分

已经有很多同学抢先答题了,

加入钉钉群(群号3582 5151),和大家一起学习、交流~~

进群二维码:

金融行业实践:对 OceanBase 做性能测试-3

相关文章

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

发布评论