本文主要分享如何在Windows 笔记本电脑上体验 OB 社区版 4.1 以及 OCP express 。
笔记本电脑内存建议 10GB 以上,Windows 10 或 Windows 11 。
# 环境准备
## WSL2 子系统
WSL 是 Windows 推出的Linux 子系统,最新版本是 WSL2 。由了这个 Linux 子系统,就可以在 Windows 笔记本上上学习各种开源数据库。强烈推荐给大家。
具体安装方法也很简单,网上参考:[如何在 Windows 10 上安装 WSL 2 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/337104547)
WSL2 默认是 Ubuntu 系统。安装软件推荐使用 APT (不是 YUM) 。 `apt` 的源建议改为国内镜像。下面文件可以直接替换。
root@MQBOOK:~# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
root@MQBOOK:~# apt update
```
OB 和 OCP express 的安装部署建议放到普通用户 `admin` 下。生产环境也是这样要求的。
所以,WSL2 需要新建用户 admin (需要先建 HOME 目录)。
mkdir -p /home/admin/
useradd admin -g admin -d /home/admin
echo 'admin:712009A7AC'|chpasswd
chown -R admin.admin /home/admin/
更改用户默认 SHELL 为 BSHELL 。
chsh
$ chsh
Password:
Changing the login shell for admin
Enter the new value, or press ENTER for the default
Login Shell [/bin/sh]: /bin/bash
退出重登录即可。
## 开启 SWAP 分区
笔记本内存不大,为了避免后面使用过程中内存不足,这个学习环境开启 SWAP 分区。
root@MQBOOK:~# free -h
total used free shared buff/cache available
Mem: 9.7Gi 5.9Gi 123Mi 3.0Mi 3.7Gi 3.5Gi
Swap: 0B 0B 0B
这里没有启用 SWAP ,所以需要创建一个 SWAP 分区。
dd if=/dev/zero of=/swapfile count=10240 bs=1M
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
root@MQBOOK:~# free -h
total used free shared buff/cache available
Mem: 9.7Gi 6.3Gi 124Mi 3.0Mi 3.3Gi 3.1Gi
Swap: 9Gi 0B 9Gi
## 会话配置
OB 数据库跟其他数据库一样,要求提升 Linux 的用户会话的默认资源限制。
vim + /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* hard core unlimited
* soft core unlimited
* hard stack 10240
* soft stack 10240
* hard cpu unlimited
* soft cpu unlimited
查看方法。
admin@MQBOOK:~$ ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 39772
max locked memory (kbytes, -l) 1273536
max memory size (kbytes, -m) unlimited
open files (-n) 655360
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 655360
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
## OpenSSH
默认 WSL2 子系统没有安装 SSH 服务,这里安装一个。后面 OB 安装需要 SSH 到本机。
sudo apt-get install openssh-server
systemctl disable ssh
systemctl start ssh
systemctl status ssh
## JDK 1.8
后面安装会依赖 JAVA 版本,写死了要求是 1.8 版本的 JDK。 尽管 WSL 里带的 JAVA 版本高于 1.8 还是要安装一个 低版本的 JDK 。
sudo apt install openjdk-8-jdk
## OBCE 软件
下载地址:[OceanBase 社区版下载 - 开源数据库下载 - OceanBase 数据库下载中心](https://www.oceanbase.com/softwarecenter)
文件解压缩后分布如下:
root@MQBOOK:~/soft/oceanbase-all-in-one# sh bin/install.sh
add auto set env logic to profile: /root/.bash_profile
#####################################################################
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
=====================================================================
root@MQBOOK:~/soft/oceanbase-all-in-one# source ~/.oceanbase-all-in-one/bin/env.sh
root@MQBOOK:~/soft/oceanbase-all-in-one# obd
# 安装部署
安装是通过启动一个 WEB 程序来引导的,非常方便。
## OCP-Express 部署向导
root@MQBOOK:~/soft/oceanbase-all-in-one# obd web
start OBD WEB in 0.0.0.0:8680
please open http://127.0.1.1:8680
这里 [http://127.0.1.1:8680](http://127.0.1.1:8680) 打不开,改为 [http://127.0.0.1:8680/](http://127.0.0.1:8680/) 。
* 部署配置
选择“完全部署”。
- 节点配置
* 集群配置
更多配置里需要自定义一些参数:
|组件|集群参数名|参数值|备注|
|:----|:----|:----|:----|
|OB|devname|eth0| |
| |datafile_size|10G| |
| |log_disk_size|10G| |
| |enable_syslog_recycle|true| |
| |max_syslog_file_count|5| |
| |memory_limit|8G| |
| |system_memory|1G| |
| |cpu_count|16| |
| |ocp_meta_tenant_max_cpu|4| |
| |ocp_meta_tenant_memory_size|3G| |
| |ocp_meta_tenant_log_disk_size|5G| |
|OBProxy|proxy_mem_limited|1G| |
| |obproxy_sys_password|aaAA11__| |
|OCPExpress|memory_size|1G| |
| |logging_file_max_history|1| |
| |java_bin|/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java| |
* 预检查
`java_bin` 的版本要求必须是 jdk 1.8 。高于这个版本在这里检查也不通过。无奈只好再安装一个低版本的 JDK。
* 开始部署
部署成功后提示如下:
复制关键信息如下(删除了 JSON 格式中的空白行)。
```json
[
{
"component": "oceanbase-ce",
"access_url": "172.18.246.119:2881",
"user": "root",
"password": "aaAA11__",
"connect_url": "obclient -h172.18.246.119 -P2881 -uroot -p'aaAA11__' -Doceanbase -A"
},
{
"component": "obproxy-ce",
"access_url": "172.18.246.119:2883",
"user": "root",
"password": "aaAA11__",
"connect_url": "obclient -h172.18.246.119 -P2883 -uroot -p'aaAA11__' -Doceanbase -A"
},
{
"component": "ocp-express",
"access_url": "172.18.246.119:8180",
"user": "admin",
"password": "g51(i@EL",
"connect_url": "http://172.18.246.119:8180"
}
]
```
注意,上面提示的 obclient 连接方式后面建议再增加一个参数 `-c` 。这样后期写的 SQL HINT 不会被命令行 obclient 忽略掉。
部署程序已经退出!
如需再次启动,请前往中控服务器执行 `obd web`
## 目录结构
熟悉 OB 其他版本目录结构的可以对比看看 这个版本的目录结构。外层目录有变化,内层目录保持不变。
admin@MQBOOK:~$ pwd
/home/admin
admin@MQBOOK:~$ tree -FL 3
./
└── obcedemo/
├── obagent/
│ ├── backup/
│ ├── bin/
│ ├── conf/
│ ├── log/
│ ├── pkg_store/
│ ├── position_store/
│ ├── run/
│ ├── site-packages/
│ ├── task_store/
│ └── tmp/
├── obproxy/
│ ├── bin/
│ ├── control-config/
│ ├── etc/
│ ├── lib/
│ ├── log/
│ ├── obproxyd.sh
│ ├── run/
│ └── sharding-config/
├── oceanbase/
│ ├── admin/
│ ├── audit/
│ ├── bin/
│ ├── etc/
│ ├── etc2/
│ ├── etc3/
│ ├── lib/
│ ├── log/
│ ├── run/
│ └── store/
└── ocpexpress/
├── bin/
├── conf/
├── lib/
├── log/
└── run/
37 directories, 1 file
```
## ODC 客户端安装
下载地址:[OceanBase 社区版下载 - 开源数据库下载 - OceanBase 数据库下载中心](https://www.oceanbase.com/softwarecenter)
这个是 Windows 图形化安装,非常方便就不介绍了。下载企业版也可以使用。后面我用的是企业版 ODC 。
其他非OB官方的 OB 社区版的客户端推荐用 [DBeaver](https://dbeaver.io) 。
ODC 里新建一个 OB-MySQL 租户连接。
# OCP-Express 探索
OCP express 首页如下,非常精简。
## 数据库连接
如何连接 OB 。上面 OCP express 安装后给出的连接方式虽然能连接成功,严格来说有几个问题。
**问题一:用户名不严格**
obclient -h172.18.246.119 -P2883 -uroot -p'aaAA11__' -Doceanbase -A
```
OB 集群内部会有多租户,连接的时候需要指定集群名和租户名。当然 OB Proxy的连接里隐含了两个逻辑。
* 当没有指定集群名的时候,会默认连接该 OBProxy初始化时指定的集群。
* 当没有指定租户名的时候,会默认连接 SYS 租户。
这个虽然对初学者来说很友好,但可能为将来生产运维误操作带来习惯。比如说业务同学可能连到 SYS 租户去建库建表,运维可能连接到 SYS 租户执行错变更等等。
因此建议用户名采取OB 严格的格式。如 `root@sys#obcedemo` 或 `obcedemo:sys:root` 。这样在连接的时候就能明确看出连接的是哪个集群名和租户名。
**问题二:命令行缺乏参数**`-c`
上面命令行参数缺乏 `-c` , 会导致 SQL 中如果有注释 `/*+ xxx */` 被忽略掉。
## 资源分配
OB 集群支持多租户。集群将所有节点的机器资源(CPU、内存和磁盘)据为己有并二次分配给多个租户。OB 集群的系统租户 sys 和 隐藏的内部租户会占用一部分资源,剩余的就是给 OB 上应用的。OCP-express 也会占用一部分资源,再剩下的还可以再利用。
严格来说这个 OB 集群是给 OCP-express 做元数据库用的,不能放业务应用的数据。不过这里机器资源有限,主要是学习 OB 以及 OCP,所以可以通过 OCP express 在 OB 集群里再分配一个 MySQL 租户出来。
首先要确认剩余可分配资源。
这个 Unit 分布仍然沿用 OB 3.x 版本的设计,磁盘显示的数据文件的资源。不过 从 OB 4.0 开始,日志空间是单独分配和计算了。如果日志空间资源不足,租户也会创建失败。
准确的查看剩余资源 SQL 如下:
select svr_ip, CPU_CAPACITY, (CPU_CAPACITY-CPU_ASSIGNED) CPU_FREE
, round(MEM_CAPACITY/1024/1024/1024) MEM_CAPACITY_GB, round((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024,2) MEM_FREE_GB
, round(DATA_DISK_CAPACITY/1024/1024/1024) DATA_CAPACITY_GB, round((DATA_DISK_CAPACITY-DATA_DISK_IN_USE)/1024/1024/1024,2) DATA_FREE_GB
, round(DATA_DISK_CAPACITY/1024/1024/1024) LOG_CAPACITY_GB, round((LOG_DISK_CAPACITY-LOG_DISK_IN_USE)/1024/1024/1024,2) LOG_FREE_GB
from GV$OB_SERVERS ;
```
+----------------+--------------+----------+-----------------+-------------+------------------+--------------+-----------------+-------------+
| svr_ip | CPU_CAPACITY | CPU_FREE | MEM_CAPACITY_GB | MEM_FREE_GB | DATA_CAPACITY_GB | DATA_FREE_GB | LOG_CAPACITY_GB | LOG_FREE_GB |
+----------------+--------------+----------+-----------------+-------------+------------------+--------------+-----------------+-------------+
| 172.18.246.119 | 16 | 7 | 7 | 2.00 | 10 | 9.93 | 10 | 9.44 |
+----------------+--------------+----------+-----------------+-------------+------------------+--------------+-----------------+-------------+
1 row in set (0.02 sec)
```
这里最进展的就是内存资源,显示剩余内存资源恰好是 2.00 GB 。
但是如果我们创建租户的时候真的分配 2GB,实际是分配不出来的。
下面测试一下资源分配,为了简单使用 MySQL 客户端直接连接 OB SYS 租户。
mysql -h172.18.246.119 -P2883 -uroot@sys#obcedemo -p'aaAA11__' -Doceanbase -A
mysql> create resource unit 2c2g_unit max_cpu 2, min_cpu 2, memory_size '2G', log_disk_size '8G', max_iops 100000 ,min_iops 1024, iops_weight 100;
Query OK, 0 rows affected (0.02 sec)
mysql> create resource pool mysql_pool unit '2c2g_unit', unit_num 1, zone_list ('zone1');
ERROR 4733 (HY000): zone 'zone1' resource not enough to hold 1 unit. You can check resource info by views: DBA_OB_UNITS, GV$OB_UNITS, GV$OB_SERVERS.
server '"172.18.246.119:2882"' LOG_DISK resource not enough
```
这里 LOG_DISK 空间不是看使用剩余空间,而是看分配的剩余空间。
mysql> select name, max_cpu,min_cpu,round(memory_size/1024/1024/1024,2) mem_size_gb
, round(log_disk_size/1024/1024/1024,2) log_disk_size_gb
from __all_unit_config ;
+-----------------+---------+---------+-------------+------------------+
| name | max_cpu | min_cpu | mem_size_gb | log_disk_size_gb |
+-----------------+---------+---------+-------------+------------------+
| sys_unit_config | 1 | 1 | 2.00 | 2.00 |
| ocp_unit | 8 | 8 | 3.00 | 5.00 |
| 2c2g_unit | 2 | 2 | 2.00 | 8.00 |
+-----------------+---------+---------+-------------+------------------+
3 rows in set (0.00 sec)
```
前面安装部署的时候指定集群总的可用日志空间是 10G, 扣除这里 SYS 租户和 OCP 租户使用 7GB,剩余可用的是 3GB 。所以资源规格的 LOG DISK 空间大小改为 3GB 后即可分配。
mysql> alter resource unit 2c2g_unit log_disk_size '3G';
Query OK, 0 rows affected (0.03 sec)
mysql> create resource pool mysql_pool unit '2c2g_unit', unit_num 1, zone_list ('zone1');
Query OK, 0 rows affected (0.05 sec)
```
OK,这里我们再删除手动创建的资源池和资源规格。后面改用 OCP express 分配。
mysql> drop resource pool mysql_pool;
Query OK, 0 rows affected (0.02 sec)
mysql> drop resource unit 2c2g_unit;
Query OK, 0 rows affected (0.01 sec)
在 OCP express 里当想分配一个 2C1G 的资源单元规格时,被页面拦截了,说是可分配的内存资源范围时 `2G-2G` 。
这个最大的 `2G` 是由剩余可分配内存决定的,最小的 `2G` 是由租户资源规格最小值参数 `__min_full_resource_pool_memory` 定义的。这个默认值是 2G 。对于我这个内存资源并不充沛的环境,这个要求有点高。这个可以下调为 1G 。后面详细看看参数这块。
## 参数管理
### 集群参数
OCP expresss 在集群和租户的管理界面里都有参数管理。下面是集群的参数管理界面。
这可以看到这个参数管理里没有参数 `__min_full_resource_pool_memory` ,因为这个参数是隐含参数。
隐含参数目前还不知道在哪个视图里查询,我们到命令行下去看看。
mysql> show parameters like '__min_full_resource_pool_memory';
Empty set (0.09 sec)
通过 `show parameters` 也查不到这个参数。不过可以直接查看 OB 的参数文件。
su - admin
admin@MQBOOK:~$ cd /home/admin/obcedemo/oceanbase
admin@MQBOOK:~/obcedemo/oceanbase$ strings etc/observer.config.bin |grep min_full
__min_full_resource_pool_memory=2147483648
这个参数是 OBServer 节点启动初始化时通过命令行参数传递进去的。
admin@MQBOOK:~$ ps -ef|grep observer |grep -v grep
admin 5882 1 99 08:35 ? 03:01:45 /home/admin/obcedemo/oceanbase/bin/observer -r 172.18.246.119:2882:2881 -p 2881 -P 2882 -z zone1 -n obcedemo -c 1 -d /home/admin/obcedemo/oceanbase/store -i eth0 -o __min_full_resource_pool_memory=2147483648,datafile_size=10G,log_disk_size=10G,enable_syslog_recycle=True,max_syslog_file_count=5,memory_limit=8G,system_memory=1G,cpu_count=16,enable_syslog_wf=False
admin@MQBOOK:~$
命令行里还能看到这个参数,说明这个 OBServer 节点没有重启过。
下面尝试修改这个参数。
mysql> alter system set __min_full_resource_pool_memory='1G';
ERROR 4147 (HY000): Invalid config
mysql> alter system set `__min_full_resource_pool_memory` = '1G';
ERROR 4147 (HY000): Invalid config
```
目前看 OB 命令行下不支持修改这个隐含参数。参数文件也不允许修改,那就只有重启 observer 进程并传递命令行参数了。
admin@MQBOOK:~$ ls
obcedemo
admin@MQBOOK:~$ cd obcedemo/oceanbase/
admin@MQBOOK:~/obcedemo/oceanbase$ kill -9 `pidof observer`
admin@MQBOOK:~/obcedemo/oceanbase$ ps -ef|grep observer
admin 23084 16375 0 10:39 pts/0 00:00:00 grep observer
admin@MQBOOK:~/obcedemo/oceanbase$ bin/observer -o '__min_full_resource_pool_memory=1073741824'
bin/observer: error while loading shared libraries: libmariadb.so.3: cannot open shared object file: No such file or directory
admin@MQBOOK:~/obcedemo/oceanbase$ find . |grep libmariadb.so
./lib/libmariadb.so.3
./lib/libmariadb.so
admin@MQBOOK:~/obcedemo/oceanbase$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/obcedemo/oceanbase/lib/' >> ~/.bash_profile
admin@MQBOOK:~/obcedemo/oceanbase$ . ~/.bash_profile
admin@MQBOOK:~/obcedemo/oceanbase$ bin/observer -o '__min_full_resource_pool_memory=1073741824'
bin/observer -o __min_full_resource_pool_memory=1073741824
optstr: __min_full_resource_pool_memory=1073741824
admin@MQBOOK:~/obcedemo/oceanbase$ ps -ef|grep observer |grep -v grep
admin 23275 901 99 10:40 ? 00:00:55 bin/observer -o __min_full_resource_pool_memory=1073741824
admin@MQBOOK:~/obcedemo/oceanbase$
admin@MQBOOK:~/obcedemo/oceanbase$ strings etc/observer.config.bin |grep min_full
__min_full_resource_pool_memory=1073741824
注意上面的步骤要点:
* 杀 `observer` 进程可以用 `kill` 命令。紧急情况可以带 `-9` 参数。
* 启动 OB 进程必须在软件的 HOME 目录,这里是: `/home/admin/obcedemo/oceanbase` ,企业版默认的 HOME 目录一般是 `/home/admin/oceanbase` 。要进入到 `oceanbase` 这层目录,名字也可以不是叫 `oceanbase` 。
* 启动 OB 进程传递参数用 `-o 'xxx=yyy'` 。启动成功后就持久化到参数文件中了。
再次进入 OCP 中创建租户,内存可以分配的范围就变为 `1G-2G` 了。
### 租户参数
创建租户的时候可以自定义租户参数,租户参数跟 MySQL 的变量(VARIABLE)是一个概念。
这里修改一下 OB 语句超时时间,默认10 秒太短,改为 1000 秒。 还有两个事务超时时间,以前的 OB 版本里事务超时时间也很短,这里 4.1 版本的租户的默认事务超时参数看来已经调大了。
mysql> show global variables like 'ob_%eout%';
+---------------------+------------------+
| Variable_name | Value |
+---------------------+------------------+
| ob_pl_block_timeout | 3216672000000000 |
| ob_query_timeout | 10000000 |
| ob_trx_idle_timeout | 86400000000 |
| ob_trx_lock_timeout | -1 |
| ob_trx_timeout | 86400000000 |
+---------------------+------------------+
5 rows in set (0.01 sec)
## 任务流
所有数据库的自动化运维平台都支持任务流,区别只是体验和稳定性方面。上面创建了一个租户,OCP express 也是使用任务流来创建。
从子任务列表以及对应的日志可以大概推出租户创建的一些步骤。这也是学习 OB 管理的一个方法。
租户创建成功后如下:
## OB 测试 TPC-C
这里为了通过 OCP express 观察 OB 性能,先构造一小部分测试数据。测试场景就选择常用的 BenchmarkSQL TPC-C 。数据量 10 仓。
### 准备测试数据库和用户
在 OCP express 里可以新建租户下的数据库和用户。
这个比较简单,就不赘述了。
### BMSQL OB 参数文件
下面是 BMSQL 连接 OB 的参数文件,主要是 `conn` 和 `user` 部分。
root@MQBOOK:~/soft/benchmarksql-5.0/run# cat props.ob
db=oracle
driver=oracle.jdbc.driver.OracleDriver
conn=jdbc:oceanbase://172.18.246.119:2883/tpccdb?useUnicode=true&characterEncoding=utf-8
user=tpcc@obmysql#obcedemo
password=aaAA11__
warehouses=10
loadWorkers=1
terminals=1
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=false
//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
//resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
//osCollectorScript=./misc/os_collector_linux.py
//osCollectorInterval=1
//osCollectorSSHAddr=user@dbhost
//osCollectorDevices=net_eth0 blk_sda
```
笔记本机器资源紧张,仓库数设置为 10仓,1并发加载,1并发压测。
### 建表并初始化数据
建表:
root@MQBOOK:~/soft/benchmarksql-5.0/run# sh runSQL.sh props.ob sql.ob/tableCreates.sql
```
加载数据:
root@MQBOOK:~/soft/benchmarksql-5.0/run# sh runLoader.sh props.ob
```
虽然是 1 并发,但是本机内存资源很小,加载还是很慢的。
### 测试方法
```bash
root@MQBOOK:~/soft/benchmarksql-5.0/run# sh runBenchmarkSQL.sh props.ob
## 性能监控
可以通过 OCP 的租户性能监控查看 BMSQL 数据初始化过程。
OB 的性能调优和 OCP 性能监控这次就不详细介绍了。有兴趣的可以查看以前的分享。大部分原理还是跟以前的版本一样。
一切部署好后,查看笔记本 WSL 子系统可用内存如下。
admin@MQBOOK:~/obcedemo/oceanbase$ free -h
total used free shared buff/cache available
Mem: 9.7Gi 7.3Gi 199Mi 3.0Mi 2.2Gi 2.1Gi
Swap: 9Gi 934Mi 9.1Gi
# 更多阅读
有关 OB 安装部署、性能分析调优原理,有兴趣的可以看看以前的文章。
* [OB 内存分配概述 (qq.com)](https://mp.weixin.qq.com/s/DYTOri_Cq6XWKOmZc5EeBg)
* [如何在小内存服务器上玩转 OB 企业版部署 (qq.com)](https://mp.weixin.qq.com/s/ylsUfmvDCBnRvj-DXgnU5A)
* [OceanBase 2.x体验:用BenchmarkSQL跑TPC-C (qq.com)](https://mp.weixin.qq.com/s/dNrbQVrLl-HHke8ptu5vPQ)
* [#OceanBase 直播序列 (qq.com)](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzU3OTc2MDQxNg==&scene=1&album_id=1337099788302745601&count=3#wechat_redirect)