【 使用环境 】测试环境
【 OB or 其他组件 】observer+proxy
【 使用版本 】4.5.0.0-100000012025112711
【问题描述】使用副本表测试的性能较高,使用双倍资源的partition by hash(id + 1) partitions 4分区表性能看起来没有提升很多
【复现路径】
- 三台物理机交叉部署3个zone,每个zone两个节点
kubectl get pods -n ob -o=json | jq -r '.items[] | "\(.metadata.name): \(.spec.containers[] | "\(.name): CPU Limit=\(.resources.limits.cpu // "none"), Memory Limit=\(.resources.limits.memory // "none")")"'
obcluster-1-zone1-2p49cr: observer: CPU Limit=8, Memory Limit=32Gi
obcluster-1-zone1-2p49cr: obagent: CPU Limit=1, Memory Limit=2Gi
obcluster-1-zone1-qdfklj: observer: CPU Limit=8, Memory Limit=32Gi
obcluster-1-zone1-qdfklj: obagent: CPU Limit=1, Memory Limit=2Gi
obcluster-1-zone2-mwbcmj: observer: CPU Limit=8, Memory Limit=32Gi
obcluster-1-zone2-mwbcmj: obagent: CPU Limit=1, Memory Limit=2Gi
obcluster-1-zone2-vnxmnn: observer: CPU Limit=8, Memory Limit=32Gi
obcluster-1-zone2-vnxmnn: obagent: CPU Limit=1, Memory Limit=2Gi
obcluster-1-zone3-c2sct9: observer: CPU Limit=8, Memory Limit=32Gi
obcluster-1-zone3-c2sct9: obagent: CPU Limit=1, Memory Limit=2Gi
obcluster-1-zone3-wgb55p: observer: CPU Limit=8, Memory Limit=32Gi
obcluster-1-zone3-wgb55p: obagent: CPU Limit=1, Memory Limit=2Gi
obproxy-obvs-55468f874b-pscvn: obproxy: CPU Limit=30, Memory Limit=16Gi
obproxy-obvs-55468f874b-qsfsc: obproxy: CPU Limit=30, Memory Limit=16Gi
obproxy-obvs-55468f874b-x57zj: obproxy: CPU Limit=30, Memory Limit=16Gi
kubectl get pod -n ob -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
obcluster-1-zone1-2p49cr 2/2 Running 0 22h 10.244.136.17 xos-r8ixobgt <none> <none>
obcluster-1-zone1-qdfklj 2/2 Running 0 22h 10.244.214.185 xos-00003-f318 <none> <none>
obcluster-1-zone2-mwbcmj 2/2 Running 0 22h 10.244.163.156 xos-00002-efe1 <none> <none>
obcluster-1-zone2-vnxmnn 2/2 Running 0 22h 10.244.136.20 xos-r8ixobgt <none> <none>
obcluster-1-zone3-c2sct9 2/2 Running 0 22h 10.244.214.163 xos-00003-f318 <none> <none>
obcluster-1-zone3-wgb55p 2/2 Running 0 22h 10.244.163.173 xos-00002-efe1 <none> <none>
obproxy-obvs-55468f874b-pscvn 1/1 Running 0 22h 10.244.214.143 xos-00003-f318 <none> <none>
obproxy-obvs-55468f874b-qsfsc 1/1 Running 0 22h 10.244.163.133 xos-00002-efe1 <none> <none>
obproxy-obvs-55468f874b-x57zj 1/1 Running 0 22h 10.244.136.50 xos-r8ixobgt <none> <none>
kubectl get svc -n ob
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-obproxy-obvs NodePort 10.192.1.130 <none> 2883:31281/TCP,2884:31506/TCP 6d14h
- 创建大租户
mysql> CREATE RESOURCE UNIT min_uc_000 MAX_CPU 1, MEMORY_SIZE '2G', LOG_DISK_SIZE '2G' ;
mysql> ALTER RESOURCE UNIT min_uc_000 MAX_CPU=2, MIN_CPU=2, MEMORY_SIZE='15G';
mysql> CREATE RESOURCE POOL min_rp_001 UNIT 'min_uc_000', UNIT_NUM 1, ZONE_LIST ('zone1','zone2','zone3');
mysql> CREATE TENANT IF NOT EXISTS min_tenant_000 LOCALITY = "F@zone1, F@zone2, F@zone3", PRIMARY_ZONE = "zone1", RESOURCE_POOL_LIST=('min_rp_001') set OB_TCP_INVITED_NODES='%';
mysql> ALTER RESOURCE TENANT min_tenant_000 UNIT_NUM = 2;
mysql> ALTER RESOURCE UNIT min_uc_000 MAX_CPU=13, MIN_CPU=13, MEMORY_SIZE='17G';
- 测试副本表性能
mysql> SELECT * FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'test';
+-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+-------+----------------+----------+----------+--------------+-----------------+----------------------------+-----------+-----------------+---------------+----------+------------+
| TENANT_ID | DATABASE_NAME | TABLE_NAME | TABLE_ID | TABLE_TYPE | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME | DATA_TABLE_ID | TABLET_ID | LS_ID | ZONE | SVR_IP | SVR_PORT | ROLE | REPLICA_TYPE | DUPLICATE_SCOPE | DUPLICATE_READ_CONSISTENCY | OBJECT_ID | TABLEGROUP_NAME | TABLEGROUP_ID | SHARDING | INDEX_TYPE |
+-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+-------+----------------+----------+----------+--------------+-----------------+----------------------------+-----------+-----------------+---------------+----------+------------+
| 1002 | test | vsmongo | 500075 | USER TABLE | NULL | NULL | NULL | NULL | 200060 | 1002 | zone1 | 10.244.136.17 | 2882 | LEADER | FULL | NONE | NONE | 500075 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500075 | USER TABLE | NULL | NULL | NULL | NULL | 200060 | 1002 | zone2 | 10.244.163.156 | 2882 | FOLLOWER | FULL | NONE | NONE | 500075 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500075 | USER TABLE | NULL | NULL | NULL | NULL | 200060 | 1002 | zone3 | 10.244.214.163 | 2882 | FOLLOWER | FULL | NONE | NONE | 500075 | NULL | NULL | NULL | NULL |
+-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+-------+----------------+----------+----------+--------------+-----------------+----------------------------+-----------+-----------------+---------------+----------+------------+
3 rows in set (0.50 sec)
测试命令示例:
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --dropTable && sleep 60
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --threads 200 --connPoolSize 200 --load && sleep 60
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --threads 200 --connPoolSize 200 --run --updateratio=0 && sleep 60
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --threads 200 --connPoolSize 200 --run --updateratio=0.05 && sleep 60
- 测试分区表
mysql> SELECT * FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'test';
+-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+-------+----------------+----------+----------+--------------+-----------------+----------------------------+-----------+-----------------+---------------+----------+------------+
| TENANT_ID | DATABASE_NAME | TABLE_NAME | TABLE_ID | TABLE_TYPE | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME | DATA_TABLE_ID | TABLET_ID | LS_ID | ZONE | SVR_IP | SVR_PORT | ROLE | REPLICA_TYPE | DUPLICATE_SCOPE | DUPLICATE_READ_CONSISTENCY | OBJECT_ID | TABLEGROUP_NAME | TABLEGROUP_ID | SHARDING | INDEX_TYPE |
+-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+-------+----------------+----------+----------+--------------+-----------------+----------------------------+-----------+-----------------+---------------+----------+------------+
| 1002 | test | vsmongo | 500070 | USER TABLE | p0 | NULL | NULL | NULL | 200056 | 1002 | zone1 | 10.244.136.17 | 2882 | LEADER | FULL | NONE | NONE | 500071 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p0 | NULL | NULL | NULL | 200056 | 1002 | zone2 | 10.244.163.156 | 2882 | FOLLOWER | FULL | NONE | NONE | 500071 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p0 | NULL | NULL | NULL | 200056 | 1002 | zone3 | 10.244.214.163 | 2882 | FOLLOWER | FULL | NONE | NONE | 500071 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p1 | NULL | NULL | NULL | 200057 | 1002 | zone1 | 10.244.136.17 | 2882 | LEADER | FULL | NONE | NONE | 500072 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p1 | NULL | NULL | NULL | 200057 | 1002 | zone2 | 10.244.163.156 | 2882 | FOLLOWER | FULL | NONE | NONE | 500072 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p1 | NULL | NULL | NULL | 200057 | 1002 | zone3 | 10.244.214.163 | 2882 | FOLLOWER | FULL | NONE | NONE | 500072 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p2 | NULL | NULL | NULL | 200058 | 1002 | zone1 | 10.244.136.17 | 2882 | LEADER | FULL | NONE | NONE | 500073 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p2 | NULL | NULL | NULL | 200058 | 1002 | zone2 | 10.244.163.156 | 2882 | FOLLOWER | FULL | NONE | NONE | 500073 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p2 | NULL | NULL | NULL | 200058 | 1002 | zone3 | 10.244.214.163 | 2882 | FOLLOWER | FULL | NONE | NONE | 500073 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p3 | NULL | NULL | NULL | 200059 | 1002 | zone1 | 10.244.136.17 | 2882 | LEADER | FULL | NONE | NONE | 500074 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p3 | NULL | NULL | NULL | 200059 | 1002 | zone2 | 10.244.163.156 | 2882 | FOLLOWER | FULL | NONE | NONE | 500074 | NULL | NULL | NULL | NULL |
| 1002 | test | vsmongo | 500070 | USER TABLE | p3 | NULL | NULL | NULL | 200059 | 1002 | zone3 | 10.244.214.163 | 2882 | FOLLOWER | FULL | NONE | NONE | 500074 | NULL | NULL | NULL | NULL |
+-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+-------+----------------+----------+----------+--------------+-----------------+----------------------------+-----------+-----------------+---------------+----------+------------+
12 rows in set (0.67 sec)
测试命令示例
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --dropTable && sleep 60
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --threads 200 --connPoolSize 200 --load --usePartition && sleep 60
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --threads 200 --connPoolSize 200 --run --updateratio=0 && sleep 60
./test-ob-client --hosts="10.192.1.130:2883" --user root --password 123 --tenantName="min_tenant_000" --loadcount 4000000 --threads 200 --connPoolSize 200 --run --updateratio=0.05 && sleep 60
5 测试结果对比
| 场景| load| r:w=100:0| r:w=95:5| r:w=50:50| r:w=5:95| r:w=0:100|
|------|------|------|
| 副本表 | 26494 | 63314 | 56833 | 30272 | 20588 | 17663 |
| 分区表 | 28841 | 64768 | 58074 | 31076 | 20163 | 18371 |
期望效果
副本表测试过程中,logstream所在的pod的CPU打满了。分区表测试过程中,两个logstream的pod的CPU也打满了。理论上分区的测试性能应该高于副本表,或者差不多得有0.5-1倍的性能提升吧