meta租户疑问

用户租户有自己的resource pool和unit 资源,请问用户租户的meta租户有没有单独的资源?还是和用户租户公用资源?如何公用资源呢?

1 个赞

metadb 租户和对应的用户租户共享资源

1 个赞

Meta 租户的资源配置

Meta 租户没有独立的 Unit,租户资源管理过程中不管理 Meta 租户。系统在创建租户时默认为 Meta 租户预留资源,各项资源从用户租户的资源中扣除。目前 Meta 租户的各项资源采用默认配置,不支持用户指定,包括:CPU、MEMORY、IOPS 以及 LOG_DISK_SIZE。

其中:

  • CPU 资源:Meta 租户和用户租户共享 CPU 资源,不做隔离。考虑到公有云最小 1c2G 的售卖模式,CPU 规格最小为 1c。在 GV$OB_UNITS 视图中展示的 Meta 租户的 CPU 资源规格为 NULL,表示与用户租户共享 CPU 资源。
  • MEMORY 资源:内存资源不支持共享,Meta 租户和用户租户的内存资源需要隔离。默认 Meta 租户占整体租户规格的 10%。为了保证 Meta 租户正常运行,Meta 租户内存资源规格最小为 512M,不设最大值。整体租户内存规格减去 Meta 租户内存规格即为用户租户的内存规格。整体租户规格最小值调整为 1G。下面举例说明:
    1. 租户规格大于等于 10G 时,Meta 租户和用户租户内存规格比例为 1:9
    2. 租户规格大于等于 2G 时,Meta 租户的内存规格固定为 1G,剩余资源给用户租户
    3. 租户规格小于 2G 时,Meta 租户固定分配 512M,剩余资源给用户租户
    4. 租户规格最小 1G,Meta 租户占用 512M,用户租户占用 512M
  • 日志盘资源:日志盘资源规格用户可以不指定,默认值为内存资源的3倍大小,最小值为 2G。日志盘资源和内存资源一样,不支持共享,Meta 租户和用户租户的日志盘资源需要隔离。默认,Meta 租户占整体租户规格的 10%。为了保证 Meta 租户正常运行,Meta 租户的日志盘资源规格最小为 512M。
  • IOPS资源:Meta 租户和用户租户共享 IOPS 资源,不做隔离。在 GV$OB_UNITS 视图中展示的 Meta 租户的 IOPS 资源规格会为 NULL,表示与用户租户共享 IOPS 资源。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001429672

1 个赞


这样明显有限问题,租户的内存分配中memstore 默认也是50%租户内存,如果租户规格是2G内存时,那两者就把内存用完了!

这里表述不太严谨,应该表述为占租户(1G)的50%

1 个赞

我的意思是 meta租户占租户内存资源50%, memstore也占50%,那就没有其他的内存可用了

比如给1008租户分了2G,则meta租户(1007)占1G,1008占1G, memstore占的50% 是这个1G的50%,不是2G的50%

1 个赞

这样解释肯定是有问题的,基本上都是认为:租户的memstore 是租户unit规格的50%。

这个问题好解决,你可以建个租户查询下这两个视图看下

GV$OB_MEMSTORE
GV$OB_TENANT_MEMORY

1 个赞

租户1002资源内存规格:


mysql> select TENANT_ID,MEMORY_SIZE/1024/1024/1024 from dba_ob_units where tenant_id=1002;
+-----------+----------------------------+
| TENANT_ID | MEMORY_SIZE/1024/1024/1024 |
+-----------+----------------------------+
|      1002 |            48.000000000000 |
|      1002 |            48.000000000000 |
|      1002 |            48.000000000000 |
+-----------+----------------------------+

MEMORY_SIZE=48G

分配给用户租户的:


mysql> select tenant_id,hold/1024/1024/1024 as "hold in GB"  from GV$OB_TENANT_MEMORY where tenant_id=1002;
+-----------+-----------------+
| tenant_id | hold in GB      |
+-----------+-----------------+
|      1002 | 39.449661254883 |
|      1002 | 39.457771301270 |
|      1002 | 39.457756042480 |
+-----------+-----------------+
当前租户的有效内存是39.5G,也不是上面所说的memory_size(48G)--meta内存(48G*10%)=43.2GB

用户租户的memstore分配的:

mysql> select TENANT_ID,MEMSTORE_LIMIT/1024/1024/1024 from GV$OB_MEMSTORE where tenant_id=1002;
+-----------+-------------------------------+
| TENANT_ID | MEMSTORE_LIMIT/1024/1024/1024 |
+-----------+-------------------------------+
|      1002 |               17.279999963938 |
|      1002 |               17.279999963938 |
|      1002 |               17.279999963938 |
+-----------+-------------------------------+
3 rows in set (0.01 sec)

租户的MEMSTORE_LIMIT约是17GB

  • MEMORY 资源:内存资源不支持共享,Meta 租户和用户租户的内存资源需要隔离。默认 Meta 租户占整体租户规格的 10%。为了保证 Meta 租户正常运行,Meta 租户内存资源规格最小为 512M,不设最大值。整体租户内存规格减去 Meta 租户内存规格即为用户租户的内存规格。整体租户规格最小值调整为 1G。下面举例说明:
    1. 租户规格大于等于 10G 时,Meta 租户和用户租户内存规格比例为 1:9
    2. 租户规格大于等于 2G 时,Meta 租户的内存规格固定为 1G,剩余资源给用户租户
    3. 租户规格小于 2G 时,Meta 租户固定分配 512M,剩余资源给用户租户
    4. 租户规格最小 1G,Meta 租户占用 512M,用户租户占用 512M

有点疑惑,实际内存跟这个算法不一致。

另外一些文档的算法也是错误的,如下:

这个查出来是多少?

1 个赞
mysql> select tenant_id,hold/1024/1024/1024 as "hold in GB" from GV$OB_TENANT_MEMORY where tenant_id=1001;
+-----------+----------------+
| tenant_id | hold in GB     |
+-----------+----------------+
|      1001 | 4.451454162598 |
|      1001 | 4.303016662598 |
|      1001 | 4.371376037598 |
+-----------+----------------+
3 rows in set (0.00 sec)

memory_size=48G
用户租户 39.5G
meta租户 4.5GB
感觉有4G内存被吃掉了一样。

GV$OB_TENANT_MEMORY 这个视图里面的hold+free 是租户分配的总内存

1 个赞

1 个赞

我的版本是 4.3.0.1

资源规格内存 =meta租户内存 + 用户租户内存
用户租户内存= memstore + 可变区域内存

现在的情况是 sum(meta租户内存 + 用户租户内存) != memory_size

你在计算meta租户内存或者用户租户内存时只算了hold部分,你需要将free也算上

select sum(hold+free) from GV$OB_TENANT_MEMORY where tenant_id=xxx

1 个赞

一直以为 hold就是分配的 ,还有个free :smile: