OceanBase 4.1 全面测评及部署流程,看这篇就够了【建议收藏】

news2024/11/27 17:57:54

背景

测试 OceanBase 对比 MySQL,TiDB 的性能表现,数据存储压缩,探索多点内部项目一个数据库场景落地 Oceanbase(MySQL->OceanBase)。

单机测试

准备

OBD 方式部署单机

文件准备

wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/7/x86_64/oceanbase-all-in-one-4.1.0.0-100120230323143519.el7.x86_64.tar.gz?Expires=1681878350&OSSAccessKeyId=LTAI5tGVLeRRycCRGerZJMNC&Signature=4E8%2FW77U1MAqq1ttNvuljadkTq0%3D

mv oceanbase-all-in-one-4.1.0.0-100120230323143519.el7.x86_64.tar.gz?Expires=1681878350 oceanbase-all-in-one-4.1.0.0-100120230323143519.el7.x86_64.tar.gz

tar -zxf oceanbase-all-in-one-4.1.0.0-100120230323143519.el7.x86_64.tar.gz -C /usr/local

安装相关包

/usr/local/oceanbase-all-in-one/bin/install.sh
.......
#####################################################################
 Install Finished 
=====================================================================
Setup Environment:     source ~/.oceanbase-all-in-one/bin/env.sh 
Start Web Service:     obd web 
Quick Start:           obd demo 
More Details:          obd -h 
=====================================================================

修改配置文件

包含组件:oceanbase-ce、obproxy-ce、obagent、grafana、Prometheus

cp /usr/local/oceanbase-all-in-one/obd/usr/obd/example/all-components.yaml ./

vi all-components.yaml
  • memory_limit 64G observer 总内存(租户内存+系统内存)
  • system_memory 30G 系统内存
  • datafile_size 1500G 数据文件大小(启动就会预分配)
  • log_disk_size 日志文件大小(启动就会预分配)
# all-components.yaml
oceanbase-ce:
  servers:
    - name: server1
      ip: 127.0.0.1
  global:
    devname: lo
    memory_limit: 64G # The maximum running memory for an observer
    system_memory: 30G
    datafile_size: 1500G # Size of the data file. 
    log_disk_size: 800G # The size of disk space used by the clog files.
.......
server1:
........
    zone: zone1
obproxy-ce:
  depends:
    - oceanbase-ce
  servers:
    - 127.0.0.1
  global:
......
obagent:
  depends:
    - oceanbase-ce
  servers:
    - name: server1
      ip: 127.0.0.1
  global:
    home_path: /data/obagent1
ocp-express:
  depends:
    - oceanbase-ce
    - obproxy-ce
    - obagent
  servers:
    - 127.0.0.1
  global:
.....

部署启动

obd cluster deploy obtest -c all-components.yaml
+--------------------------------------------------------------------------------------------+
|                                          Packages                                          |
+--------------+---------+------------------------+------------------------------------------+
| Repository   | Version | Release                | Md5                                      |
+--------------+---------+------------------------+------------------------------------------+
| oceanbase-ce | 4.1.0.0 | 100000192023032010.el7 | 8439ecf8db5e0649bd49671b41ea9e8c85756b63 |
| obproxy-ce   | 4.1.0.0 | 7.el7                  | 2a9d9bf67f179dcca2a8c9e7c77373d94e7e2abe |
| obagent      | 1.3.0   | 22.el7                 | d57fbb4962b2fbecb6282358c59295fdfba4d6ac |
| ocp-express  | 1.0.0   | 100000432023032015.el7 | 42c6fc921063f24f9e1072d75bfa7f21f42146e3 |
+--------------+---------+------------------------+------------------------------------------+
------

obd cluster start obtest
 ...
+---------------------------------------------+
|                   observer                  |
+-----------+---------+------+-------+--------+
| ip        | version | port | zone  | status |
+-----------+---------+------+-------+--------+
| 127.0.0.1 | 4.1.0.0 | 4000 | zone1 | ACTIVE |
+-----------+---------+------+-------+--------+
obclient -h127.0.0.1 -P4000 -uroot -Doceanbase -A

+---------------------------------------------+
|                   obproxy                   |
+-----------+------+-----------------+--------+
| ip        | port | prometheus_port | status |
+-----------+------+-----------------+--------+
| 127.0.0.1 | 2883 | 2884            | active |
+-----------+------+-----------------+--------+
obclient -h127.0.0.1 -P2883 -uroot -Doceanbase -A
+------------------------------------------------------------------+
|                             obagent                              |
+---------------+--------------------+--------------------+--------+
| ip            | mgragent_http_port | monagent_http_port | status |
+---------------+--------------------+--------------------+--------+
| 10.xxxx | 8089               | 8088               | active |
+---------------+--------------------+--------------------+--------+
+------------------------------------------------------------------+
|                           ocp-express                            |
+---------------------------+----------+------------------+--------+
| url                       | username | default_password | status |
+---------------------------+----------+------------------+--------+
| http://10.xxxx:8180 | admin    | oceanbase        | active |
+---------------------------+----------+------------------+--------+

创建 MySQL 用户

create resource unit ut1 max_cpu 32,memory_size '16G';

create resource pool p1 unit 'ut1',unit_num 1;

create tenant mysql resource_pool_list=('p1') set ob_tcp_invited_nodes='%';

重要配置

OceanBaseTiDBMySQL
社区
版本
v4.1.0v6.1.5v5.7.16
内存
配置
租户
memory_size 16G
block_cache_size 16Ginnodb_buffer_pool_size 16G
单机器
配置
32C RAID10 SSD32C RAID10 SSD32C RAID10 SSD
刷盘
配置
默认强制刷盘
(无刷盘相关配置参数)
sync-log=1sync_binlog=1
并发数5,10,20,30,60,1205,10,20,30,60,1205,10,20,30,60,120
测试
模式
read_write,read_only,write_onlyread_write,read_only,write_onlyread_write,read_only,write_only
单次测试
时间
300s
共 18 种测试(并发数x测试模式)
300s
共18种测试(并发数x测试模式)
300s
共 18 种测试(并发数x测试模式)
每种测试
方法
obd test sysbench(OBD 自带)
先 prepare、再 run、再 cleanup
sysbench prepare
sysbench run
sysbench cleanup
sysbench prepare
sysbench run
sysbench cleanup
  • 架构层级:
    • MySQL 一层架构、OceanBase 二层架构(OBProxy + OBServer)、TiDB 三层架构(TiDB+PD+TiKV);
    • 每多一层网络层面的延迟消耗会增加。
  • QPS:平均延迟 OceanBase 表现相对于 MySQL 表现均可以
    • QPS 延迟时间相对是 MySQL 的 1/3(最低 QPS 也过万,最低平均延迟 3ms);
    • 数据压缩率(表仅 2 数值、2 字符字段)是 MySQL 的 3/5。
  • sysbench 表相对简单和实践生产场景表有一定差异,本次测试作为参考
  • 每种测试(每类数据库共 18 种测试)均会生成测试数据(prepare)、跑测试(run)、清理测试数据(cleanup)

QPS 表现

延迟表现

存储压缩

MySQL:数据 test 库物理空间占用 69G

mysql> select count(*) from sbtest10;
+----------+
| count(*) |
+----------+
| 30000000 |
+----------+
1 row in set (4.62 sec)

TiDB:数据 test 库物理空间占用 39G

mysql> select count(*) from sbtest10;
+----------+
count(*) |
+----------+
30000000 |
+----------+
1 row in set (0.00 sec)

OceanBase:数据 test 库物理空间占用 43G。预分配机制,启动就是占用 1.2T 空间(实际具体库物理空间通过 OB 节点资源消耗查询)。

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
| 30000000 |
+----------+
1 row in set (0.00 sec)

binlog 兼容

  • 迁移服务 OMS 能通过 OMS 同步数据变更至下游 Kafka;
  • 能兼容 MySQL binlog 协议同步下游 Kafka 很友好(我们这类场景多 MySQL->Kafka->Hive);
  • 暂未有类似 MySQL binlog 原始文件功能,据说爱可生近期发布基于 OceanBase 的商业发行版 ActionDB 对于此功能正在规划中,十分期待

集群测试

集群方式目前暂对数据存储压缩率方式做了测试(生产监控场景 MySQL 迁移至 OceanBase),后续还会对比监控场景 MySQL 中各类型报表查询 SQL 在 OceanBase 的表现。

机器资源

节点类型集群方式
中控管理节点10.xxx
16C 64G /data 3.7T
数据节点10.xxx
32C 50G /data3 15T
数据节点10.xxx
32C 50G /data3 15T
数据节点10.xxx
32C 50G /data3 15T

OCP 管理组件嵌入到了 OBD 集群的部署流程中,机器相关初始化参考官方文档。

部署准备

在线部署准备

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install -y ob-deploy 
source /etc/profile.d/obd.sh

离线部署准备

https://www.oceanbase.com/softwarecenter 下载 all-in-one 包。

tar -xzf oceanbase-all-in-one-*.tar.gz
cd oceanbase-all-in-one/bin/
./install.sh
source ~/.oceanbase-all-in-one/bin/env.sh

白屏部署

obd web -p 80

推荐白屏方式部署,可视化直观,有各种检查项。

预检查阶段会做全面 check。

obd cluster display oceanbase41
Get local repositories and plugins ok
Open ssh connection ok
Cluster status check ok
Connect to observer ok
Wait for observer init ok
+-------------------------------------------------+
|                     observer                    |
+---------------+---------+------+-------+--------+
| ip            | version | port | zone  | status |
+---------------+---------+------+-------+--------+
| 10.xxxx.208 | 4.1.0.0 | 5000 | zone2 | ACTIVE |
| 10.xxxx.209 | 4.1.0.0 | 5000 | zone1 | ACTIVE |
| 10.xxxx.210 | 4.1.0.0 | 5000 | zone3 | ACTIVE |
+---------------+---------+------+-------+--------+
obclient -h10.xxxx.208 -P5000 -uroot -p'xxxx' -Doceanbase -A

Connect to obproxy ok
+-------------------------------------------------+
|                     obproxy                     |
+---------------+------+-----------------+--------+
| ip            | port | prometheus_port | status |
+---------------+------+-----------------+--------+
| 10.xxxx.209 | 2883 | 2884            | active |
| 10.xxxx.208 | 2883 | 2884            | active |
| 10.xxxx.210 | 2883 | 2884            | active |
+---------------+------+-----------------+--------+
obclient -h10.xxxx.209 -P2883 -uroot -p'xxxx' -Doceanbase -A
Connect to Obagent ok
+------------------------------------------------------------------+
|                             obagent                              |
+---------------+--------------------+--------------------+--------+
| ip            | mgragent_http_port | monagent_http_port | status |
+---------------+--------------------+--------------------+--------+
| 10.xxxx.209 | 8089               | 8088               | active |
| 10.xxxx.208 | 8089               | 8088               | active |
| 10.xxxx.210 | 8089               | 8088               | active |
+---------------+--------------------+--------------------+--------+
Connect to ocp-express ok
+------------------------------------------------------------------+
|                           ocp-express                            |
+---------------------------+----------+------------------+--------+
| url                       | username | default_password | status |
+---------------------------+----------+------------------+--------+
| http://10.xxxx.209:8180 | admin    | oceanbase        | active |
+---------------------------+----------+------------------+--------+
Trace ID: c3049c64-efa3-11ed-bf3a-525400b51421

创建 OCP 管理平台域名 Nginx 转发

办公环境仅能访问生产 80 端口,DNS 域名->nginx 80->10.xxxx.209:8180(OCP 管理平台)
http://ob-ocp-xxxx.db.dmall.com/

cat oceanbase-ocp.conf 
server { 
           listen       80; 
           server_name  ob-ocp-gz01.db.dmall.com; 

           location / { 
               proxy_pass http://10.xxxx.209:8180; 
               index  index.html index.htm index.jsp; 
           } 
       } 

创建 MySQL 租户

命令行中创建租户存在 timeout 错误,登录时失败(和官方人员沟通后在 OCP 平台创建租户正常成功,推测命令行创建租户 memory_size 过大,OCP 中创建限制为 10G)。

# 创建资源单元
create resource unit ut1 max_cpu 30, memory_size '16G';

# 创建资源池
create resource pool p1 unit 'ut1',unit_num 1,ZONE_LIST ('zone1', 'zone2' ,'zone3');

# 创建租户
select now(); create tenant if not exists mysql CHARSET='utf8mb4', ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1,zone2,zone3',resource_pool_list=('p1') set ob_tcp_invited_nodes='%';select now();
ERROR 4012 (HY000): Timeout

# MySQL 租户登录
obclient -h127.0.0.1 -P5000 -uroot@mysql -Doceanbase -A
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 4725 (HY000): tablet does not exist

创建分区表示例

OceanBase 分布式分片基于分区表实现,大表必须创建分区。

CREATE TABLE `snapshot_innodb_status_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `stat_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  ......
   PRIMARY KEY (`id`,stat_time),
  KEY `idx_port` (`port`),
  KEY `idx_ip` (`ip`),
  KEY `idx_stat_time` (`stat_time`)
)  partition by range (year(stat_time)*100+month(stat_time)) (
PARTITION p0  VALUES LESS THAN(202201),
PARTITION p1  VALUES LESS THAN(202203),
PARTITION p2  VALUES LESS THAN(202205),
PARTITION p3  VALUES LESS THAN(202207),
PARTITION p4  VALUES LESS THAN(202209),
PARTITION p5  VALUES LESS THAN(202211),
PARTITION p6  VALUES LESS THAN(202301),
PARTITION p7  VALUES LESS THAN(202303),
PARTITION p8  VALUES LESS THAN(202305),
PARTITION p9  VALUES LESS THAN(202307),
PARTITION p10  VALUES LESS THAN(202309),
PARTITION p11  VALUES LESS THAN(202311),
PARTITION p12  VALUES LESS THAN MAXVALUE
);

CREATE TABLE `redis_app_minute_command_statistics` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `app_id` int(11) NOT NULL COMMENT '应用id',
  `collect_time` datetime NOT NULL,
  .........
  PRIMARY KEY (`id`,collect_time),
  UNIQUE KEY `app_id` (`app_id`,`collect_time`,`command_name`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_collect_time_app_id_command_name` (`collect_time`,`app_id`,`command_name`)
)  ENGINE=InnoDB  
partition by range (year(collect_time)*100+month(collect_time)) (
PARTITION p0  VALUES LESS THAN(202201),
PARTITION p1 VALUES LESS THAN(202203),
PARTITION p2 VALUES LESS THAN(202205),
PARTITION p3 VALUES LESS THAN(202207),
PARTITION p4 VALUES LESS THAN(202209),
PARTITION p5 VALUES LESS THAN(202211),
PARTITION p6 VALUES LESS THAN(202301),
PARTITION p7 VALUES LESS THAN(202303),
PARTITION p8 VALUES LESS THAN(202305),
PARTITION p9 VALUES LESS THAN(202307),
PARTITION p10 VALUES LESS THAN(202309),
PARTITION p11 VALUES LESS THAN(202311),
PARTITION p12 VALUES LESS THAN MAXVALUE
);

注意:OceanBase 数据库社区版暂不支持 utf8mb4_unicode_ciutf16_unicode_ci,主键(多列)和唯一索引(多列)必须包含分区键。否则创建分区表报错:

ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function

时间分区键必须是 datetime,不能是 timestamp,否则报错。

ERROR 1486 (HY000): Constant or random or timezone-dependent expressions in (sub)partitioning function are not allowed

更多分区表 的使用建议。

DRC 同步 MySQL 至 OceanBase

我们 DRC 自研同步工具支持 MySQL->OceanBase(DRC 还能支持 MySQL->MySQL,MySQL->TiDB),官方 OMS 迁移工具安装管理者工具 OAT。内部 MySQL 监控快照库空间 660G(单副本) 迁移至 OceanBase 单副本空间 110G,压缩率约为 1/6

MySQL 单副本:

OceanBase 单副本:

MySQL->OceanBase 数据简单一致校验:

MySQL 采用 show table status;,OceanBase 查询 information_schema.tablesshow table status 中无 rows 信息,也和官方人员确认过)。

实践中因有 2 张上百 G 大表在 DRC 工具全量期间目标 OB 时常有异常报错,2 张上百 G 大表全量采用 mydumper + myloader 手动备份还原至 OceanBase,DRC 工具增量同步。

DRC 同步期间存在 OceanBase 目标端出现错误问题:目标端执行 SQL 出现错误。

!io.ReadFull(header) failed. err EOF: connection was bad,Table [redis_monitor_data_min -> redis_monitor_data_min]

因 DRC 同步大表时频繁出现以上错误,大表改为 mydumper 多线程逻辑备份还原也偶尔出现异常。

# myloader 多线程还原出现异常错误
 CRITICAL **: 10:45:12.333: Error switching to database xxx whilst restoring table xxxx_data_min
** (myloader:118422): CRITICAL **: 10:46:42.195: Error restoring xxx.xxxx_status_log from file xxx.xxxx_status_log.00006.sql.gz: Lost connection to MySQL server during query

增大租户内存和减小转储比例后 myloader 多线程还原没有出现异常错误。

旧配置新配置
freeze_trigger_percentage 70%freeze_trigger_percentage 30%
租户 memory_size 10G租户 memory_size 15G

关键配置

注意:

datafile_size 不支持缩小(支持增大,需 reload 重启集群),配置后就会预分配(datafile_disk_percentage 默认95%)占用空间

ll -h /data/oceanbases1/sstable/block_file 
-rw-r--r-- 1 root root 1.5T May  4 16:35 /data/oceanbases1/sstable/block_file
[oceanbase-ce] server1(127.0.0.1): DO NOT decrease datafile_size after startup
  • memory_limit

    OBServer 的最大可使用内存数。由于最低内存配置为 64 GB,预留部分给系统使用,则建议 OBServer 独占 58 GB,即系统租户内存与程序内存共 58 GB

  • system_memory

    系统预留给租户 ID 为 500 的租户的内存容量

    obclient> ALTER SYSTEM SET system_memory='xxG';
    
  • rootservice_memory_limit

    Root Service 的最大内存容量限制

    obclient> ALTER SYSTEM SET rootservice_memory_limit='2G';
    
  • ob_query_timeout

    SQL 最大执行时间,单位是微秒。

    超时会报错

    ERROR 4012 (HY000): Timeout, query has reached the maximum query timeout: 10000000(us), maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again.
    

常用命令

手动收集信息

CALL dbms_stats.gather_table_stats('test', 'sbtest1', granularity=>'GLOBAL', method_opt=>'FOR ALL COLUMNS SIZE 128');

# 使用 Oracle 模式语法
ALTER SYSTEM SET ENABLE_SQL_EXTENSION = TRUE;
ANALYZE TABLE sbtest1 COMPUTE STATISTICS FOR ALL COLUMNS SIZE 128;

更多手动收集统计信息 的使用建议。

租户资源的创建

创建资源配置

obclient> CREATE RESOURCE UNIT uc1 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T' ;

必选配置项

  • MAX_CPU
  • MEMORY_SIZE
  • MIN_CPU 默认等于 MAX_CPU
  • MIN_IOPS 默认等于 MAX_IOPS
  • LOG_DISK_SIZE 默认等于 3 倍的内存大小,最小为 2G
  • MIN_IOPS 和 MAX_IOPS 的值根据 MIN_CPU 规格自动计算,1 个 Core 对应 1 万 IOPS 值,即 MAX_IOPS = MIN_IOPS = MIN_CPU * 10000

创建资源池

obclient> CREATE RESOURCE POOL rp1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('zone1', 'zone2');
  • UNIT ‘uc1’ 表示为该资源池指定的资源配置为 uc1,该资源池下的每个资源单元使用 uc1 的规格进行配置;
  • ZONE_LIST (‘zone1’,‘zone2’) 是为资源池指定的使用范围,表示该资源池要在 zone1 和 zone2 上创建资源单元;
  • UNIT_NUM 2 是为资源池指定资源单元的个数,表示在 ZONE_LIST 内的每个 Zone 上都创建 2 个资源单元。

创建租户

obclient> CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('z1', 'z2');
obclient>CREATE RESOURCE POOL pool2 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('z3');
obclient>CREATE TENANT tt resource_pool_list=('pool1','pool2');

tt 租户下有 2 个资源池。

删除租户

Drop tenant mysql force ;

Drop resource pool p1;

Drop RESOURCE UNIT ut1;

查看租户资源配置

SELECT t1.name resource_pool_name,
       t2.`name` unit_config_name,
       t2.max_cpu,
       t2.min_cpu,
       t2.memory_size/1024/1024/1024 memory_size,
                                     t3.unit_id,
                                     t3.zone,
                                     concat(t3.svr_ip,':',t3.`svr_port`) observer,
                                     t4.tenant_id,
                                     t4.tenant_name
FROM __all_resource_pool t1
JOIN __all_unit_config t2 ON (t1.unit_config_id=t2.unit_config_id)
JOIN __all_unit t3 ON (t1.`resource_pool_id` = t3.`resource_pool_id`)
LEFT JOIN __all_tenant t4 ON (t1.tenant_id=t4.tenant_id)
ORDER BY t1.`resource_pool_id`,
         t2.`unit_config_id`,
         t3.unit_id ;
+--------------------+------------------+---------+---------+-----------------+---------+-------+----------------+-----------+-------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | memory_size     | unit_id | zone  | observer       | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+-----------------+---------+-------+----------------+-----------+-------------+
| sys_pool           | sys_unit_config  |       1 |       1 |  8.500000000000 |       1 | zone1 | 127.0.0.1:2882 |         1 | sys         |
| p1                 | ut1              |      32 |      32 | 16.000000000000 |    1001 | zone1 | 127.0.0.1:2882 |      1002 | mysql       |
+--------------------+------------------+---------+---------+-----------------+---------+-------+----------------+-----------+-------------+

查看单元配置

select
  name,
  max_cpu,
  round(memory_size / 1024 / 1024 / 1024, 2) 'memory_size_GB'
from
  __all_unit_config;
+-----------------+---------+----------------+
| name            | max_cpu | memory_size_GB |
+-----------------+---------+----------------+
| sys_unit_config |       1 |           8.50 |
| ut1             |      32 |          16.00 |
+-----------------+---------+----------------+

查看各 OBServer 剩余资源单元

select
  svr_ip,
  svr_port,
  zone,
  round((cpu_capacity_max - cpu_assigned_max), 2) 'cpu_free_num',
  cpu_capacity_max 'cpu_total_num',
  round((mem_capacity - mem_assigned) / 1024 / 1024 / 1024, 2) 'mem_free_GB',
  round(memory_limit / 1024 / 1024 / 1024, 2) 'mem_total_GB',
  round(DATA_DISK_IN_USE / 1024 / 1024 / 1024, 2) as data_used_GB,
  round(DATA_DISK_CAPACITY / 1024 / 1024 / 1024, 2) as data_total_GB,
  round(LOG_DISK_CAPACITY / 1024 / 1024 / 1024, 2) as log_total_GB,
  round(LOG_DISK_IN_USE / 1024 / 1024 / 1024, 2) as log_used_GB
from
  gv$ob_servers;
+-----------+----------+-------+--------------+---------------+-------------+--------------+--------------+---------------+--------------+-------------+
| svr_ip    | svr_port | zone  | cpu_free_num | cpu_total_num | mem_free_GB | mem_total_GB | data_used_GB | data_total_GB | log_total_GB | log_used_GB |
+-----------+----------+-------+--------------+---------------+-------------+--------------+--------------+---------------+--------------+-------------+
| 127.0.0.1 |     2882 | zone1 |         7.00 |            40 |        9.50 |        64.00 |       192.00 |        192.00 |       192.00 |       40.69 |
+-----------+----------+-------+--------------+---------------+-------------+--------------+--------------+---------------+--------------+-------------+

查看所有 OBServer 节点

select zone,svr_ip,svr_port,inner_port,with_rootserver,status,gmt_create from __all_server order by zone, svr_ip;

查看当前租户

show Tenant ;
+---------------------+
| Current_tenant_name |
+---------------------+
| mysql               |
+---------------------+
1 row in set (0.002 sec)

修改资源池

obclient> CREATE RESOURCE UNIT uc1 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '32G', MMAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T';

obclient> CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('z1', 'z2');

obclient> CREATE RESOURCE POOL pool2 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('z3');

obclient> CREATE TENANT tt resource_pool_list=('pool1','pool2');

obclient> ALTER RESOURCE UNIT uc1 MAX_CPU 6,  MEMORY_SIZE '36G';

ALTER RESOURCE UNIT config_mysql_zone1_20C10G_vcq MEMORY_SIZE='12G';

# 支持的在线扩容资源单元
ALTER RESOURCE UNIT unit_name 
MEMORY_SIZE [=] 'size_value',
MAX_CPU [=] cpu_num, 
[MIN_CPU [=] cpu_num,]
[MAX_IOPS [=] iops_num,]
[MIN_IOPS [=] iops_num,] 
[LOG_DISK_SIZE [=] 'size_value'];
  
# 调大 OceanBase 集群磁盘最大空间百分比(默认预分配data_size的95%)
ALTER system SET datafile_disk_percentage = 98;

# 调大 OceanBase 用户租户内存最大内存百分比(默认mem_size的50%) 
alter system set memstore_limit_percentage =70;
 
# 提高转储速度
alter system set freeze_trigger_percentage=30;

更多管理资源池的使用建议。

限制

  1. OceanBase 社区版暂不支持字符序 utf8mb4_general_ci
    更多关于 OceanBase 与 MySQL 的兼容性。

  2. OceanBase 创建 user 只支持明文方式,密文方式(identified as xxx)不支持。支持 CREATE USER 'dmall_xxxx'@'10.%.%.%' identified by 'xxx';

  3. 若超过磁盘限额配置写入会报错(除了机器磁盘空间报警外还需对 OBServer data 空间使用率做报警)。

    error, errno = 4184, state = '53100': Server out of disk space
    

    处理方式为扩容资源单元或者 edit-config 修改 datafile_size: 后 reload 集群重启生效。

  4. 若超过内存限额配置写入会报错(高 TPS 场景下 OceanBase 很消耗内存)。

    SQL error, errno = 4013, state = 'HY001': No memory or reach tenant memory limit
    

处理方式为扩容资源单元、开启写入限速以及调整转储阈值(调高转储线程数,加快转储,让内存尽快释放)。更多参考租户内存写满。

总结

  • OceanBase 在 QPS、读写延迟、存储压缩方面均不错(生产 MySQL 一监控场景库空间:OceanBase 空间为 6:1 单副本,660G:110G 单副本);
  • 高 TPS 场景可以适当调整租户内存使用参数、转储参数;
  • OceanBase 不同租户资源隔离(IOPS,内存,CPU)更好适配多业务场景;
  • OBD 白屏部署方式更加高效、直观,OCP 管理平台功能全面;
  • 业务应用方使用 OceanBase 比 MySQL 有点区别(大表创建分区表,用户名需带租户名等)。

关于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bilinear CNN:细粒度图像分类网络,对Bilinear CNN中矩阵外积的解释。

文章目录 一、Bilinear CNN 的网络结构二、矩阵外积(outer product)2.1 外积的计算方式2.2 外积的作用 三、PyTorch 网络代码实现 细粒度图像分类(fine-grained image recognition)的目的是区分类别的子类,如判别一只狗…

【web自动化测试】Web网页测试针对性的流程解析

前言 测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试。 有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少? 其实,性能的要求比自动…

蓝桥杯2022年第十三届决赛真题-齿轮

题目描述 这天,小明在组装齿轮。 他一共有 n 个齿轮,第 i 个齿轮的半径为 ri,他需要把这 n 个齿轮按一定顺序从左到右组装起来,这样最左边的齿轮转起来之后,可以传递到最右边的齿轮,并且这些齿轮能够起到提…

小程序容器与PWA是一回事吗?

PWA代表“渐进式网络应用”(Progressive Web Application)。它是一种结合了网页和移动应用程序功能的技术概念。PWA旨在提供类似于原生应用程序的用户体验,包括离线访问、推送通知、后台同步等功能,同时又具有网页的优势&#xff…

软件验收测试该怎么进行?权威的软件检测机构应该具备哪些资质?

软件测试是软件开发周期中非常重要的一个环节。软件测试的目的是发现软件在不同环境下的各种问题,保证软件在发布前能够达到用户的要求。软件验收测试是软件测试的最后一个环节,该环节主要验证软件是否满足用户需求。那么对于软件验收测试,该…

分布式事务二 Seata使用及其原理剖析

一 Seata 是什么 Seata 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本…

【Spring源码】Spring源码导入Idea

1.基础环境准备 相关软件、依赖的版本号 Spring源码版本 5.3.x软件 ideaIU-2021.1.2.exeGradle gradle-7.2-bin.zip https://services.gradle.org/distributions/gradle-7.2-bin.zip - 网上说要单独下载gradle并配置环境变量,亲测当前5.3.X版本通过gradlew的方式进…

虚函数详解及应用场景

目录 概述1. 虚函数概述2. 虚函数的声明与重写3. 析构函数与虚函数的关系4. 虚函数的应用场景4.1. 多态性4.2. 接口定义与实现分离4.3. 运行时类型识别4.4. 多级继承与虚函数覆盖 结论 概述 虚函数是C中一种实现多态性的重要机制,它允许在基类中声明一个函数为虚函…

PDCCH monitoring capability

欢迎关注同名微信公众号“modem协议笔记”。 前段时间看search space set group (SSSG) switching相关内容时,注意到R17和R16的描述由于PDCCH monitoring capability的变化,内容有些不一样。于是就顺带看了下R16 R17PDCCH monitoring capability的内容。…

Domino 14.0早期测试版本

大家好,才是真的好。 本篇是超级图片篇,图片多,内容丰富,流量党请勿手残。 前天我们说到Engageug2023正在如火如荼进行,主题是“The Future is Now”。 因为时差的关系,实际上在写这篇公众号时&#xff…

设计模式(七):结构型之适配器模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

Java --- springboot3之web内容协商原理

一、内容协商原理 HttpMessageConverter 定制 HttpMessageConverter 来实现多端内容协商 编写WebMvcConfigurer提供的configureMessageConverters底层,修改底层的MessageConverter ResponseBody由HttpMessageConverter处理 标注了ResponseBody的返回值 将会由支持它…

蹭个高考热度,中国人民大学与加拿大女王大学金融硕士项目给你更多的选择

今日各大平台热搜都被“高考”霸屏,朋友圈里到处都是高考的祝福。期待莘莘学子都将交上满意的答卷,考出理想的未来。针对职场上的我们而言高考已是过去时,但知识的力量却是无穷的,在职的我们依然可以向上生长,中国人民…

FreeRTOS_任务相关API函数

目录 1. 任务创建和删除 API 函数 1.1 函数 xTaskCreate() 1.2 函数 xTaskCreateStatic() 1.3 函数 xTaskCreateRestricted() 1.4 函数 vTaskDelete() 2. 任务创建和删除实验(动态方法) 2.1 实验程序与分析 3. 任务创建和删除实验(静…

ZC-CLS381RGB颜色识别——配置寄存器组(上)

文章目录 前言一、ZC-CLS381RGB简介二、配置寄存器组1.主控寄存器2.检测速率寄存器2.增益寄存器2.颜色数据寄存器 三、状态转移图和信号波形图绘制总结 前言 在现代工业生产中,颜色识别技术已经成为了一个非常重要的技术。颜色识别可以用于产品质量检测、物料分类、…

特瑞仕|常见电子元器件的故障现象及原因详解

​电子元器件是现代电子设备中不可或缺的组成部分,但在长时间的使用过程中,它们也可能会出现各种故障现象。本文将详细介绍一些常见电子元器件的故障现象及原因,以帮助读者更好地理解和处理这些问题。 一、电阻器 故障现象:电阻值…

湖南人的商业策略:用“副产品免费”的模式,推动主产品消费

湖南人的商业策略:用“副产品免费”的模式,推动主产品消费 什么是副产品免费模式?(主产品要钱,副产品不要钱) 免费商业模型设计的核心就是通过延长产业链,以此来达到利润链条的延伸,在这个过程中衍生和挖掘…

1.8 掌握Scala函数

一、声明函数 (一)显式声明函数 案例演示 (1)加法函数 package net.huawei.day08import scala.io.StdIn/*** 功能:显式声明函数* 作者:* 日期:2023年03月20日*/ object Example01 {def add1…

测试用例设计方法之因果图详解

一、因果图概述 因果图是从需求中找出因(输入条件)和果(输出或程序状态的改变),通过分析输入条件之间的关系(组合关系、约束关系等)及输入和输出之间的关系绘制出因果图,再转化成判…

composer-创建自己的依赖库

1.环境 码云账号(或者GitHub)码云地址composer 官方仓库账号 Packagist composer官方仓库安装composer 2.步骤 2.1 发行composer的依赖包是需要从git 或者svn里拉取的,所以得先在码云里创建一个仓库 2.2 依赖包中必须有composer.json配置标明名字依赖等信息,配置大概如下,配…