1 OBServer 目录结构
1.1 安装目录结构
OB 的安装目录有 2 块,一个是存放软件的在/home 目录下,结构如下:
[dave@www.cndba.cn myoceanbase]$pwd
/home/admin/myoceanbase
[dave@www.cndba.cn myoceanbase]$ll
total 0
drwxrwxr-x. 12 admin admin 173 Jun 14 09:21 obagent
drwxrwxr-x. 10 admin admin 138 Jun 14 11:32 obproxy
drwxrwxr-x. 12 admin admin 155 Jun 29 13:35 oceanbase
drwxrwxr-x. 8 admin admin 75 Jun 14 09:22 ocpexpress
[dave@www.cndba.cn myoceanbase]$cd oceanbase
[dave@www.cndba.cn oceanbase]$ll
total 335348
drwxrwxr-x. 2 admin admin 4096 Jun 14 09:18 admin
drwxrwxr-x. 2 admin admin 4096 Jun 29 10:35 audit
drwxrwxr-x. 2 admin admin 70 Jul 6 11:18 bin
drwxrwxr-x. 2 admin admin 4096 Jul 6 16:31 etc
drwxrwxr-x. 2 admin admin 64 Jul 6 16:31 etc2
drwxrwxr-x. 2 admin admin 64 Jul 6 16:31 etc3
drwxrwxr-x. 2 admin admin 109 Jun 14 09:20 lib
drwxrwxr-x. 2 admin admin 4096 Jul 11 08:45 log
-rw-r--r-- 1 root root 343377550 Jun 29 13:37 log.tar.gz
drwxrwxr-x. 2 admin admin 60 Jun 29 10:35 run
lrwxrwxrwx. 1 admin admin 20 Jun 14 09:17 store -> /data/oceanbase/data
[dave@www.cndba.cn oceanbase]$
OBServer 工作目录下通常有 audit、bin、etc、etc2、etc3、log、run、store 这 8 个目录,但这 8 个目录并非都是安装必须的。
- 在启动 OBServer 前我们需要保证 etc、log、run、store 这 4 个目录存在,同时 store 下应该有clog、slog、sstable 这 3 个目录。
- etc2、etc3 是备份配置文件用的,由 OBServer 创建。
- audit 下存放的是审计日志,也由 OBServer 创建。
- bin 目录用于存放 OBServer 的二进制文件,方便后续定位。
1.2 配置文件目录
etc、etc2、etc3 都是配置文件目录。这三个目录里的内容是完全一致的,区别是后两个目录是 OBServer 创建的,第一个目录是启动前需要准备的。
[dave@www.cndba.cn etc]$pwd
/home/admin/myoceanbase/oceanbase/etc
[dave@www.cndba.cn etc]$ll
total 11104
-rw-r--r--. 1 admin admin 6748938 Jun 14 09:18 default_srs_data_mysql.sql
-rw-r--r--. 1 admin admin 161733 Jun 14 09:18 fill_help_tables-ob.sql
-rw-r----- 1 admin admin 1319 Jul 6 16:31 observer.config.bin
-rw-r----- 1 admin admin 1300 Jul 6 16:31 observer.config.bin.history
-rw-r--r--. 1 admin admin 1587 Jun 14 09:18 oceanbase_upgrade_dep.yml
-rw-r--r--. 1 admin admin 4182391 Jun 14 09:18 timezone_V1.log
-rw-r--r--. 1 admin admin 24824 Jun 14 09:18 upgrade_checker.py
-rw-r--r--. 1 admin admin 14104 Jun 14 09:18 upgrade_health_checker.py
-rw-r--r--. 1 admin admin 105317 Jun 14 09:18 upgrade_post.py
-rw-r--r--. 1 admin admin 105316 Jun 14 09:18 upgrade_pre.py
[dave@www.cndba.cn etc]$ll ../etc2
total 8
-rw-r----- 1 admin admin 1319 Jul 6 16:31 observer.conf.bin
-rw-r----- 1 admin admin 1300 Jul 6 16:31 observer.conf.bin.history
[dave@www.cndba.cn etc]$ll ../etc3
total 8
-rw-r----- 1 admin admin 1319 Jul 6 16:31 observer.conf.bin
-rw-r----- 1 admin admin 1300 Jul 6 16:31 observer.conf.bin.history
[dave@www.cndba.cn etc]$
etc2 和 etc3 是配置文件额外保存的目录,由配置项 config_additional_dir 控制。当配置修改以后,除了会写标准的 etc/observer.config.bin 以外,还会额外在这些目录创建配置项文件。
obclient [oceanbase]> SHOW PARAMETERS LIKE 'config_additional_dir'/G
*************************** 1. row ***************************
zone: zone3
svr_type: observer
svr_ip: 192.168.1.23
svr_port: 2882
name: config_additional_dir
data_type: NULL
value: etc2;etc3
info: additional directories of configure file
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
server 启动不会读取额外目录的配置项文件,只是作为额外备份。额外目录如果有权限会自动创建,没有权限则日志中报 ERROR。
配置文件中储存了集群和租户级配置项的增量信息。集群配置可以通过连接到数据库上执行 alter system 修改,也可以通过命令行传入配置项。
可以通过 strings 目录查看配置文件种的内容:
[dave@www.cndba.cn etc]$strings observer.config.bin|more
all_server_list=192.168.1.21:2882,192.168.1.22:2882,192.168.1.23:2882
__min_full_resource_pool_memory=2147483648
log_disk_size=971G
recyclebin_object_expire_time=7d
min_observer_version=4.1.0.0
enable_syslog_recycle=True
enable_syslog_wf=False
max_syslog_file_count=4
syslog_level=WDIAG
obconfig_url=http://172.21.122.31:8080/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=ocpmaster&ObRegion=myoceanbase
cluster_id=1
cluster=myoceanbase
rootservice_list=192.168.1.21:2882:2881;192.168.1.22:2882:2881;192.168.1.23:2882:2881
cpu_count=94
system_memory=44G
memory_limit=323G
zone=zone1
devname=bond0
mysql_port=2881
rpc_port=2882
datafile_size=971G
data_dir=/data/oceanbase/data
compatible=4.1.0.0
cpu_quota_concurrency=10
[1001]
compatible=4.1.0.0
[1002]
1.3 日志文件目录
[dave@www.cndba.cn log]$pwd
/home/admin/myoceanbase/oceanbase/log
[dave@www.cndba.cn log]$ll
total 5647440
-rw-r--r-- 1 admin admin 224002838 Jul 11 09:46 election.log
-rw-r--r-- 1 admin admin 268435747 Jul 10 20:32 election.log.20230710203219622
-rw-r--r-- 1 admin admin 268436024 Jul 10 23:58 election.log.20230710235843993
-rw-r--r-- 1 admin admin 268435836 Jul 11 03:25 election.log.20230711032546195
-rw-r--r-- 1 admin admin 268436386 Jul 11 06:53 election.log.20230711065319652
-rw-r--r--. 1 admin admin 27063 Jul 11 06:53 election.log.wf
-rw-r--r-- 1 admin admin 258148140 Jul 11 09:46 observer.log
-rw-r--r-- 1 admin admin 268436564 Jul 11 09:42 observer.log.20230711094247436
-rw-r--r-- 1 admin admin 268436393 Jul 11 09:43 observer.log.20230711094344120
-rw-r--r-- 1 admin admin 268435731 Jul 11 09:44 observer.log.20230711094440143
-rw-r--r-- 1 admin admin 268435538 Jul 11 09:45 observer.log.20230711094535211
-rw-r--r--. 1 admin admin 6157269 Jul 11 09:45 observer.log.wf
-rw-r--r-- 1 admin admin 118768195 Jul 11 09:46 rootservice.log
-rw-r--r-- 1 admin admin 268435462 Jul 10 20:35 rootservice.log.20230710203535785
-rw-r--r-- 1 admin admin 268436855 Jul 11 00:27 rootservice.log.20230711002754982
-rw-r--r-- 1 admin admin 268436031 Jul 11 04:09 rootservice.log.20230711040923363
-rw-r--r-- 1 admin admin 268435806 Jul 11 08:03 rootservice.log.20230711080326528
-rw-r--r--. 1 admin admin 63438 Jul 11 08:03 rootservice.log.wf
-rw-r--r-- 1 admin admin 145454675 Jul 11 09:46 trace.log
-rw-r--r-- 1 admin admin 268441743 Jul 11 09:38 trace.log.20230711093857123
-rw-r--r-- 1 admin admin 268444593 Jul 11 09:41 trace.log.20230711094105268
-rw-r--r-- 1 admin admin 268484092 Jul 11 09:43 trace.log.20230711094312126
-rw-r--r-- 1 admin admin 268500839 Jul 11 09:45 trace.log.20230711094519271
[dave@www.cndba.cn log]$
observer 的日志存放在 observer 的安装目录的 log 目录下面,分为三种日志 observer.log、rootservice.log 和 election.log,分别对应 observer 日志、RS 日志和选举日志。
单个日志文件大小为 256M。当 observer.log 达到 256M 时,会将其 rename 为第二种日志,后面的数字为时间戳。
log日志 有 6 个级别,从低到高:DEBUG、TRACE、INFO、WARN、USER_ERR、ERROR。
这里要注意wf 日志,这种是将每种日志中 WARN 级别以上的日志复制到 wf 日志中,如 observer.log.wf。由enable_syslog_wf参数控制,默认为 true。
当 enable_syslog_recycle 设置为 true、max_syslog_file_count 大于 0 时日志文件会自动回收。其中,enable_syslog_recycle 用于设置是否开启自动回收,max_syslog_file_count 用于设置每种日志的最大日志数量。
具体配置参考之前的播客:
Oceanbase 修改参数 控制日志保留 数量
https://www.cndba.cn/dave/article/131407
1.4 数据文件目录
[dave@www.cndba.cn oceanbase]$ll
total 335348
drwxrwxr-x. 2 admin admin 4096 Jun 14 09:18 admin
drwxrwxr-x. 2 admin admin 4096 Jun 29 10:35 audit
drwxrwxr-x. 2 admin admin 70 Jul 6 11:18 bin
drwxrwxr-x. 2 admin admin 4096 Jul 6 16:31 etc
drwxrwxr-x. 2 admin admin 64 Jul 6 16:31 etc2
drwxrwxr-x. 2 admin admin 64 Jul 6 16:31 etc3
drwxrwxr-x. 2 admin admin 109 Jun 14 09:20 lib
drwxrwxr-x. 2 admin admin 4096 Jul 11 09:45 log
-rw-r--r-- 1 root root 343377550 Jun 29 13:37 log.tar.gz
drwxrwxr-x. 2 admin admin 60 Jun 29 10:35 run
lrwxrwxrwx. 1 admin admin 20 Jun 14 09:17 store -> /data/oceanbase/data
[dave@www.cndba.cn oceanbase]$
[dave@www.cndba.cn data]$pwd
/data/oceanbase/data
[dave@www.cndba.cn data]$ll
total 4
lrwxrwxrwx. 1 admin admin 25 Jun 14 09:17 clog -> /data/oceanbase/redo/clog
drwxrwxr-x. 16 admin admin 4096 Jul 6 16:31 slog
drwxrwxr-x. 2 admin admin 24 Jun 14 09:20 sstable
[dave@www.cndba.cn data]$
store 是数据文件目录,包含了 clog、slog、sstable 这 3个子目录。
其中 clog、slog 是事务日志目录,
- slog 存储静态数据写入的事务日志,
- clog 存储动态数据写入的事务日志。
[dave@www.cndba.cn sstable]$pwd
/data/oceanbase/data/sstable
[dave@www.cndba.cn sstable]$ll -lh
total 972G
-rw-r--r--. 1 admin admin 971G Jul 11 09:01 block_file
[dave@www.cndba.cn sstable]$
sstable 是基线数据目录。sstable 目录下会有一个 block_file,这个文件在 observer 启动后就会被创建,文件的大小由 datafile_size 或 datafile_disk_percentage 控制。
- datafile_size : 用于设置数据文件的大小。
- datafile_disk_percentage 表示占用 data_dir 所在磁盘( data_dir 所在磁盘将被 OceanBase 数据库系统初始化用于存储数据)总空间的百分比。
1.5 REDO 目录结构
[dave@www.cndba.cn clog]$pwd
/data/oceanbase/redo/clog
[dave@www.cndba.cn clog]$ll
total 364
drwxr--r--. 2 admin admin 327680 Jul 11 09:08 log_pool
drwxrwxr-x. 3 admin admin 15 Jun 14 09:20 tenant_1
drwxrwxr-x. 3 admin admin 15 Jun 14 09:21 tenant_1001
drwxrwxr-x. 6 admin admin 51 Jun 14 09:21 tenant_1002
drwxrwxrwx. 3 admin admin 15 Jun 26 09:22 tenant_1011
drwxrwxrwx. 6 admin admin 51 Jun 26 09:22 tenant_1012
drwxrwxrwx. 3 admin admin 15 Jun 26 14:39 tenant_1013
drwxrwxrwx. 6 admin admin 51 Jun 26 14:39 tenant_1014
drwxrwxrwx 3 admin admin 15 Jul 3 17:13 tenant_1015
drwxrwxrwx 6 admin admin 51 Jul 3 17:13 tenant_1016
drwxrwxrwx 3 admin admin 15 Jul 4 09:58 tenant_1019
drwxrwxrwx 6 admin admin 51 Jul 4 09:59 tenant_1020
drwxrwxrwx 3 admin admin 15 Jul 6 16:31 tenant_1027
drwxrwxrwx 6 admin admin 51 Jul 6 16:31 tenant_1028
[dave@www.cndba.cn clog]$
更多说明参考:
Oceanbase 中 Redo 日志 说明
https://www.cndba.cn/dave/article/131411
2 OBServer 线程模型
OBServer 和达梦数据库一样,也是单进程多种线程的架构,线程分工作线程和后台线程。
2.1 查看线程信息
可以通过 ps 命令查看所有线程:
[dave@www.cndba.cn data]$ps -p 56120 -T
PID SPID TTY TIME CMD
56120 56120 ? 00:00:14 observer
56120 56121 ? 01:15:25 ServerGTimer
56120 56122 ? 00:00:00 FreezeTimer
56120 56123 ? 00:04:00 SqlMemTimer
56120 56124 ? 00:00:10 ServerTracerTim
56120 56125 ? 00:00:00 CTASCleanUpTime
56120 56126 ? 00:08:11 MemDumpTimer
56120 56127 ? 00:00:02 ConfigMgr
56120 56128 ? 07:41:07 OB_PLOG
……
我们过滤去重一下:
[dave@www.cndba.cn data]$ps -p 56120 -T|awk '{print $5}'|awk '!a[$0]++{print}'
observer
ServerGTimer
FreezeTimer
SqlMemTimer
ServerTracerTim
CTASCleanUpTime
MemDumpTimer
ConfigMgr
OB_PLOG
TimezoneMgr
SrsMgr
……
DiagnoseQueueTh
pnlisten
pnio
BRPC0
……
rl_mgr0
ObHeartbeat
SerScheQueue0
SerScheQueue1
EvtHisUpdTask
TbltTblUp0
TbltTblUp1
……
ObTimer
RSAsyncTask0
RSAsyncTask1
RSAsyncTask2
RSAsyncTask3
RSInspectTask
HBChecker
RsThreadChecker
EmptSvrCheck
LostRepCheck
RootBalance
BackupTaskSched
BackupMgr
LOG_ARCHIVE_SER
SchemaRec
BackupLease
unknonw0
DRTaskMgr
MaintainDepInfo
SysLocAsyncUp0
……
sql_nio15
IO_SCHEDULE0
IO_HEALTH0
T506_L0_G0
……
因为租户比较多,这里还是只贴出部分:
[dave@www.cndba.cn data]$ps -p 56120 -T|awk '{print $5}'|wc -l
3648
[dave@www.cndba.cn data]$ps -p 56120 -T|awk '{print $5}'|awk '!a[$0]++{print}'|wc -l
1425
[dave@www.cndba.cn data]$
2.2 工作线程
工作线程:sql/transaction worker 处理 SQL 和事务请求的线程。是分租户的,也即每个租户都有自己的一套 sql/transaction worker,也称租户工作线程。
2.2.1 多租户线程池
多租户共享一个大线程池,租户从线程池中申请工作线程。线程池跟随多租户进行初始化和销毁,多租户初始化时,预先申请一定数目的线程,后续在租户运行过程中,还支持动态的扩展线程池。
初始线程池大小与 observer 节点的 CPU 数,系统租户预留线程数,虚拟租户预留线程数有关,部分可通过配置项配置。后续扩展线程池时的线程数上限受 OBServer 节点线程数上限和多租户线程数上限共同限制,可通过配置项配置。
线程池相关配置项有:
- _ob_max_thread_num:决定 OBServer 节点的线程数上限。默认值为 9999,取值范围为 [4096, 10000],非动态生效。
- system_cpu_quota:决定系统租户的虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小和上限大小。默认值为 10,取值范围为 [0, 16],非动态生效。
- server_cpu_quota_min:决定系统租户的最小虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小。默认值为 1,取值范围为 [0, 16],非动态生效。
- server_cpu_quota_max:决定系统租户的最大虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的上限大小。默认值为 1,取值范围为 [0, 16],非动态生效。
- election_cpu_quota:决定 election 租户的虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小和上限大小。默认值为 3,取值范围为 [0, 16],非动态生效。
- location_cache_cpu_quota:决定 location cache 租户的虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小和上限大小。默认值为 5,取值范围为 [0, 16],非动态生效。
2.2.2 租户线程
租户线程构成:单个租户的线程包含,处理嵌套请求的 7 个专有线程,处理一般请求的若干个普通线程。线程可处于活跃,挂起两种状态。由于嵌套请求的专用线程对外基本无感知。
活跃线程数:活跃线程表示能正常处理请求的线程,与挂起线程区分,活跃线程数用于限制单个租户的 CPU 使用。租户运行时会维持活跃线程数恒定,租户的活跃线程数受配置项和 Unit 规格共同决定。活跃线程数 = unit_min_cpu * cpu_quota_concurrency。
大查询的线程挂起逻辑
用户发给 OBServer 节点的 SQL,可以粗略分为两类:一类 SQL 访问和操作的数据量小,所以执行很快;另一类 SQL 要访问大量的数据或者要写入大量数据,所有执行耗时长。我们把第二类耗时长的 SQL 叫做大查询。
大查询的特殊处理基于一个直观的用户效用假设,从影响用户数和延迟的 QoS 要求来合理猜想:1000 个小查询被延迟的影响要远大于 1 个大查询被延迟。换言之,与其花 1s 时间处理一个大查询,不如把同样的 CPU 时间用来处理 1000 个小查询。
请求被判定为大查询的条件是,处理时间超过大查询阈值,此阈值可通过配置项调整。
租户线程中持有被判定为大查询请求的线程,一部分可直接获得继续执行权,其余的需要挂起等待。可获得继续执行权的线程的比例由配置项决定。
为了维持租户活跃线程数恒定,同时考虑到大查询线程挂起的发生,租户就需要动态的从多租户线程池中申请线程。最大线程数用于限制单个租户的内存开销,每个租户总共可持有的最大线程数受配置项和 Unit 规格共同决定。最大线程数 = unit_max_cpu * worker_per_cpu_quota。
相关配置项:
- cpu_quota_concurrency:决定租户活跃线程数与租户 Unit 规格的倍数关系。默认值为 4,取值范围为 [1, 10] ,动态生效。
- worker_per_cpu_quota:决定租户最大线程数与租户 Unit 规格的倍数关系。默认值为 10,取值范围为 [2, 20],动态生效。
- large_query_worker_percentage:决定租户线程中享有大查询继续执行权的线程的百分比。默认值为 30,取值范围为 [0, 100],动态生效。
- large_query_threshold:请求判定为大查询的处理时间阈值。默认值为 5s,取值范围为 [1ms, +∞],动态生效。
2.3 后台线程
在 OBServer 节点版本迭代中会对后台线程持续优化,因此有些后台线程会在版本升级的过程出现消失、合并等情况,也有可能会出现新的后台线程。
OBServer 主要包含如下后台线程:
- net io: 处理网络 io 的线程。
- disk io: 处理磁盘 io 的线程。
- dag 线程: 用于 partition 的转储,合并,迁移等任务的执行。
- clog writer: 写 clog 的线程。
- election worker: 选举线程。
- misc timer:包括多个后台定时器线程,主要负责清理资源。
3 OBServer 内存架构
3.1 租户架构说明
OceanBase 数据库是多租户设计的数据库,同一个进程会运行着多个租户的请求,从租户资源划分上可以分为三类:500 租户、系统租户、业务租户。
- 500 是个特殊的虚拟租户,共享性的、非实体租户消耗的内存都被 OceanBase 数据库划归 500 租户。
- 系统租户(ID 为 1)是 OceanBase 数据库自动创建的第一个实体租户,管理着集群相关的内部表,这些内部表上的请求触发的内存就划归到了 sys 租户。
- 业务租户(ID 从 1002 开始)就是集群安装后由 DBA 创建的跑业务流量的实体租户,这些租户的请求触发的内存就划归租户自己。
obclient [oceanbase]> select TENANT_ID,TENANT_NAME ,TENANT_TYPE from dba_ob_tenants;
+-----------+-------------+-------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE |
+-----------+-------------+-------------+
| 1 | sys | SYS |
| 1001 | META$1002 | META |
| 1002 | ocp | USER |
| 1011 | META$1012 | META |
| 1012 | tpcc_mysql | USER |
| 1013 | META$1014 | META |
| 1014 | oms | USER |
| 1015 | META$1016 | META |
| 1016 | backup | USER |
| 1019 | META$1020 | META |
| 1020 | open_gpt | USER |
| 1027 | META$1028 | META |
| 1028 | sync | USER |
+-----------+-------------+-------------+
13 rows in set (0.004 sec)
从 V4.0.0 版本开始,引入了 Meta 租户概念。因此,每个业务租户包含:用户租户和 Meta 租户。
Meta 租户是 OceanBase 数据库内部自管理的租户,每创建一个用户租户系统就会自动创建一个对应的 Meta 租户,其生命周期与用户租户保持一致。
Meta 租户用于存储和管理用户租户的集群私有数据,这部分数据不需要进行跨库物理同步以及物理备份恢复,这些数据包括:配置项、位置信息、副本信息、日志流状态、备份恢复相关信息、合并信息等。
3.2 内存架构说明
OB系统内部内存主要分 2 类:
- 每一个observer都包含多个租户(sys租户 & 非sys租户)的数据,但observer的内存并不是全部分配给租户
- observer中有些内存不属于任何租户(500 租户),属于所有租户共享的资源,称为“系统内部内存”,由system_memory参数控制,默认为 30G。
简单的说,每个租户都有对应的内存:500 租户内存、系统租户内存、业务租户内存。
租户(SYS 和业务租户)可用的总内存:“observer内存上限” – “系统内部内存”
500 租户比较特殊,dba_ob_tenants查询不到,但通过线程可以看到相关信息:
[dave@www.cndba.cn slog]$ps -p 56120 -T|awk '{print $5}'|awk '!a[$0]++{print}'|grep T5
T506_L0_G0
T506_L2_G0
T506_L3_G0
T506_L4_G0
T506_L5_G0
T506_L6_G0
T506_L7_G0
……
3.2.1 OBServer 节点总内存
表示 OBServer 节点所有内存的上限,即所有租户累加不可能超过的上限,由两个参数控制:
- memory_limit_percentage:物理机或者容器物理内存的百分比。
- memory_limit:绝对数值。当 memory_limit 非 0 时,使用 memory_limit 作为上限,否则使用 memory_limit_percentage 计算后的值作为上限。
obclient [oceanbase]> SHOW PARAMETERS LIKE 'memory_limit'/G
*************************** 1. row ***************************
zone: zone1
svr_type: observer
svr_ip: 192.168.1.21
svr_port: 2882
name: memory_limit
data_type: NULL
value: 323G
info: the size of the memory reserved for internal use(for testing purpose), 0 means follow memory_limit_percentage. Range: 0, [1G,).
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
obclient [oceanbase]> SHOW PARAMETERS LIKE 'memory_limit_percentage'/G
*************************** 1. row ***************************
zone: zone3
svr_type: observer
svr_ip: 192.168.1.23
svr_port: 2882
name: memory_limit_percentage
data_type: NULL
value: 80
info: the size of the memory reserved for internal use(for testing purpose). Range: [10, 90]
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
3.2.2 高优先级预留内存(memory_reserved)
表示给一些特别重要的底层模块预留的一块空间。
可以通过 memory_reserved 参数进行设置。
obclient [oceanbase]> SHOW PARAMETERS LIKE 'memory_reserved'/G
*************************** 1. row ***************************
zone: zone3
svr_type: observer
svr_ip: 192.168.1.23
svr_port: 2882
name: memory_reserved
data_type: NULL
value: 500M
info: the size of the system memory reserved for emergency internal use. Range: [10M, total size of memory]
section: SSTABLE
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
……
3.2.3 500 租户内存(system_memory)
表示 500 租户预留内存,可以通过 system_memory 参数进行设置。
注意它不是 limit 的语义,目前的实现上 500 租户实际可使用内存是可能突破 system_memory 的,但其他租户可使用内存不会超过 OBServer 节点总内存(即 system_memory 的值)。
obclient [oceanbase]> SHOW PARAMETERS LIKE 'system_memory'/G
*************************** 1. row ***************************
zone: zone2
svr_type: observer
svr_ip: 192.168.1.22
svr_port: 2882
name: system_memory
data_type: NULL
value: 44G
info: the memory reserved for internal use which cannot be allocated to any outer-tenant, and should be determined to guarantee every server functions normally. Range: [0M,)
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
3.2.4 业务租户内存(UNIT 控制)
业务租户内存由租户创建 Unit 时指定。命令示例如下。
create resource unit if not exists sp_trans_test MAX_CPU=1, MEMORY_SIZE='5G', MAX_IOPS=128000, MIN_IOPS=128000, LOG_DISK_SIZE='2G';
create resource pool if not exists sp_trans_test unit='sp_trans_test', unit_num=1;
create tenant if not exists sp_trans_test RESOURCE_POOL_LIST=('sp_trans_test') set ob_tcp_invited_nodes='%';
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS/G
*************************** 1. row ***************************
UNIT_CONFIG_ID: 1001
NAME: ocp_unit
CREATE_TIME: 2023-06-14 09:21:20.449489
MODIFY_TIME: 2023-06-28 17:49:53.577593
MAX_CPU: 1
MIN_CPU: 1
MEMORY_SIZE: 4294967296
LOG_DISK_SIZE: 32212254720
MAX_IOPS: 10000
MIN_IOPS: 10000
IOPS_WEIGHT: 1
3.2.5 sys 租户内存(UNIT 控制)
sys 租户就是实体租户,它的管理机制与业务租户完全一致。
3.2.6 租户内存分类
租户内存分为两类,MemStore 与 SQL 执行。
3.2.6.1 MemStore
主要用于保存数据库增量数据。MemStore 上限由参数 MemStore_limit_percentage 控制,它表示租户 MemStore 最多占租户总内存上限的百分比。freeze_trigger_percentage 参数用于控制转储时机,它表示当 MemStore 内存达到 MemStore 上限的某个百分比时触发转储,租户 MemStore 的使用可以通过内部表查看 。
obclient [oceanbase]> select tenant_id,active_span,freeze_trigger,memstore_used,memstore_limit From gv$ob_memstore order by 1;
+-----------+-------------+----------------+---------------+----------------+
| tenant_id | active_span | freeze_trigger | memstore_used | memstore_limit |
+-----------+-------------+----------------+---------------+----------------+
| 1 | 524288000 | 2147483640 | 524288000 | 10737418200 |
| 1 | 536870912 | 2147483640 | 536870912 | 10737418200 |
| 1 | 520093696 | 2147483640 | 520093696 | 10737418200 |
| 1001 | 48234496 | 77117020 | 48234496 | 536870900 |
| 1001 | 41943040 | 68998740 | 41943040 | 536870900 |
| 1001 | 62914560 | 79214180 | 54525952 | 536870900 |
| 1002 | 58720256 | 322122540 | 58720256 | 1610612700 |
| 1002 | 58720256 | 322122540 | 58720256 | 1610612700 |
……
3.2.6.2 SQL 执行
表示 SQL 执行所需要的内存以及为了提高吞吐做的缓存,比如 SQL 执行计划等。
sql_work_area是 SQL 工作区内存参数,表示 SQL 可能耗费大量内存的阻塞性算子所使用的内存。
obclient [oceanbase]> SHOW PARAMETERS LIKE '%sql_work_area%'/G
*************************** 1. row ***************************
zone: zone2
svr_type: observer
svr_ip: 192.168.1.22
svr_port: 2882
name: sql_work_area
data_type: NULL
value: 1G
info: Work area memory limitation for tenant
section: OBSERVER
scope: TENANT
source: DEFAULT
edit_level: STATIC_EFFECTIVE
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:达梦 DM8 DCM
- 下一篇:OceanBase 统计信息 管理 说明