签到成功

知道了

CNDBA社区CNDBA社区

Oceanbase OBServer 节点架构 说明

2023-07-11 16:59 1516 0 原创 OceanBase
作者: dave

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 个目录并非都是安装必须的。

  1. 在启动 OBServer 前我们需要保证 etc、log、run、store 这 4 个目录存在,同时 store 下应该有clog、slog、sstable 这 3 个目录。
  2. etc2、etc3 是备份配置文件用的,由 OBServer 创建。
  3. audit 下存放的是审计日志,也由 OBServer 创建。
  4. 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 目录查看配置文件种的内容:http://www.cndba.cn/dave/article/131415

[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 日志和选举日志。http://www.cndba.cn/dave/article/131415http://www.cndba.cn/dave/article/131415

单个日志文件大小为 256M。当 observer.log 达到 256M 时,会将其 rename 为第二种日志,后面的数字为时间戳。

log日志 有 6 个级别,从低到高:DEBUG、TRACE、INFO、WARN、USER_ERR、ERROR。http://www.cndba.cn/dave/article/131415

这里要注意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 是事务日志目录,

  1. slog 存储静态数据写入的事务日志,
  2. 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 控制。

  1. datafile_size : 用于设置数据文件的大小。
  2. 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]$

更多说明参考:

http://www.cndba.cn/dave/article/131415

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 节点线程数上限和多租户线程数上限共同限制,可通过配置项配置。http://www.cndba.cn/dave/article/131415

线程池相关配置项有:

  1. _ob_max_thread_num:决定 OBServer 节点的线程数上限。默认值为 9999,取值范围为 [4096, 10000],非动态生效。
  2. system_cpu_quota:决定系统租户的虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小和上限大小。默认值为 10,取值范围为 [0, 16],非动态生效。
  3. server_cpu_quota_min:决定系统租户的最小虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小。默认值为 1,取值范围为 [0, 16],非动态生效。
  4. server_cpu_quota_max:决定系统租户的最大虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的上限大小。默认值为 1,取值范围为 [0, 16],非动态生效。
  5. election_cpu_quota:决定 election 租户的虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小和上限大小。默认值为 3,取值范围为 [0, 16],非动态生效。
  6. location_cache_cpu_quota:决定 location cache 租户的虚拟 CPU 个数,与机器物理 CPU 无直接关系,仅影响多租户线程池的初始大小和上限大小。默认值为 5,取值范围为 [0, 16],非动态生效。

2.2.2 租户线程

租户线程构成:单个租户的线程包含,处理嵌套请求的 7 个专有线程,处理一般请求的若干个普通线程。线程可处于活跃,挂起两种状态。由于嵌套请求的专用线程对外基本无感知。

http://www.cndba.cn/dave/article/131415

活跃线程数:活跃线程表示能正常处理请求的线程,与挂起线程区分,活跃线程数用于限制单个租户的 CPU 使用。租户运行时会维持活跃线程数恒定,租户的活跃线程数受配置项和 Unit 规格共同决定。活跃线程数 = unit_min_cpu * cpu_quota_concurrency。

大查询的线程挂起逻辑
用户发给 OBServer 节点的 SQL,可以粗略分为两类:一类 SQL 访问和操作的数据量小,所以执行很快;另一类 SQL 要访问大量的数据或者要写入大量数据,所有执行耗时长。我们把第二类耗时长的 SQL 叫做大查询。

http://www.cndba.cn/dave/article/131415

大查询的特殊处理基于一个直观的用户效用假设,从影响用户数和延迟的 QoS 要求来合理猜想:1000 个小查询被延迟的影响要远大于 1 个大查询被延迟。换言之,与其花 1s 时间处理一个大查询,不如把同样的 CPU 时间用来处理 1000 个小查询。

请求被判定为大查询的条件是,处理时间超过大查询阈值,此阈值可通过配置项调整。

租户线程中持有被判定为大查询请求的线程,一部分可直接获得继续执行权,其余的需要挂起等待。可获得继续执行权的线程的比例由配置项决定。

为了维持租户活跃线程数恒定,同时考虑到大查询线程挂起的发生,租户就需要动态的从多租户线程池中申请线程。最大线程数用于限制单个租户的内存开销,每个租户总共可持有的最大线程数受配置项和 Unit 规格共同决定。最大线程数 = unit_max_cpu * worker_per_cpu_quota。

相关配置项:

  1. cpu_quota_concurrency:决定租户活跃线程数与租户 Unit 规格的倍数关系。默认值为 4,取值范围为 [1, 10] ,动态生效。
  2. worker_per_cpu_quota:决定租户最大线程数与租户 Unit 规格的倍数关系。默认值为 10,取值范围为 [2, 20],动态生效。
  3. large_query_worker_percentage:决定租户线程中享有大查询继续执行权的线程的百分比。默认值为 30,取值范围为 [0, 100],动态生效。
  4. large_query_threshold:请求判定为大查询的处理时间阈值。默认值为 5s,取值范围为 [1ms, +∞],动态生效。

2.3 后台线程

在 OBServer 节点版本迭代中会对后台线程持续优化,因此有些后台线程会在版本升级的过程出现消失、合并等情况,也有可能会出现新的后台线程。

OBServer 主要包含如下后台线程:

  1. net io: 处理网络 io 的线程。
  2. disk io: 处理磁盘 io 的线程。
  3. dag 线程: 用于 partition 的转储,合并,迁移等任务的执行。
  4. clog writer: 写 clog 的线程。
  5. election worker: 选举线程。
  6. misc timer:包括多个后台定时器线程,主要负责清理资源。

3 OBServer 内存架构

3.1 租户架构说明

OceanBase 数据库是多租户设计的数据库,同一个进程会运行着多个租户的请求,从租户资源划分上可以分为三类:500 租户、系统租户、业务租户。

  1. 500 是个特殊的虚拟租户,共享性的、非实体租户消耗的内存都被 OceanBase 数据库划归 500 租户。
  2. 系统租户(ID 为 1)是 OceanBase 数据库自动创建的第一个实体租户,管理着集群相关的内部表,这些内部表上的请求触发的内存就划归到了 sys 租户。
  3. 业务租户(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 类:

  1. 每一个observer都包含多个租户(sys租户 & 非sys租户)的数据,但observer的内存并不是全部分配给租户
  2. observer中有些内存不属于任何租户(500 租户),属于所有租户共享的资源,称为“系统内部内存”,由system_memory参数控制,默认为 30G。

简单的说,每个租户都有对应的内存:500 租户内存、系统租户内存、业务租户内存。http://www.cndba.cn/dave/article/131415

租户(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 节点所有内存的上限,即所有租户累加不可能超过的上限,由两个参数控制:http://www.cndba.cn/dave/article/131415

  1. memory_limit_percentage:物理机或者容器物理内存的百分比。
  2. 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

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7966112次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ