资源不足,能否创建unit?

看到一个帖子截图,有点疑惑

资源不足,能否创建unit?

2 个赞

unit是规格,只有当unit被resource pool使用才会占用资源

3 个赞

何为使用?
创建资源池 可以成功, 但创建租户 失败?

1 个赞

@论坛小助手

1 个赞

创建资源池成功但创建租户失败可能的原因之一是有租户已经在使用该资源池,这将导致错误码 4626。根据提供的文档片段中的信息,解决这个问题的方法包括:

  1. 查找 __all_resource_pool 表,获取引用该资源池的租户 tenant_id
  2. 删除对应的租户。
  3. 对租户进行缩容减少资源池。
  4. 新建另一个资源池,不使用当前资源池。更具体的错误信息可以通过检查 V$OB_LS_LOG_RESTORE_STATUS 表中的系统日志流的恢复状态来获取。

详情请参考:

  1. 4500 ~ 4999
  2. 租户的资源管理
1 个赞

@论坛小助手

2 个赞

您好!看起来您提到了一些关于 OceanBase 资源管理和创建 unit 时的问题。为了更准确地解答您的疑问,我将问题拆分为几个部分进行解释。

关于资源不足时是否可以创建 unit

根据 OceanBase 的设计理念,资源单元 (unit) 的创建依赖于资源池 (resource pool) 和资源配置 (unit config)。具体来说,如果集群当前没有足够的资源来满足新创建的 unit 需求,那么创建 unit 将会失败。这是因为每个 unit 都需要一定量的 CPU、内存等资源,而这些资源必须从集群现有的资源池中分配。

创建资源池成功但创建租户失败

这种情况确实可能发生,通常原因如下:

  1. 资源池已满:如果资源池中的资源已经被其他租户或 unit 占用,且没有剩余资源可以分配给新的租户,那么创建租户将会失败。
  2. 资源配置不匹配:创建租户时指定的资源配置可能超出了资源池的容量,导致无法创建租户。
  3. 系统限制:某些系统级别的限制(如最大租户数、最大资源池数等)可能导致创建租户失败。

解决方法

  1. 检查资源池的资源使用情况

    SELECT * FROM __all_resource_pool;
    

    查看是否有其他租户正在使用该资源池,并确定资源池的当前资源使用情况。

  2. 删除或缩容现有租户
    如果资源池已经满了,可以考虑删除或缩容一些现有的租户,以释放资源。

    -- 删除租户
    DROP TENANT <tenant_name>;
    
    -- 缩容租户
    ALTER TENANT <tenant_name> SET UNIT_NUM = <new_unit_num>;
    
  3. 创建新的资源池
    如果当前资源池无法满足需求,可以考虑创建一个新的资源池。

    CREATE RESOURCE POOL <pool_name> UNIT '<unit_config>', <unit_num>;
    
  4. 调整资源配置
    如果资源配置过高,可以适当降低资源配置,使其符合资源池的容量。

    CREATE RESOURCE UNIT <unit_config> MAX_CPU <max_cpu>, MIN_CPU <min_cpu>, MEMORY_SIZE '<memory_size>';
    

总结

在资源不足的情况下,创建 unit 通常是不可行的。如果创建资源池成功但创建租户失败,可能是由于资源池已满或其他资源配置不匹配的原因。通过检查资源池的资源使用情况、删除或缩容现有租户、创建新的资源池或调整资源配置,可以解决这些问题。

希望这些信息对您有所帮助!如果您有更多问题或需要进一步的帮助,请随时告诉我。

具体信息可参考以下文档:

  1. HELP
  2. ha_low_thread_score
  3. 向量检索实践教程概述
  4. ha_mid_thread_score
  5. 系统视图总览
  6. 遇到问题如何向技术支持同学提问
  7. ha_high_thread_score
  8. 基于 OceanBase 构建智能问答机器人
  9. ALTER USER
2 个赞

需要理解此处创建资源的意义是什么!
create resource unit 命令是创建一个资源规格,比如2C/8G 的资源规格,查询资源规格信息,相关视图是DBA_OB_UNIT_CONFIGS.
unit 在ob 代表一个资源单元,OB 在创建租户的时候,就需要在指定的zone 创建一个unit. 而此时如果资源不足,就不能创建租户。
所以关键点就是create resource unit 命令是创建资源规格,此图想表达是可以创建unit(资源规格)的意思!

2 个赞

对,创建Unit不占用资源,也不检查资源是否满足,只是个定义

2 个赞

Unit是规格,resource_pool实际占用资源。

+----------------+--------------+------------------+--------------+--------------+
| SVR_IP         | CPU_CAPACITY | CPU_CAPACITY_MAX | MEMORY_LIMIT | MEM_CAPACITY |
+----------------+--------------+------------------+--------------+--------------+
| 192.168.169.43 |           12 |               12 | 49.8 GB      | 42.8 GB      |
| 192.168.169.44 |           12 |               12 | 49.8 GB      | 42.8 GB      |
| 192.168.169.45 |           12 |               12 | 49.8 GB      | 42.8 GB      |
+----------------+--------------+------------------+--------------+--------------+


CREATE RESOURCE UNIT u1 MAX_CPU 13, MIN_CPU 2, MEMORY_SIZE '16G' ;


obclient(root@sys)[oceanbase]> CREATE RESOURCE POOL rp1 UNIT 'u1', UNIT_NUM 1, ZONE_LIST('zone1','zone2','zone3');

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 '"192.168.169.43:2882"' CPU resource not enough
1 个赞

创建资源池的时候才会真正分配资源,unit只是资源的定义

1 个赞