Skip to content

OceanBase 租户配置

租户配置分类

1. 资源配置

资源配置定义了租户可以使用的系统资源,包括CPU、内存、存储等。

配置项描述单位示例
CPU租户可以使用的CPU资源8
内存租户可以使用的内存资源GB16
存储租户可以使用的存储资源GB100
IOPS租户可以使用的IOPS资源次/秒10000

2. 性能配置

性能配置影响租户的性能表现,包括SQL执行、事务处理、存储访问等。

配置项描述示例
连接数租户允许的最大连接数1000
超时时间SQL执行、事务等的超时时间30s
并行度SQL执行的最大并行度8
缓存大小各种缓存的大小配置2GB

3. 安全配置

安全配置保障租户的数据安全和访问安全。

配置项描述示例
密码策略租户用户的密码策略复杂度要求、有效期
访问控制租户的访问控制策略IP白名单、SSL/TLS
审计日志租户的审计日志配置开启审计、日志级别

4. 高级配置

高级配置包括一些特殊场景下的配置项。

配置项描述示例
租户模式租户的运行模式读写、只读
复制模式租户的复制模式同步、异步
备份策略租户的备份策略全量备份频率、保留期

租户配置操作

1. 创建资源单元

资源单元定义了单个节点上租户可以使用的资源规格。

语法格式

sql
CREATE RESOURCE UNIT unit_name
    MAX_CPU = cpu_num,
    MIN_CPU = cpu_num,
    MEMORY_SIZE = 'mem_size',
    MAX_IOPS = iops_num,
    MIN_IOPS = iops_num,
    IOPS_WEIGHT = iops_weight,
    LOG_DISK_SIZE = 'log_disk_size',
    MAX_SESSION_NUM = max_session_num;

示例

sql
-- 创建资源单元
CREATE RESOURCE UNIT small_unit
    MAX_CPU = 2,
    MIN_CPU = 2,
    MEMORY_SIZE = '4G',
    MAX_IOPS = 5000,
    MIN_IOPS = 5000,
    IOPS_WEIGHT = 1,
    LOG_DISK_SIZE = '10G',
    MAX_SESSION_NUM = 1000;

CREATE RESOURCE UNIT medium_unit
    MAX_CPU = 8,
    MIN_CPU = 8,
    MEMORY_SIZE = '16G',
    MAX_IOPS = 20000,
    MIN_IOPS = 20000,
    IOPS_WEIGHT = 1,
    LOG_DISK_SIZE = '40G',
    MAX_SESSION_NUM = 5000;

CREATE RESOURCE UNIT large_unit
    MAX_CPU = 16,
    MIN_CPU = 16,
    MEMORY_SIZE = '32G',
    MAX_IOPS = 50000,
    MIN_IOPS = 50000,
    IOPS_WEIGHT = 1,
    LOG_DISK_SIZE = '80G',
    MAX_SESSION_NUM = 10000;

2. 创建资源池

资源池是资源单元的集合,分配给租户使用。

语法格式

sql
CREATE RESOURCE POOL pool_name
    UNIT = 'unit_name',
    UNIT_NUM = unit_num,
    ZONE_LIST = ('zone1', 'zone2', 'zone3');

示例

sql
-- 创建资源池
CREATE RESOURCE POOL small_pool
    UNIT = 'small_unit',
    UNIT_NUM = 1,
    ZONE_LIST = ('zone1', 'zone2', 'zone3');

CREATE RESOURCE POOL medium_pool
    UNIT = 'medium_unit',
    UNIT_NUM = 1,
    ZONE_LIST = ('zone1', 'zone2', 'zone3');

CREATE RESOURCE POOL large_pool
    UNIT = 'large_unit',
    UNIT_NUM = 1,
    ZONE_LIST = ('zone1', 'zone2', 'zone3');

3. 创建租户

创建租户时,需要指定租户使用的资源池和其他配置。

语法格式

sql
CREATE TENANT tenant_name
    [IF NOT EXISTS]
    [CHARACTER SET = charset]
    [COLLATE = collation]
    [ZONE_LIST = ('zone1', 'zone2', 'zone3')]
    [PRIMARY_ZONE = 'primary_zone']
    [RESOURCE_POOL_LIST = ('pool1', 'pool2')]
    [DEFAULT TABLEGROUP = 'tablegroup_name']
    [LOCALITY = 'locality_description']
    [COMMENT = 'comment'];

示例

sql
-- 创建租户
CREATE TENANT test_tenant
    CHARACTER SET = utf8mb4
    COLLATE = utf8mb4_general_ci
    PRIMARY_ZONE = 'zone1,zone2,zone3'
    RESOURCE_POOL_LIST = ('medium_pool')
    LOCALITY = 'F@zone1,F@zone2,F@zone3' -- 3副本部署
    COMMENT = '测试租户';

-- 创建只读租户
CREATE TENANT readonly_tenant
    CHARACTER SET = utf8mb4
    COLLATE = utf8mb4_general_ci
    PRIMARY_ZONE = 'zone1'
    RESOURCE_POOL_LIST = ('small_pool')
    LOCALITY = 'R@zone1,R@zone2' -- 只读副本
    COMMENT = '只读租户';

4. 修改租户配置

可以修改租户的资源配置、性能配置等。

语法格式

sql
-- 修改租户资源池
ALTER TENANT tenant_name RESOURCE_POOL_LIST = ('pool_name');

-- 修改租户的primary zone
ALTER TENANT tenant_name SET PRIMARY_ZONE = 'primary_zone';

-- 修改租户的locality
ALTER TENANT tenant_name SET LOCALITY = 'locality_description';

-- 修改租户的变量配置
ALTER SYSTEM SET variable_name = 'value' TENANT = tenant_name;

示例

sql
-- 修改租户资源池
ALTER TENANT test_tenant RESOURCE_POOL_LIST = ('large_pool');

-- 修改租户的primary zone
ALTER TENANT test_tenant SET PRIMARY_ZONE = 'zone2';

-- 修改租户的locality(增加副本)
ALTER TENANT test_tenant SET LOCALITY = 'F@zone1,F@zone2,F@zone3,F@zone4';

-- 修改租户的连接数
ALTER SYSTEM SET max_connections = 2000 TENANT = test_tenant;

-- 修改租户的SQL超时时间
ALTER SYSTEM SET ob_query_timeout = 60000000 TENANT = test_tenant;

5. 查看租户配置

可以查看租户的各种配置信息。

语法格式

sql
-- 查看所有租户
SHOW TENANTS;

-- 查看租户详细信息
DESCRIBE TENANT tenant_name;

-- 查看租户的资源池
SELECT * FROM __all_resource_pool WHERE tenant_id = (SELECT tenant_id FROM __all_tenant WHERE tenant_name = 'tenant_name');

-- 查看租户的变量配置
SHOW VARIABLES TENANT = tenant_name;

-- 查看租户的系统参数
SHOW PARAMETERS TENANT = tenant_name;

示例

sql
-- 查看所有租户
SHOW TENANTS;

-- 查看test_tenant的详细信息
DESCRIBE TENANT test_tenant;

-- 查看test_tenant的资源池
SELECT * FROM __all_resource_pool WHERE tenant_id = (SELECT tenant_id FROM __all_tenant WHERE tenant_name = 'test_tenant');

-- 查看test_tenant的变量配置
SHOW VARIABLES TENANT = test_tenant;

-- 查看test_tenant的系统参数
SHOW PARAMETERS LIKE '%timeout%' TENANT = test_tenant;

租户配置最佳实践

1. 资源配置最佳实践

  • 根据业务需求配置:根据租户的业务类型和负载情况,配置合适的资源规格
  • 预留资源余量:为租户配置的资源应预留一定余量,避免资源不足影响业务
  • 资源隔离:不同租户的资源应相互隔离,避免相互影响
  • 动态调整:根据业务负载的变化,动态调整租户的资源配置
  • 使用资源池:通过资源池管理租户资源,便于统一调整和管理

2. 性能配置最佳实践

  • 连接数配置:根据业务并发需求,配置合适的最大连接数
  • 超时时间配置:根据业务SQL的执行特点,配置合适的超时时间
  • 并行度配置:根据SQL的复杂度和数据量,配置合适的并行度
  • 缓存配置:根据业务访问模式,配置合适的缓存大小
  • 参数调优:根据业务特点,调整相关的性能参数

3. 安全配置最佳实践

  • 强密码策略:配置强密码策略,要求用户使用复杂密码
  • 定期密码更换:要求用户定期更换密码,避免密码泄露
  • 访问控制:配置IP白名单,限制只允许特定IP访问租户
  • SSL/TLS:启用SSL/TLS连接,加密客户端与数据库的通信
  • 审计日志:启用审计日志,记录所有操作,便于审计和追溯

4. 高级配置最佳实践

  • 租户模式选择:根据业务需求,选择合适的租户模式(读写或只读)
  • 复制模式选择:根据业务的可用性要求,选择合适的复制模式(同步或异步)
  • 备份策略配置:根据业务的RPO要求,配置合适的备份策略
  • 多租户隔离:确保多租户之间的资源、数据和访问相互隔离
  • 租户生命周期管理:建立租户的创建、使用、调整和删除的完整生命周期管理流程

租户配置的性能优化

1. CPU配置优化

  • 合理分配CPU资源:根据租户的CPU使用情况,合理分配CPU资源
  • CPU绑定:将租户的CPU资源绑定到特定的CPU核上,减少CPU上下文切换
  • CPU优先级:为重要租户配置较高的CPU优先级,确保其性能
  • 监控CPU使用率:实时监控租户的CPU使用率,及时调整配置

2. 内存配置优化

  • 内存分配比例:合理分配内存的使用比例,包括Buffer Cache、Plan Cache、Session内存等
  • 内存限制:为租户配置合适的内存限制,避免内存溢出
  • 内存监控:实时监控租户的内存使用情况,及时调整配置
  • 内存回收:优化内存回收机制,提高内存的使用效率

3. 存储配置优化

  • 存储隔离:为不同租户配置独立的存储资源,避免相互影响
  • 存储类型:根据租户的存储需求,选择合适的存储类型(SSD、HDD等)
  • 存储配额:为租户配置合适的存储配额,避免存储资源滥用
  • 存储监控:实时监控租户的存储使用情况,及时调整配置

4. IO配置优化

  • IOPS分配:根据租户的IO需求,合理分配IOPS资源
  • IO优先级:为重要租户配置较高的IO优先级,确保其IO性能
  • IO调度:优化IO调度算法,提高IO的使用效率
  • IO监控:实时监控租户的IO使用情况,及时调整配置

租户配置的常见问题

1. 资源不足

问题描述:租户的资源不足,导致业务性能下降或无法正常运行。

可能原因

  • 租户的资源配置不足
  • 集群的整体资源不足
  • 其他租户占用了过多资源

解决方法

  • 增加租户的资源配置
  • 扩展集群的整体资源
  • 调整其他租户的资源配置
  • 优化租户的资源使用效率

2. 性能下降

问题描述:租户的性能下降,SQL执行变慢。

可能原因

  • 资源配置不合理
  • SQL语句优化不佳
  • 统计信息过期
  • 系统参数配置不合理

解决方法

  • 调整租户的资源配置
  • 优化SQL语句
  • 更新统计信息
  • 调整系统参数

3. 连接数超限

问题描述:租户的连接数超过了配置的最大值,导致无法建立新连接。

可能原因

  • 业务并发连接数过高
  • 连接泄漏(应用程序未正确关闭连接)
  • 连接池配置不合理

解决方法

  • 增加租户的最大连接数
  • 优化应用程序的连接使用
  • 调整连接池的配置
  • 监控连接使用情况,及时发现连接泄漏

4. 存储溢出

问题描述:租户的存储使用超过了配置的配额,导致无法写入数据。

可能原因

  • 数据量增长过快
  • 存储配额配置不足
  • 存在大量的临时数据或过期数据

解决方法

  • 增加租户的存储配额
  • 清理过期数据或临时数据
  • 优化数据存储,如压缩表、分区表等
  • 监控存储使用情况,预测未来存储需求

租户配置的案例分析

案例1:租户资源调整

背景:某租户的业务量增长迅速,CPU使用率持续超过90%,导致业务性能下降。

解决方案:调整租户的资源配置,增加CPU和内存资源。

实施步骤

  1. 查看租户当前的资源配置
  2. 创建更大的资源单元和资源池
  3. 将租户的资源池调整为新创建的资源池
  4. 验证调整后的资源使用情况

实施效果

  • 租户的CPU使用率下降到60%以下
  • 业务性能得到明显提升
  • 业务能够正常处理增长的请求

案例2:租户性能优化

背景:某租户的SQL执行时间较长,影响业务响应速度。

解决方案:优化租户的性能配置,调整相关参数。

实施步骤

  1. 分析慢查询,找出性能瓶颈
  2. 调整租户的并行度参数,提高复杂SQL的执行效率
  3. 增加租户的缓存大小,提高数据访问速度
  4. 调整SQL超时时间,避免长查询占用资源

实施效果

  • SQL平均执行时间从5秒缩短到1秒
  • 业务响应速度得到明显提升
  • 租户的资源使用效率提高

常见问题(FAQ)

Q1: 如何确定租户的资源配置?

A1: 确定租户资源配置的方法:

  • 分析租户的业务需求和负载情况
  • 参考类似租户的资源配置
  • 进行性能测试,确定合适的资源配置
  • 监控租户的资源使用情况,动态调整

Q2: 如何调整租户的资源配置?

A2: 调整租户资源配置的步骤:

  1. 创建新的资源单元和资源池(如果需要)
  2. 使用ALTER TENANT语句修改租户的资源池
  3. 验证调整后的资源使用情况
  4. 监控租户的性能表现

Q3: 如何优化租户的性能?

A3: 优化租户性能的方法:

  • 合理配置租户的资源
  • 优化SQL语句
  • 更新统计信息
  • 调整系统参数
  • 优化数据模型和索引

Q4: 如何监控租户的配置和性能?

A4: 监控租户配置和性能的方法:

  • 使用OCP的监控功能
  • 查询OceanBase的系统视图
  • 使用Prometheus和Grafana进行监控
  • 配置告警规则,及时发现问题

Q5: 如何管理多个租户?

A5: 管理多个租户的方法:

  • 使用角色管理多个租户的权限
  • 建立租户的标准化配置模板
  • 定期审查租户的配置和使用情况
  • 建立租户的生命周期管理流程

Q6: 如何确保租户的隔离性?

A6: 确保租户隔离性的方法:

  • 为不同租户配置独立的资源池
  • 使用资源隔离技术,如CPU隔离、内存隔离等
  • 配置合适的资源限制,避免资源滥用
  • 监控租户的资源使用情况,及时发现异常

Q7: 如何备份和恢复租户配置?

A7: 备份和恢复租户配置的方法:

  • 定期备份租户的配置信息
  • 使用OCP的配置管理功能
  • 使用SQL语句导出和导入租户配置
  • 建立配置变更的审计和回滚机制

Q8: 如何处理租户的配置冲突?

A8: 处理租户配置冲突的方法:

  • 建立统一的配置管理流程
  • 使用配置模板,确保配置的一致性
  • 定期审查配置,发现和解决冲突
  • 建立配置变更的审批机制