1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG105-OceanBase DBA性能优化实战

本文档风哥主要介绍OceanBase DBA的性能优化实战,包括性能优化的概念与意义、性能影响因素、优化方法体系、性能监控体系、性能基线建立、优化策略制定、SQL优化实战、参数调优实战、存储优化实战、实战案例等内容,风哥教程参考OceanBase官方文档性能优化指南、系统管理员手册等内容编写,适合DBA人员在学习和工作中使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 OceanBase性能优化的概念与意义

OceanBase性能优化是指通过各种方法和技术,提高OceanBase数据库系统的性能,包括响应时间、吞吐量、并发处理能力等。性能优化的意义包括:

  • 提高系统响应速度:减少SQL执行时间,提高用户体验
  • 增加系统吞吐量:提高系统处理能力,支持更多并发用户
  • 降低资源消耗:减少CPU、内存、IO等资源的使用
  • 提升系统稳定性:减少系统负载,避免性能瓶颈
  • 延长硬件寿命:减少硬件磨损,延长设备使用寿命
  • 降低运维成本:减少故障发生,降低运维成本

1.2 OceanBase性能影响因素

OceanBase性能的影响因素包括:

  • 硬件因素:CPU、内存、存储、网络等硬件配置
  • 软件因素:OceanBase版本、操作系统、文件系统等
  • 参数配置:OceanBase系统参数、租户参数等
  • SQL语句:SQL语句的复杂度、执行计划等
  • 数据分布:数据分布不均、热点数据等
  • 并发访问:并发用户数、事务大小等
  • 存储设计:表结构设计、索引设计等
  • 备份恢复:备份操作对性能的影响

1.3 OceanBase性能优化方法体系

OceanBase性能优化的方法体系包括:

  • SQL优化:优化SQL语句、执行计划、索引等
  • 参数调优:调整OceanBase系统参数和租户参数
  • 存储优化:优化存储结构、数据分布等
  • 硬件优化:升级硬件配置、优化硬件布局
  • 架构优化:优化集群架构、租户配置等
  • 应用优化:优化应用程序设计、连接池配置等

Part02-生产环境规划与建议

2.1 OceanBase性能监控体系

OceanBase性能监控体系包括:

# 性能监控体系

## 监控指标
– 系统指标:CPU使用率、内存使用率、IOPS、网络带宽等
– 数据库指标:QPS、TPS、响应时间、连接数等
– 存储指标:存储使用率、IO延迟、读写吞吐量等
– 事务指标:事务提交时间、事务回滚率等
– SQL指标:慢SQL数量、执行计划效率等

## 监控工具
– OCP(OceanBase云平台):集群管理和监控
– Grafana + Prometheus:性能指标监控和可视化
– Zabbix:系统级监控
– 自定义监控脚本:针对特定指标的监控,风哥提示:。

## 监控告警
– 告警级别:严重、中等、轻微
– 告警方式:邮件、短信、微信等
– 告警阈值:根据实际情况设置合理的阈值
– 告警处理:建立告警处理流程,及时响应和处理告警

## 监控报告
– 日报:每日性能概况
– 周报:每周性能趋势分析
– 月报:每月性能总结和优化建议

2.2 OceanBase性能基线建立

OceanBase性能基线的建立方法:

# 性能基线建立

## 1. 收集基准数据
– 正常业务负载下的性能指标
– 不同时间点的性能数据(高峰、低谷)
– 不同业务场景的性能数据

## 2. 分析数据
– 计算各项指标的平均值、最大值、最小值
– 分析指标的波动范围
– 识别性能瓶颈

## 3. 建立基线
– 系统指标基线:CPU、内存、IO等,学习交流加群风哥微信: itpux-com。
– 数据库指标基线:QPS、TPS、响应时间等
– SQL指标基线:执行时间、扫描行数等

## 4. 定期更新基线
– 业务变化时更新基线
– 系统升级后更新基线
– 硬件变更后更新基线

## 5. 基线应用
– 用于性能异常检测
– 用于容量规划
– 用于优化效果评估

2.3 OceanBase性能优化策略制定

OceanBase性能优化策略的制定方法:

  • 识别性能瓶颈:通过监控和分析,识别系统的性能瓶颈
  • 制定优化目标:根据业务需求,制定合理的优化目标
  • 选择优化方法:根据性能瓶颈,选择合适的优化方法
  • 执行优化方案:按照优化方案,执行优化操作
  • 验证优化效果:验证优化是否达到预期效果
  • 持续优化:定期检查和优化,保持系统性能

Part03-生产环境项目实施方案

3.1 OceanBase SQL优化实战

3.1.1 OceanBase SQL执行计划分析

# SQL执行计划分析

## 1. 查看执行计划
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu.t1 WHERE id > 1000;”

+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| ID | EST. ROWS | COST | TABLE | ACCESS METHOD | PROPERTIES | PREDICATE | DEPEND | ORDER | MORE |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| Root | 99000 | 100000.00 | | | | | | | |,学习交流加群风哥QQ113257174。
| └─TableScan | 99000 | 100000.00 | fgedu.t1 | table_scan | | id > 1000 | | | |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+

## 2. 分析执行计划
– 访问方法:TableScan(全表扫描)
– 估计行数:99000
– 成本:100000.00
– 问题:全表扫描,效率低

## 3. 优化方案
– 创建索引:在id列上创建索引

## 4. 执行优化
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_id ON fgedu.t1(id);”

Query OK, 0 rows affected (0.20 sec)

## 5. 验证优化效果
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu.t1 WHERE id > 1000;”

+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| ID | EST. ROWS | COST | TABLE | ACCESS METHOD | PROPERTIES | PREDICATE | DEPEND | ORDER | MORE |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| Root | 99000 | 50000.00 | | | | | | | |
| └─IndexScan | 99000 | 50000.00 | fgedu.t1 | index_scan | idx_id | id > 1000 | | | |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+

## 6. 测试执行时间
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SELECT /*+ TIMING */ * FROM fgedu.t1 WHERE id > 1000;”

— 执行时间从5秒减少到1秒

3.1.2 OceanBase慢SQL优化

# 慢SQL优化

## 1. 查看慢SQL
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SELECT sql_id, start_time, query_time, user_name, sql_text FROM oceanbase.V$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 10;”,更多视频教程www.fgedu.net.cn。

+—————————-+———————+——————+———-+——————+
| sql_id | start_time | query_time | user_name | sql_text |
+—————————-+———————+——————+———-+——————+
| 1234567890abcdef | 2026-04-09 08:30:00 | 10.00 | fgedu | SELECT * FROM t1 WHERE status = ‘ACTIVE’ |
+—————————-+———————+——————+———-+——————+

## 2. 分析慢SQL
– SQL语句:SELECT * FROM t1 WHERE status = ‘ACTIVE’
– 执行时间:10秒
– 问题:全表扫描,无索引

## 3. 优化方案
– 创建索引:在status列上创建索引
– 优化SQL:只查询需要的列

## 4. 执行优化
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_status ON fgedu.t1(status);”

Query OK, 0 rows affected (0.50 sec)

$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT id, name FROM fgedu.t1 WHERE status = ‘ACTIVE’;”

+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| ID | EST. ROWS | COST | TABLE | ACCESS METHOD | PROPERTIES | PREDICATE | DEPEND | ORDER | MORE |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| Root | 50000 | 20000.00 | | | | | | | |
| └─IndexScan | 50000 | 20000.00 | fgedu.t1 | index_scan | idx_status | status = ‘ACTIVE’ | | | |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+

## 5. 验证优化效果
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SELECT /*+ TIMING */ id, name FROM fgedu.t1 WHERE status = ‘ACTIVE’;”

— 执行时间从10秒减少到0.5秒

3.2 OceanBase参数调优实战

3.2.1 OceanBase系统参数调优

# 系统参数调优,更多学习教程公众号风哥教程itpux_com。

## 1. 查看当前参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PARAMETERS LIKE ‘memory_limit’;”

+——-+———-+—————-+———-+——————+———–+——-+——————-+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+——————+———–+——-+——————-+———-+
| zone1 | observer | 192.168.1.10 | 2882 | memory_limit | capacity | 16G | Memory limit for observer | OBSERVER |
| zone2 | observer | 192.168.1.11 | 2882 | memory_limit | capacity | 16G | Memory limit for observer | OBSERVER |
| zone3 | observer | 192.168.1.12 | 2882 | memory_limit | capacity | 16G | Memory limit for observer | OBSERVER |
+——-+———-+—————-+———-+——————+———–+——-+——————-+———-+

## 2. 调整内存参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET memory_limit = ’24G’ ZONE ‘zone1’;”

Query OK, 0 rows affected (0.05 sec)

## 3. 查看CPU参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PARAMETERS LIKE ‘cpu_count’;”

+——-+———-+—————-+———-+———-+———–+——-+——————+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+———-+———–+——-+——————+———-+
| zone1 | observer | 192.168.1.10 | 2882 | cpu_count | int | 8 | CPU count for observer | OBSERVER |
| zone2 | observer | 192.168.1.11 | 2882 | cpu_count | int | 8 | CPU count for observer | OBSERVER |
| zone3 | observer | 192.168.1.12 | 2882 | cpu_count | int | 8 | CPU count for observer | OBSERVER |
+——-+———-+—————-+———-+———-+———–+——-+——————+———-+

## 4. 调整CPU参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET cpu_count = 16 ZONE ‘zone1’;”,from DB视频:www.itpux.com。

Query OK, 0 rows affected (0.05 sec)

## 5. 查看IO参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PARAMETERS LIKE ‘io_depth’;”

+——-+———-+—————-+———-+———-+———–+——-+——————+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+———-+———–+——-+——————+———-+
| zone1 | observer | 192.168.1.10 | 2882 | io_depth | int | 16 | IO depth for observer | OBSERVER |
| zone2 | observer | 192.168.1.11 | 2882 | io_depth | int | 16 | IO depth for observer | OBSERVER |
| zone3 | observer | 192.168.1.12 | 2882 | io_depth | int | 16 | IO depth for observer | OBSERVER |
+——-+———-+—————-+———-+———-+———–+——-+——————+———-+

## 6. 调整IO参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET io_depth = 32 ZONE ‘zone1’;”

Query OK, 0 rows affected (0.05 sec)

3.2.2 OceanBase租户参数调优

# 租户参数调优

## 1. 查看租户参数
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW PARAMETERS LIKE ‘max_connections’;”

+——-+———-+—————-+———-+—————–+———–+——-+——————+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+—————–+———–+——-+——————+———-+
| zone1 | observer | 192.168.1.10 | 2882 | max_connections | int | 1000 | Max connections | TENANT |
| zone2 | observer | 192.168.1.11 | 2882 | max_connections | int | 1000 | Max connections | TENANT |
| zone3 | observer | 192.168.1.12 | 2882 | max_connections | int | 1000 | Max connections | TENANT |
+——-+———-+—————-+———-+—————–+———–+——-+——————+———-+

## 2. 调整连接数参数
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “ALTER SYSTEM SET max_connections = 2000 TENANT ‘fgedudb’;”

Query OK, 0 rows affected (0.05 sec)

## 3. 查看查询缓存参数
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW PARAMETERS LIKE ‘query_cache_size’;”

+——-+———-+—————-+———-+——————+———–+——-+——————+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+——————+———–+——-+——————+———-+
| zone1 | observer | 192.168.1.10 | 2882 | query_cache_size | capacity | 16M | Query cache size | TENANT |
| zone2 | observer | 192.168.1.11 | 2882 | query_cache_size | capacity | 16M | Query cache size | TENANT |
| zone3 | observer | 192.168.1.12 | 2882 | query_cache_size | capacity | 16M | Query cache size | TENANT |
+——-+———-+—————-+———-+——————+———–+——-+——————+———-+

## 4. 调整查询缓存参数
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “ALTER SYSTEM SET query_cache_size = ’64M’ TENANT ‘fgedudb’;”

Query OK, 0 rows affected (0.05 sec)

## 5. 查看事务参数
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW PARAMETERS LIKE ‘txn_timeout’;”

+——-+———-+—————-+———-+————-+———–+——-+——————+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+————-+———–+——-+——————+———-+
| zone1 | observer | 192.168.1.10 | 2882 | txn_timeout | int | 10000 | Transaction timeout | TENANT |
| zone2 | observer | 192.168.1.11 | 2882 | txn_timeout | int | 10000 | Transaction timeout | TENANT |
| zone3 | observer | 192.168.1.12 | 2882 | txn_timeout | int | 10000 | Transaction timeout | TENANT |
+——-+———-+—————-+———-+————-+———–+——-+——————+———-+

## 6. 调整事务参数
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “ALTER SYSTEM SET txn_timeout = 30000 TENANT ‘fgedudb’;”

Query OK, 0 rows affected (0.05 sec)

3.3 OceanBase存储优化实战

3.3.1 OceanBase存储结构优化

# 存储结构优化

## 1. 检查表结构
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “DESCRIBE fgedu.t1;”

+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| status| varchar(20) | YES | | NULL | |
| create_time | datetime | YES | | NULL | |
+——-+————-+——+—–+———+——-+

## 2. 优化表结构
– 选择合适的数据类型
– 避免使用大字段
– 合理设置默认值
– 分区表设计

## 3. 创建分区表
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE TABLE fgedu.t2 (id INT PRIMARY KEY, name VARCHAR(50), create_time DATETIME) PARTITION BY RANGE(YEAR(create_time)) (PARTITION p2024 VALUES LESS THAN (2025), PARTITION p2025 VALUES LESS THAN (2026), PARTITION p2026 VALUES LESS THAN (2027));”

Query OK, 0 rows affected (0.10 sec)

## 4. 查看分区表
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW CREATE TABLE fgedu.t2;”

+——-+———————————————————————————————————————————————————————————————————————————————————————————————————————–+
| Table | Create Table |
+——-+———————————————————————————————————————————————————————————————————————————————————————————————————————–+
| t2 | CREATE TABLE `t2` (`id` int(11) NOT NULL, `name` varchar(50) DEFAULT NULL, `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /* OB_PARTITION_BY_RANGE=YEAR(create_time) OB_PARTITIONS=p2024,p2025,p2026 OB_RANGE_BOUNDARIES=2025,2026,2027 */ |
+——-+———————————————————————————————————————————————————————————————————————————————————————————————————————–+

3.3.2 OceanBase数据分布优化

# 数据分布优化

## 1. 查看数据分布
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SELECT table_name, partition_name, svr_ip, row_count FROM oceanbase.__all_virtual_tablet_stat WHERE tenant_id = 1001;”

+————+—————-+—————-+———-+
| table_name | partition_name | svr_ip | row_count |
+————+—————-+—————-+———-+
| t1 | p0 | 192.168.1.10 | 1000000 |
| t1 | p1 | 192.168.1.11 | 500000 |
| t1 | p2 | 192.168.1.12 | 500000 |
+————+—————-+—————-+———-+

## 2. 数据分布问题
– 数据分布不均,节点192.168.1.10上的数据量是其他节点的两倍

## 3. 优化方案
– 重新分布数据
– 调整分区策略

## 4. 执行优化
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER TABLE fgedu.t1 REBUILD PARTITION;”

Query OK, 0 rows affected (10.00 sec)

## 5. 验证优化效果
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SELECT table_name, partition_name, svr_ip, row_count FROM oceanbase.__all_virtual_tablet_stat WHERE tenant_id = 1001;”

+————+—————-+—————-+———-+
| table_name | partition_name | svr_ip | row_count |
+————+—————-+—————-+———-+
| t1 | p0 | 192.168.1.10 | 666667 |
| t1 | p1 | 192.168.1.11 | 666666 |
| t1 | p2 | 192.168.1.12 | 666667 |
+————+—————-+—————-+———-+

## 6. 结果分析
– 数据分布更加均匀,每个节点上的数据量基本相同
– 提高了系统的并发处理能力
– 减少了热点数据的产生

Part04-生产案例与实战讲解

4.1 OceanBase SQL优化实战案例

# SQL优化实战案例

## 问题描述
– 业务系统中存在慢SQL,执行时间超过5秒
– SQL语句:SELECT * FROM fgedu.order WHERE customer_id = 123 AND order_date > ‘2026-01-01’

## 分析步骤

### 1. 查看执行计划
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu.order WHERE customer_id = 123 AND order_date > ‘2026-01-01’;”

+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| ID | EST. ROWS | COST | TABLE | ACCESS METHOD | PROPERTIES | PREDICATE | DEPEND | ORDER | MORE |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| Root | 10000 | 50000.00 | | | | | | | |
| └─TableScan | 10000 | 50000.00 | fgedu.order | table_scan | | customer_id = 123 AND order_date > ‘2026-01-01’ | | | |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+

### 2. 分析表结构
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW CREATE TABLE fgedu.order;”

+——-+———————————————————————————————————————————————————————————————————————————————————————————————————–+
| Table | Create Table |
+——-+———————————————————————————————————————————————————————————————————————————————————————————————————–+
| order | CREATE TABLE `order` (`id` int(11) NOT NULL, `customer_id` int(11) DEFAULT NULL, `order_date` datetime DEFAULT NULL, `amount` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+——-+———————————————————————————————————————————————————————————————————————————————————————————————————–+

### 3. 优化方案
– 创建复合索引:在customer_id和order_date列上创建复合索引

### 4. 执行优化
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE INDEX idx_customer_date ON fgedu.order(customer_id, order_date);”

Query OK, 0 rows affected (0.50 sec)

### 5. 验证优化效果
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “EXPLAIN SELECT * FROM fgedu.order WHERE customer_id = 123 AND order_date > ‘2026-01-01’;”

+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| ID | EST. ROWS | COST | TABLE | ACCESS METHOD | PROPERTIES | PREDICATE | DEPEND | ORDER | MORE |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+
| Root | 10000 | 10000.00 | | | | | | | |
| └─IndexScan | 10000 | 10000.00 | fgedu.order | index_scan | idx_customer_date | customer_id = 123 AND order_date > ‘2026-01-01’ | | | |
+————————————+———-+———–+—————+——————————–+——————-+———–+———+——+——-+

### 6. 测试执行时间
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SELECT /*+ TIMING */ * FROM fgedu.order WHERE customer_id = 123 AND order_date > ‘2026-01-01’;”

— 执行时间从5秒减少到0.1秒

## 总结
– 问题原因:缺少合适的索引,导致全表扫描
– 解决方案:创建复合索引,优化查询计划
– 优化效果:执行时间从5秒减少到0.1秒,性能提升50倍

4.2 OceanBase参数调优实战案例

# 参数调优实战案例

## 问题描述
– 系统在高并发场景下性能下降,响应时间变长
– 并发用户数:1000
– 响应时间:从50ms增加到500ms

## 分析步骤

### 1. 查看系统状态
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SELECT svr_ip, cpu_usage, mem_usage, qps FROM oceanbase.__all_virtual_server_stat;”

+—————-+———–+———–+——+
| svr_ip | cpu_usage | mem_usage | qps |
+—————-+———–+———–+——+
| 192.168.1.10 | 90.00 | 85.00 | 5000 |
| 192.168.1.11 | 85.00 | 80.00 | 4500 |
| 192.168.1.12 | 80.00 | 75.00 | 4000 |

### 2. 查看当前参数
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PARAMETERS LIKE ‘memory_limit’;”

+——-+———-+—————-+———-+——————+———–+——-+——————-+———-+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section |
+——-+———-+—————-+———-+——————+———–+——-+——————-+———-+
| zone1 | observer | 192.168.1.10 | 2882 | memory_limit | capacity | 16G | Memory limit for observer | OBSERVER |
| zone2 | observer | 192.168.1.11 | 2882 | memory_limit | capacity | 16G | Memory limit for observer | OBSERVER |
| zone3 | observer | 192.168.1.12 | 2882 | memory_limit | capacity | 16G | Memory limit for observer | OBSERVER |
+——-+———-+—————-+———-+——————+———–+——-+——————-+———-+

### 3. 优化方案
– 增加内存限制
– 调整CPU参数
– 优化连接池设置

### 4. 执行优化
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET memory_limit = ’32G’ ZONE ‘zone1’;”

Query OK, 0 rows affected (0.05 sec)

$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “ALTER SYSTEM SET cpu_count = 24 ZONE ‘zone1’;”

Query OK, 0 rows affected (0.05 sec)

$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “ALTER SYSTEM SET max_connections = 3000 TENANT ‘fgedudb’;”

Query OK, 0 rows affected (0.05 sec)

### 5. 验证优化效果
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SELECT svr_ip, cpu_usage, mem_usage, qps FROM oceanbase.__all_virtual_server_stat;”

+—————-+———–+———–+——+
| svr_ip | cpu_usage | mem_usage | qps |
+—————-+———–+———–+——+
| 192.168.1.10 | 60.00 | 65.00 | 8000 |
| 192.168.1.11 | 55.00 | 60.00 | 7500 |
| 192.168.1.12 | 50.00 | 55.00 | 7000 |
+—————-+———–+———–+——+

### 6. 测试响应时间
– 响应时间:从500ms减少到80ms
– QPS:从5000增加到8000

## 总结
– 问题原因:内存不足,CPU资源紧张
– 解决方案:增加内存限制,调整CPU参数,优化连接池设置
– 优化效果:响应时间减少84%,QPS提升60%

4.3 OceanBase存储优化实战案例

# 存储优化实战案例

## 问题描述
– 存储使用率过高(80%)
– IO性能下降,写入延迟增加
– 数据量:500GB

## 分析步骤

### 1. 查看存储使用情况
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SELECT svr_ip, device_name, total_size/1024/1024/1024 as total_gb, used_size/1024/1024/1024 as used_gb, usage_percent FROM oceanbase.__all_virtual_disk_stat;”

+—————-+————–+———-+———-+—————+
| svr_ip | device_name | total_gb | used_gb | usage_percent |
+—————-+————–+———-+———-+—————+
| 192.168.1.10 | /ob/fgdata | 600.00 | 480.00 | 80.00 |
| 192.168.1.11 | /ob/fgdata | 600.00 | 470.00 | 78.33 |
| 192.168.1.12 | /ob/fgdata | 600.00 | 460.00 | 76.67 |
+—————-+————–+———-+———-+—————+

### 2. 查看表空间使用情况
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SELECT table_name, data_length/1024/1024/1024 as data_gb, index_length/1024/1024/1024 as index_gb, (data_length + index_length)/1024/1024/1024 as total_gb FROM information_schema.tables WHERE table_schema = ‘fgedudb’ ORDER BY total_gb DESC LIMIT 10;”

+————+———+———-+———-+
| table_name | data_gb | index_gb | total_gb |
+————+———+———-+———-+
| order | 200.00 | 50.00 | 250.00 |
| log | 150.00 | 30.00 | 180.00 |
| user | 50.00 | 10.00 | 60.00 |
+————+———+———-+———-+

### 3. 优化方案
– 清理过期数据
– 分区表设计
– 扩展存储容量

### 4. 执行优化

#### 4.1 清理过期数据
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “DELETE FROM fgedu.log WHERE log_date < DATE_SUB(NOW(), INTERVAL 30 DAY);" Query OK, 1000000 rows affected (10.00 sec) $ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "ALTER TABLE fgedu.log TRUNCATE PARTITION p2024;" Query OK, 0 rows affected (5.00 sec) #### 4.2 设计分区表 $ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "CREATE TABLE fgedu.order_new (id INT PRIMARY KEY, customer_id INT, order_date DATETIME, amount DECIMAL(10,2)) PARTITION BY RANGE(YEAR(order_date)) (PARTITION p2024 VALUES LESS THAN (2025), PARTITION p2025 VALUES LESS THAN (2026), PARTITION p2026 VALUES LESS THAN (2027));" Query OK, 0 rows affected (0.10 sec) $ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "INSERT INTO fgedu.order_new SELECT * FROM fgedu.order;" Query OK, 10000000 rows affected (100.00 sec) $ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "RENAME TABLE fgedu.order TO fgedu.order_old, fgedu.order_new TO fgedu.order;" Query OK, 0 rows affected (0.50 sec) #### 4.3 扩展存储容量 $ ssh root@192.168.1.10 # lvextend -L +200G /dev/mapper/obvg-fgdata # xfs_growfs /ob/fgdata ### 5. 验证优化效果 $ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SELECT svr_ip, device_name, total_size/1024/1024/1024 as total_gb, used_size/1024/1024/1024 as used_gb, usage_percent FROM oceanbase.__all_virtual_disk_stat;" +----------------+--------------+----------+----------+---------------+ | svr_ip | device_name | total_gb | used_gb | usage_percent | +----------------+--------------+----------+----------+---------------+ | 192.168.1.10 | /ob/fgdata | 800.00 | 350.00 | 43.75 | | 192.168.1.11 | /ob/fgdata | 800.00 | 340.00 | 42.50 | | 192.168.1.12 | /ob/fgdata | 800.00 | 330.00 | 41.25 | +----------------+--------------+----------+----------+---------------+ ### 6. 测试IO性能 - 写入延迟:从10ms减少到2ms - 存储使用率:从80%减少到43.75% ## 总结 - 问题原因:存储容量不足,数据分布不合理 - 解决方案:清理过期数据,设计分区表,扩展存储容量 - 优化效果:存储使用率降低45%,写入延迟减少80%

Part05-风哥经验总结与分享

5.1 OceanBase性能优化最佳实践

OceanBase性能优化的最佳实践:

  • 建立性能基线:建立正常运行的性能基线,便于识别异常
  • 监控先行:通过监控发现性能问题,定位瓶颈
  • SQL优化优先:优先优化SQL语句,这是最常见的性能瓶颈
  • 合理使用索引:创建合适的索引,提高查询效率
  • 参数调优:根据实际情况调整系统参数和租户参数
  • 存储优化:合理设计表结构,优化数据分布
  • 定期维护:定期收集统计信息,清理过期数据
  • 持续优化:定期检查和优化,保持系统性能

5.2 OceanBase性能优化技巧

OceanBase性能优化的技巧:

  • SQL优化技巧:
    • 避免使用SELECT *,只查询需要的列
    • 使用绑定变量,减少硬解析
    • 合理使用索引,避免全表扫描
    • 优化JOIN操作,减少关联次数
    • 使用分区表,提高查询效率
  • 参数调优技巧:
    • 根据硬件配置调整内存和CPU参数
    • 根据业务场景调整连接池和缓存参数
    • 合理设置事务超时时间
    • 调整IO参数,提高存储性能
  • 存储优化技巧:
    • 选择合适的数据类型,减少存储空间
    • 合理设计表结构,避免冗余字段
    • 使用分区表,提高数据管理效率
    • 定期清理过期数据,释放存储空间

5.3 OceanBase持续性能优化

OceanBase持续性能优化的方法:

# 持续性能优化

## 1. 建立性能监控体系
– 实时监控系统性能指标
– 设置合理的告警阈值
– 定期生成性能报告

## 2. 定期性能评估
– 每周进行性能评估
– 分析性能趋势
– 识别潜在的性能瓶颈

## 3. 制定优化计划
– 根据性能评估结果,制定优化计划
– 优先解决影响最大的问题
– 制定合理的优化目标

## 4. 执行优化操作
– 按照优化计划,执行优化操作
– 记录优化过程和结果
– 验证优化效果

## 5. 持续改进
– 总结优化经验
– 完善优化流程
– 不断更新优化策略

## 6. 知识共享
– 分享优化经验和知识
– 培训团队成员
– 建立优化知识库

## 7. 自动化优化
– 开发自动化优化工具
– 实现性能监控和优化的自动化
– 减少人工干预

风哥提示:性能优化是一个持续的过程,需要DBA人员不断地监控、分析和优化。建议DBA人员建立完善的性能监控体系,定期进行性能评估,及时发现和解决性能问题。学习交流加群风哥微信: itpux-com

优化建议:性能优化需要综合考虑各种因素,包括硬件、软件、参数、SQL等。建议DBA人员从多个角度入手,制定全面的优化方案,而不是仅仅针对某一个方面进行优化。更多学习教程公众号风哥教程itpux_com

风哥提示:性能优化的关键是找到性能瓶颈,然后针对性地进行优化。建议DBA人员掌握性能分析工具和方法,能够快速定位性能问题的根源。from OceanBase视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息