OceanBase教程FG085-OceanBase混合负载HTAP优化
本文档风哥主要介绍OceanBase数据库混合负载HTAP优化,包括OceanBase HTAP概念、OceanBase负载类型、OceanBase资源隔离、OceanBase架构设计、OceanBase租户隔离、OceanBase副本隔离、OceanBase Cgroup配置等内容,风哥教程参考OceanBase官方文档HTAP、资源隔离等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 OceanBase HTAP概念
HTAP(Hybrid Transactional/Analytical Processing)是指在同一数据库系统中同时支持事务处理(OLTP)和分析处理(OLAP)的能力。OceanBase通过多副本架构和资源隔离技术实现HTAP。更多视频教程www.fgedu.net.cn
- 统一平台:一套系统支持两种负载
- 实时分析:数据实时可见,无需ETL
- 资源隔离:OLTP和OLAP互不干扰
- 成本降低:减少系统复杂度
- 数据一致:保证分析数据一致性
1.2 OceanBase负载类型
1. OLTP负载特点
– 短事务
– 高并发
– 点查为主
– 低延迟要求
– 频繁写入
2. OLAP负载特点
– 复杂查询
– 大表扫描
– 聚合计算
– 高内存消耗
– 批量处理
3. HTAP混合负载
┌─────────────────────────────────────────┐
│ HTAP架构 │
├─────────────────────────────────────────┤
│ │
│ OLTP请求 ──┐ │
│ ├──> OBProxy ──> OB集群 │
│ OLAP请求 ──┘ │
│ │ │
│ ┌─────┴─────┐ │
│ v v │
│ 主副本 只读副本 │
│ (OLTP) (OLAP) │
│ │
└─────────────────────────────────────────┘
4. 负载识别
– 查询执行时间
– 扫描数据量
– 内存使用量
– CPU消耗
1.3 OceanBase资源隔离
1. 租户隔离
– 不同租户独立资源
– CPU、内存、I/O隔离
– 适合多业务场景
2. Zone隔离
– 不同Zone承载不同负载
– 物理隔离
– 故障隔离
3. 副本隔离
– 主副本处理OLTP
– 只读副本处理OLAP
– 读写分离
4. Cgroup隔离
– Linux内核级隔离
– CPU限制
– 内存限制
– I/O限制
Part02-生产环境规划与建议
2.1 OceanBase架构设计
1. 读写分离架构
┌─────────────────────────────────────────┐
│ 应用层 │
└─────────────────────────────────────────┘
│
┌────────────────┼────────────────┐
│ │ │
v v v
┌──────┐ ┌──────────┐ ┌──────┐
│ OLTP │ │ OBProxy │ │ OLAP │
│ 应用 │ │ │ │ 应用 │
└──────┘ └────┬─────┘ └──────┘
│
┌─────────┴─────────┐
│ │
v v
┌─────────┐ ┌─────────┐
│ 主副本 │ │只读副本 │
│ (Zone1) │ │(Zone2,3)│
└─────────┘ └─────────┘
2. 多租户架构
┌─────────────────────────────────────────┐
│ OB集群 │
├─────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ │
│ │OLTP租户 │ │OLAP租户 │ │
│ │ 40%资源 │ │ 60%资源 │ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
3. 混合架构,风哥提示:。
– 租户隔离 + 副本隔离
– 最高隔离级别
– 适合核心业务
2.2 OceanBase资源规划
1. CPU规划
– OLTP:响应优先,预留20%余量
– OLAP:吞吐量优先,可满载运行
– 建议比例:OLTP 40%,OLAP 60%
2. 内存规划
– OLTP:缓存优先
* Plan Cache:10%
* SQL Area:20%
* Block Cache:剩余
– OLAP:执行内存优先
* SQL Area:40%
* 排序/哈希:30%
* Block Cache:30%
3. I/O规划
– 独立存储池
– SSD优先
– IOPS预留,学习交流加群风哥微信: itpux-com。
4. 资源分配示例
┌─────────────────┬─────────────────────┐
│ 资源类型 │ 分配方案 │
├─────────────────┼─────────────────────┤
│ CPU │ OLTP 32核, OLAP 48核│
│ 内存 │ OLTP 128G, OLAP 192G│
│ 存储 │ 独立SSD池 │
│ 网络 │ 万兆网络 │
└─────────────────┴─────────────────────┘
2.3 OceanBase路由策略
1. 自动路由
– OBProxy自动识别
– 根据SQL特征路由
– 无需应用改造
2. 强制路由
– 使用Hint指定
– /*+ READ_CONSISTENCY(WEAK) */
– 指定只读副本
3. 应用层路由
– 双数据源配置
– 应用自主选择
– 更灵活控制
4. 路由配置
obclient> ALTER SYSTEM SET enable_replica_read = TRUE;
Query OK, 0 rows affected
obclient> ALTER SYSTEM SET ob_read_consistency = ‘WEAK’;
Query OK, 0 rows affected,学习交流加群风哥QQ113257174。
Part03-生产环境项目实施方案
3.1 OceanBase租户隔离
1. 创建OLTP租户
obclient> CREATE RESOURCE UNIT fgedu_oltp_unit
MEMORY_SIZE = ’32G’,
MAX_CPU = 16,
MIN_CPU = 8,
IOPS = 10000,
DISK_SIZE = ‘500G’;
Query OK, 0 rows affected
obclient> CREATE RESOURCE POOL fgedu_oltp_pool
UNIT = ‘fgedu_oltp_unit’,
UNIT_NUM = 2,
ZONE_LIST = (‘zone1′,’zone2’);
Query OK, 0 rows affected
obclient> CREATE TENANT fgedu_oltp
PRIMARY_ZONE = ‘zone1’,
RESOURCE_POOL_LIST = (‘fgedu_oltp_pool’)
SET ob_tcp_invited_nodes = ‘%’;
Query OK, 0 rows affected
2. 创建OLAP租户
obclient> CREATE RESOURCE UNIT fgedu_olap_unit
MEMORY_SIZE = ’64G’,
MAX_CPU = 32,
MIN_CPU = 16,
IOPS = 20000,
DISK_SIZE = ‘1T’;
Query OK, 0 rows affected,更多视频教程www.fgedu.net.cn。
obclient> CREATE RESOURCE POOL fgedu_olap_pool
UNIT = ‘fgedu_olap_unit’,
UNIT_NUM = 1,
ZONE_LIST = (‘zone3’);
Query OK, 0 rows affected
obclient> CREATE TENANT fgedu_olap
PRIMARY_ZONE = ‘zone3’,
RESOURCE_POOL_LIST = (‘fgedu_olap_pool’)
SET ob_tcp_invited_nodes = ‘%’;
Query OK, 0 rows affected
3. 验证租户
obclient> SELECT * FROM oceanbase.__all_tenant;
+————-+————-+————-+——————+
| tenant_id | tenant_name | primary_zone| resource_pool_id |
+————-+————-+————-+——————+
| 1001 | fgedu_oltp | zone1 | 1001 |
| 1002 | fgedu_olap | zone3 | 1002 |
+————-+————-+————-+——————+
3.2 OceanBase副本隔离
1. 配置只读副本
obclient> ALTER SYSTEM SET enable_replica_read = TRUE;
Query OK, 0 rows affected
2. 配置弱一致性读
obclient> SET GLOBAL ob_read_consistency = ‘WEAK’;
Query OK, 0 rows affected
3. 指定只读Zone
obclient> ALTER TENANT fgedu_tenant
SET ob_read_only_zone = ‘zone3’;
Query OK, 0 rows affected,更多学习教程公众号风哥教程itpux_com。
4. 会话级设置
obclient> SET SESSION ob_read_consistency = ‘WEAK’;
Query OK, 0 rows affected
5. Hint方式
obclient> SELECT /*+ READ_CONSISTENCY(WEAK) */ *
FROM fgedu_order
WHERE create_time > ‘2024-01-01’;
+———-+———+————-+———————+
| order_id | user_id | amount | create_time |
+———-+———+————-+———————+
| 10001 | 5001 | 199.99 | 2024-01-15 10:30:00 |
| 10002 | 5002 | 299.99 | 2024-01-16 14:20:00 |
+———-+———+————-+———————+
3.3 OceanBase Cgroup配置
1. 开启Cgroup
obclient> ALTER SYSTEM SET enable_cgroup = TRUE;
Query OK, 0 rows affected
2. 配置CPU限制
obclient> ALTER SYSTEM SET cgroup_cpu_percent = 80;
Query OK, 0 rows affected,from DB视频:www.itpux.com。
3. 租户级Cgroup配置
obclient> ALTER TENANT fgedu_oltp
SET cgroup_cpu_quota = 60;
Query OK, 0 rows affected
obclient> ALTER TENANT fgedu_olap
SET cgroup_cpu_quota = 40;
Query OK, 0 rows affected
4. 验证Cgroup
$ cat /sys/fs/cgroup/cpu/oceanbase/tenant_1001/cpu.cfs_quota_us
600000
$ cat /sys/fs/cgroup/cpu/oceanbase/tenant_1002/cpu.cfs_quota_us
400000
5. 监控Cgroup
obclient> SELECT * FROM oceanbase.__all_virtual_cgroup_stat;
+————-+————-+———-+———-+
| tenant_id | cgroup_path | cpu_usage| mem_usage|
+————-+————-+———-+———-+
| 1001 | tenant_1001 | 45% | 60% |
| 1002 | tenant_1002 | 70% | 80% |
+————-+————-+———-+———-+
Part04-生产案例与实战讲解
4.1 OceanBase银行HTAP案例
– 核心交易系统(OLTP)
– 风控分析系统(OLAP)
– 实时报表需求
# 实施方案
1. 架构设计
– 3副本架构
– Zone1、Zone2:OLTP
– Zone3:OLAP只读
2. 资源配置
– 总资源:128核 512G内存
– OLTP:48核 192G
– OLAP:80核 320G
3. 路由策略
– 交易请求 -> Zone1/Zone2
– 风控查询 -> Zone3
4. 配置实施
obclient> ALTER SYSTEM SET enable_replica_read = TRUE;
obclient> ALTER SYSTEM SET ob_read_consistency = ‘WEAK’;
obclient> ALTER TENANT fgedu_bank SET ob_read_only_zone = ‘zone3’;
5. 效果验证
– OLTP延迟:< 5ms
- OLAP查询:分钟级
- 资源争抢:无
- 业务影响:无
4.2 OceanBase零售HTAP案例
– 订单交易系统
– 实时库存分析
– 销售报表统计
# 实施方案
1. 租户分离
– 交易租户:fgedu_trade
– 分析租户:fgedu_analytics
2. 数据同步
– OMS实时同步
– 延迟:< 1秒
- 一致性:最终一致
3. 资源配置
┌─────────────────┬─────────────────────┐
│ 租户 │ 资源配置 │
├─────────────────┼─────────────────────┤
│ fgedu_trade │ 32核 128G 500GB │
│ fgedu_analytics │ 64核 256G 1TB │
└─────────────────┴─────────────────────┘
4. 查询分离
-- OLTP查询
obclient> SELECT * FROM fgedu_order WHERE order_id = 10001;
— OLAP查询
obclient> SELECT product_id, SUM(quantity)
FROM fgedu_order
GROUP BY product_id;
5. 效果验证
– 交易TPS:10000+
– 分析查询:秒级响应
– 数据延迟:< 1秒
- 系统稳定:99.99%
4.3 OceanBase物联网HTAP案例
– 设备数据采集(高并发写入)
– 实时监控分析
– 历史数据查询
# 实施方案
1. 分区设计
– 按时间分区
– 按设备ID分片
– 自动分区管理
2. 写入优化
– 批量写入
– 并行写入
– 异步提交
3. 查询优化
– 预聚合
– 物化视图
– 索引优化
4. 配置示例
obclient> CREATE TABLE fgedu_device_data (
device_id VARCHAR(64),
metric_name VARCHAR(64),
metric_value DECIMAL(18,4),
collect_time TIMESTAMP,
PRIMARY KEY (device_id, collect_time)
) PARTITION BY RANGE (UNIX_TIMESTAMP(collect_time))
(
PARTITION p202401 VALUES LESS THAN (UNIX_TIMESTAMP(‘2024-02-01’)),
PARTITION p202402 VALUES LESS THAN (UNIX_TIMESTAMP(‘2024-03-01’)),
PARTITION p202403 VALUES LESS THAN (UNIX_TIMESTAMP(‘2024-04-01’))
);
5. 效果验证
– 写入:50万/秒
– 查询:秒级
– 存储:压缩比10:1
– 扩展:线性扩展
Part05-风哥经验总结与分享
5.1 OceanBase HTAP最佳实践
1. 架构设计
– 优先使用读写分离
– 合理规划资源比例
– 预留扩展空间
2. 资源隔离
– 租户隔离:多业务场景
– 副本隔离:单一业务场景
– Cgroup:精细化控制
3. 数据同步
– 实时性要求高的用主副本
– 可接受延迟的用只读副本
– 跨租户用OMS同步
4. 监控重点
– 资源使用率
– 查询响应时间
– 数据延迟
– 错误率
5. 优化策略
– OLTP:索引优化、连接池
– OLAP:并行查询、预聚合
– 通用:SQL优化、参数调优
5.2 OceanBase监控调优
1. 关键指标
obclient> SELECT
tenant_name,
round(active_sessions/active_session_limit*100,2) as session_pct,
round(cpu_time/total_time*100,2) as cpu_pct
FROM oceanbase.__all_virtual_tenant_stat;
2. 负载识别
obclient> SELECT
sql_id,
elapsed_time/1000000 as elapsed_sec,
execute_time/1000000 as exec_sec,
queue_time/1000000 as queue_sec
FROM oceanbase.__all_virtual_sql_audit
WHERE request_time > date_sub(now(), interval 1 hour)
ORDER BY elapsed_time DESC LIMIT 10;
3. 资源调整
— 动态调整租户资源
obclient> ALTER RESOURCE UNIT fgedu_oltp_unit
MAX_CPU = 24;
Query OK, 0 rows affected
4. 自动化脚本
#!/bin/bash
# htap_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 检查OLTP延迟
OLTP_LATENCY=$(obclient -e “SELECT AVG(elapsed_time) FROM oceanbase.__all_virtual_sql_audit WHERE sql_type = 1” | tail -1)
if [ $OLTP_LATENCY –
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
