外观
OceanBase 资源隔离参数
核心概念
资源隔离是OceanBase多租户架构的核心特性之一,用于在共享硬件资源的情况下,实现不同租户之间的资源隔离和配额管理。资源隔离参数是指用于配置和控制资源隔离行为的各种参数,包括CPU、内存、IO、磁盘等资源的隔离设置。合理配置资源隔离参数可以确保不同租户之间的资源互不影响,避免资源抢占和饥饿问题,提高系统的整体可用性和稳定性。资源隔离参数的配置直接影响到多租户环境下的资源利用率和租户体验。
CPU资源隔离参数
1. CPU配额参数
功能:控制租户可使用的CPU资源配额 适用场景:
- 多租户环境下的CPU资源分配
- 防止单个租户占用过多CPU资源
- 确保关键租户的CPU资源保障
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
cpu_quota | 租户CPU资源配额(核数) | 根据租户需求设置 |
cpu_quota_min | 租户最小CPU配额(核数) | 0.5-1 |
cpu_quota_max | 租户最大CPU配额(核数) | 根据集群总CPU设置 |
cpu_shares | CPU资源权重,用于资源竞争时的分配比例 | 1024-4096 |
enable_cpu_overcommit | 是否允许CPU超分配 | FALSE |
配置示例:
sql
-- 设置租户CPU配额为8核
ALTER TENANT test_tenant SET cpu_quota = 8;
-- 设置租户最小CPU配额为1核
ALTER TENANT test_tenant SET cpu_quota_min = 1;
-- 设置租户CPU权重为2048
ALTER TENANT test_tenant SET cpu_shares = 2048;2. CPU调度参数
功能:控制CPU资源的调度行为 适用场景:
- 优化CPU调度性能
- 调整CPU调度公平性
- 处理高并发CPU密集型场景
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
cpu_scheduler | CPU调度器类型 | cfs |
cpu_cfs_quota_us | CFS调度器配额(微秒) | 根据cpu_quota计算 |
cpu_cfs_period_us | CFS调度器周期(微秒) | 1000000 |
cpu_rt_runtime_us | 实时调度器运行时间(微秒) | 950000 |
cpu_rt_period_us | 实时调度器周期(微秒) | 1000000 |
配置示例:
sql
-- 设置CPU调度器为CFS
ALTER SYSTEM SET cpu_scheduler = 'cfs' GLOBAL;
-- 设置CFS调度器周期为1秒
ALTER SYSTEM SET cpu_cfs_period_us = 1000000 GLOBAL;内存资源隔离参数
1. 内存限制参数
功能:控制租户可使用的内存资源限制 适用场景:
- 多租户环境下的内存资源分配
- 防止单个租户占用过多内存资源
- 避免内存不足导致的系统崩溃
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
memory_limit | 租户内存使用上限 | 根据租户需求设置 |
memory_limit_per_cpu_quota | 每CPU配额对应的内存限制 | 4G-8G |
memory_min | 租户最小内存保障 | 根据租户基础需求设置 |
memory_max | 租户最大内存限制 | 根据集群总内存设置 |
enable_memory_overcommit | 是否允许内存超分配 | FALSE |
配置示例:
sql
-- 设置租户内存限制为64GB
ALTER TENANT test_tenant SET memory_limit = 68719476736;
-- 设置每CPU配额对应的内存限制为6GB
ALTER SYSTEM SET memory_limit_per_cpu_quota = 6442450944 GLOBAL;2. 内存分配参数
功能:控制内存资源的分配行为 适用场景:
- 优化内存分配效率
- 调整内存分配策略
- 处理内存密集型场景
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
memory_chunk_cache_size | 内存块缓存大小 | 64MB-256MB |
memory_global_cache_size | 全局内存缓存大小 | 128MB-512MB |
memory_tier_level | 内存层级,用于多级内存管理 | 1-3 |
memory_compaction_trigger_percentage | 内存压缩触发百分比 | 80-90 |
memory_recycle_interval | 内存回收间隔(秒) | 300-600 |
配置示例:
sql
-- 设置内存块缓存大小为128MB
ALTER SYSTEM SET memory_chunk_cache_size = 134217728 GLOBAL;
-- 设置内存回收间隔为300秒
ALTER SYSTEM SET memory_recycle_interval = 300 GLOBAL;IO资源隔离参数
1. IOPS限制参数
功能:控制租户可使用的IOPS资源 适用场景:
- 多租户环境下的IO资源分配
- 防止单个租户占用过多IO资源
- 确保关键租户的IO性能保障
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
max_iops | 租户最大IOPS限制 | 根据存储能力设置 |
min_iops | 租户最小IOPS保障 | 根据租户基础需求设置 |
iops_weight | IOPS资源权重,用于资源竞争时的分配比例 | 1024-4096 |
max_io_wait_time | 最大IO等待时间(微秒) | 1000000 |
io_latency_threshold | IO延迟阈值(微秒) | 10000 |
配置示例:
sql
-- 设置租户最大IOPS为10000
ALTER TENANT test_tenant SET max_iops = 10000;
-- 设置租户最小IOPS为1000
ALTER TENANT test_tenant SET min_iops = 1000;
-- 设置IOPS资源权重为2048
ALTER TENANT test_tenant SET iops_weight = 2048;2. IO带宽限制参数
功能:控制租户可使用的IO带宽资源 适用场景:
- 多租户环境下的IO带宽分配
- 防止单个租户占用过多IO带宽
- 确保关键租户的IO带宽保障
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
max_io_mbps | 租户最大IO带宽限制(MB/s) | 根据存储能力设置 |
min_io_mbps | 租户最小IO带宽保障(MB/s) | 根据租户基础需求设置 |
io_bandwidth_weight | IO带宽资源权重 | 1024-4096 |
io_request_size_limit | 单个IO请求大小限制(字节) | 1048576 |
io_queue_depth | IO队列深度 | 32-128 |
配置示例:
sql
-- 设置租户最大IO带宽为1000MB/s
ALTER TENANT test_tenant SET max_io_mbps = 1000;
-- 设置租户最小IO带宽为100MB/s
ALTER TENANT test_tenant SET min_io_mbps = 100;
-- 设置IO队列深度为64
ALTER SYSTEM SET io_queue_depth = 64 GLOBAL;磁盘资源隔离参数
1. 磁盘空间限制参数
功能:控制租户可使用的磁盘空间 适用场景:
- 多租户环境下的磁盘空间分配
- 防止单个租户占用过多磁盘空间
- 确保磁盘空间的合理使用
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
max_disk_size | 租户最大磁盘空间限制 | 根据存储配额设置 |
min_disk_size | 租户最小磁盘空间保障 | 根据租户基础需求设置 |
disk_quota_growth_limit | 磁盘配额增长限制(字节/秒) | 1073741824 |
disk_usage_warning_threshold | 磁盘使用率警告阈值(%) | 80 |
disk_usage_error_threshold | 磁盘使用率错误阈值(%) | 90 |
配置示例:
sql
-- 设置租户最大磁盘空间为1TB
ALTER TENANT test_tenant SET max_disk_size = 1099511627776;
-- 设置磁盘使用率警告阈值为80%
ALTER SYSTEM SET disk_usage_warning_threshold = 80 GLOBAL;
-- 设置磁盘使用率错误阈值为90%
ALTER SYSTEM SET disk_usage_error_threshold = 90 GLOBAL;2. 磁盘I/O调度参数
功能:控制磁盘I/O的调度行为 适用场景:
- 优化磁盘I/O性能
- 调整I/O调度策略
- 处理不同类型的I/O负载
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
io_scheduler | 磁盘I/O调度器类型 | noop或mq-deadline |
enable_io_uring | 是否启用IO uring | TRUE(内核5.1+) |
direct_io | 是否使用直接IO | TRUE |
async_io | 是否使用异步IO | TRUE |
io_submit_batch_size | IO提交批处理大小 | 32-128 |
配置示例:
sql
-- 设置磁盘I/O调度器为noop
ALTER SYSTEM SET io_scheduler = 'noop' GLOBAL;
-- 启用IO uring
ALTER SYSTEM SET enable_io_uring = TRUE GLOBAL;
-- 设置IO提交批处理大小为64
ALTER SYSTEM SET io_submit_batch_size = 64 GLOBAL;会话和连接隔离参数
1. 会话限制参数
功能:控制租户可创建的会话数量 适用场景:
- 防止单个租户创建过多会话
- 控制租户的并发连接数
- 确保系统会话资源的合理分配
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
max_connections | 租户最大连接数 | 1000-10000 |
max_user_connections | 单个用户最大连接数 | 500-5000 |
connection_timeout | 连接超时时间(秒) | 30-120 |
wait_timeout | 非活动连接超时时间(秒) | 300-1800 |
interactive_timeout | 交互式连接超时时间(秒) | 600-3600 |
配置示例:
sql
-- 设置租户最大连接数为5000
ALTER TENANT test_tenant SET max_connections = 5000;
-- 设置连接超时时间为60秒
ALTER TENANT test_tenant SET connection_timeout = 60;
-- 设置非活动连接超时时间为600秒
ALTER TENANT test_tenant SET wait_timeout = 600;2. 资源池参数
功能:控制租户资源池的配置 适用场景:
- 多租户环境下的资源池管理
- 调整资源池的资源分配
- 实现资源池的动态扩容和缩容
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
resource_pool_name | 资源池名称 | 根据规划命名 |
unit_count | 资源池单位数量 | 1-100 |
unit_config_name | 资源单位配置名称 | 根据规划命名 |
zone_list | 资源池所在可用区列表 | 根据集群部署设置 |
enable_auto_scaling | 是否启用自动扩缩容 | FALSE |
配置示例:
sql
-- 创建资源单位配置
CREATE RESOURCE UNIT test_unit_config MAX_CPU=4, MEMORY_SIZE='32G', MAX_IOPS=5000, MAX_DISK_SIZE='500G';
-- 创建资源池
CREATE RESOURCE POOL test_resource_pool UNIT='test_unit_config', UNIT_NUM=2, ZONE_LIST=('zone1', 'zone2');
-- 将资源池分配给租户
ALTER TENANT test_tenant RESOURCE_POOLS = ('test_resource_pool');事务和锁资源隔离参数
1. 事务资源参数
功能:控制租户事务资源的使用 适用场景:
- 防止单个租户占用过多事务资源
- 确保事务资源的公平分配
- 控制长事务对系统的影响
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
max_transactions | 租户最大并发事务数 | 1000-10000 |
transaction_timeout | 事务超时时间(微秒) | 30000000-60000000 |
long_transaction_timeout | 长事务超时时间(微秒) | 300000000-600000000 |
max_undo_size | 最大回滚段大小 | 1G-10G |
undo_retention_time | 回滚段保留时间(秒) | 3600-7200 |
配置示例:
sql
-- 设置租户最大并发事务数为5000
ALTER TENANT test_tenant SET max_transactions = 5000;
-- 设置事务超时时间为60秒
ALTER TENANT test_tenant SET transaction_timeout = 60000000;
-- 设置长事务超时时间为5分钟
ALTER TENANT test_tenant SET long_transaction_timeout = 300000000;2. 锁资源参数
功能:控制租户锁资源的使用 适用场景:
- 防止单个租户占用过多锁资源
- 控制死锁风险
- 确保锁资源的公平分配
核心参数:
| 参数名 | 功能 | 建议值 |
|---|---|---|
max_locks_per_transaction | 单个事务最大锁数量 | 1000-10000 |
max_lock_wait_time | 锁等待超时时间(秒) | 30-120 |
deadlock_detection_interval | 死锁检测间隔(微秒) | 100000 |
enable_deadlock_detection | 是否启用死锁检测 | TRUE |
lock_timeout_grace_period | 锁超时宽限期(秒) | 5-10 |
配置示例:
sql
-- 设置单个事务最大锁数量为5000
ALTER TENANT test_tenant SET max_locks_per_transaction = 5000;
-- 设置锁等待超时时间为60秒
ALTER TENANT test_tenant SET max_lock_wait_time = 60;
-- 设置死锁检测间隔为100毫秒
ALTER SYSTEM SET deadlock_detection_interval = 100000 GLOBAL;资源隔离参数配置最佳实践
1. 基于租户重要性的资源分配
功能:根据租户重要性分配资源 适用场景:
- 多租户环境下的资源优先级管理
- 确保关键业务租户的资源保障
- 实现资源的差异化分配
最佳实践:
- 为核心业务租户分配较高的资源配额和权重
- 为非核心租户设置合理的资源限制,防止资源浪费
- 定期评估租户重要性,调整资源分配策略
- 使用资源池方式管理租户资源,便于统一调整
配置示例:
sql
-- 核心业务租户配置
ALTER TENANT core_tenant SET cpu_quota = 16, memory_limit = 128G, max_iops = 20000;
-- 普通业务租户配置
ALTER TENANT normal_tenant SET cpu_quota = 4, memory_limit = 32G, max_iops = 5000;
-- 测试租户配置
ALTER TENANT test_tenant SET cpu_quota = 2, memory_limit = 16G, max_iops = 2000;2. 资源隔离参数的动态调整
功能:根据业务负载动态调整资源隔离参数 适用场景:
- 业务负载波动较大的场景
- 临时性业务高峰处理
- 资源利用率优化
最佳实践:
- 建立资源使用监控机制,实时掌握租户资源使用情况
- 设置资源使用告警阈值,及时发现资源瓶颈
- 实现资源隔离参数的自动调整或半自动调整
- 在业务低峰期进行资源调整,减少对业务的影响
配置示例:
sql
-- 业务高峰前增加租户CPU配额
ALTER TENANT peak_tenant SET cpu_quota = 16;
-- 业务高峰后恢复正常CPU配额
ALTER TENANT peak_tenant SET cpu_quota = 8;
-- 根据监控数据动态调整IOPS限制
ALTER TENANT dynamic_tenant SET max_iops = 15000;3. 资源隔离参数的测试和验证
功能:测试和验证资源隔离参数的效果 适用场景:
- 新租户上线前的资源配置测试
- 资源隔离参数调整后的效果验证
- 定期资源配置合理性验证
最佳实践:
- 建立资源隔离测试环境,模拟真实业务负载
- 测试不同资源隔离参数组合的效果
- 验证资源隔离的有效性,确保租户间资源互不影响
- 记录测试结果,建立资源配置知识库
测试方法:
- 在测试环境中创建多个测试租户
- 为不同租户配置不同的资源隔离参数
- 模拟真实业务负载,同时运行多个租户的测试
- 监控各租户的资源使用情况和性能指标
- 验证资源隔离的效果,调整不合理的参数
常见问题(FAQ)
Q1: 如何确定租户的资源隔离参数配置?
A1: 确定租户资源隔离参数配置的方法:
- 分析租户的业务类型和负载特征
- 评估租户的重要性和资源需求
- 参考类似租户的配置经验
- 进行性能测试,验证配置效果
- 根据实际运行情况进行调整
Q2: 资源隔离参数配置过高会有什么影响?
A2: 资源隔离参数配置过高的影响:
- 导致资源浪费,降低整体资源利用率
- 可能影响其他租户的资源分配
- 增加系统管理复杂度
- 不必要的成本增加
Q3: 资源隔离参数配置过低会有什么影响?
A3: 资源隔离参数配置过低的影响:
- 导致租户性能下降,影响业务体验
- 可能出现资源饥饿问题
- 增加租户间资源竞争
- 影响系统稳定性
Q4: 如何监控资源隔离参数的效果?
A4: 监控资源隔离参数效果的方法:
- 使用OceanBase内置监控视图,如v$ob_tenant_resource_usage
- 集成第三方监控系统,如Prometheus+Grafana
- 设置资源使用告警,及时发现异常
- 定期生成资源使用报告,分析趋势
- 进行性能测试,验证资源隔离效果
Q5: 资源隔离参数支持动态调整吗?
A5: 资源隔离参数的动态调整支持情况:
- 大多数资源隔离参数支持动态调整,无需重启
- 部分参数需要重启租户或节点才能生效
- 调整前查看参数的生效方式
- 动态调整后立即生效,可以实时验证效果
Q6: 如何处理租户资源超标的情况?
A6: 处理租户资源超标的方法:
- 检查租户资源使用情况,找出资源消耗大户
- 分析资源消耗原因,优化租户应用或查询
- 临时调整租户资源隔离参数,应对高峰期
- 考虑扩容集群资源,满足业务增长需求
- 建立资源使用阈值告警,提前发现问题
Q7: 资源隔离参数与资源池的关系是什么?
A7: 资源隔离参数与资源池的关系:
- 资源池是资源隔离的基本单位,包含CPU、内存、IO等资源配置
- 资源隔离参数是资源池配置的具体体现
- 一个租户可以分配多个资源池
- 资源池可以动态调整,实现资源的弹性伸缩
Q8: 如何实现跨可用区的资源隔离?
A8: 实现跨可用区资源隔离的方法:
- 在创建资源池时指定多个可用区
- 为不同可用区的资源池配置不同的资源隔离参数
- 利用OceanBase的多可用区部署特性
- 实现租户资源在不同可用区的分布和隔离
Q9: 资源隔离参数对系统性能有什么影响?
A9: 资源隔离参数对系统性能的影响:
- 合理的资源隔离参数可以提高系统整体性能和稳定性
- 不合理的参数配置可能导致性能下降
- 资源隔离会带来一定的开销,影响资源利用率
- 适当的资源隔离可以避免单个租户拖垮整个系统
Q10: 如何优化资源隔离参数以提高资源利用率?
A10: 优化资源隔离参数提高资源利用率的方法:
- 根据实际负载调整资源配额,避免资源过剩
- 合理设置资源权重,实现资源的公平分配
- 启用资源超分配功能,但需要谨慎使用
- 实现资源的动态调整,根据负载变化实时调整
- 定期评估和优化资源隔离参数配置
