OceanBase教程FG188-OceanBase性能诊断与健康检查实战
目录大纲
Part01-基础概念与理论知识
1.1 性能诊断概述
性能诊断是指通过各种工具和方法,分析数据库系统的性能状况,找出性能瓶颈并进行优化。性能诊断的主要内容包括:
- 系统资源使用情况:CPU、内存、磁盘、网络等资源的使用情况
- SQL执行情况:慢SQL、执行计划等
- 事务处理情况:事务响应时间、锁等待等
- 存储使用情况:数据文件大小、表空间使用情况等
- 日志情况:日志写入频率、日志大小等
1.2 健康检查概述
健康检查是指定期检查数据库系统的运行状态,确保系统的正常运行。健康检查的主要内容包括:
- 集群状态:集群是否正常运行,节点是否在线
- 服务状态:各种服务是否正常运行
- 数据一致性:数据是否一致,是否有数据丢失
- 资源使用情况:资源使用是否合理,是否有资源耗尽的风险
- 安全状况:是否存在安全隐患
1.3 诊断与检查工具
OceanBase提供的性能诊断与健康检查工具包括:
- 性能视图:V$OB_SYSSTAT、V$OB_SESSION、V$OB_EVENT_HISTOGRAM等
- 日志工具:obdiag、日志分析工具等
- 监控工具:OceanBase监控平台、第三方监控工具等
- 命令行工具:obclient、ob_admin等
,风哥提示:。
Part02-性能诊断工具使用
2.1 V$OB_SYSSTAT使用
V$OB_SYSSTAT视图用于查看系统级别的统计信息,常用查询:
案例:查看系统统计信息
SELECT stat_name, value
FROM V$OB_SYSSTAT
WHERE stat_name LIKE '%cpu%' OR stat_name LIKE '%memory%'
ORDER BY stat_name;
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 10 |
| memory_usage_percent | 30 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 4096 |
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 10 |
| memory_usage_percent | 30 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 4096 |
+—————————+———+
2.2 V$OB_SESSION使用
V$OB_SESSION视图用于查看会话级别的信息,常用查询:
案例:查看活跃会话
SELECT sid, username, status, sql_text, elapsed_time
,学习交流加群风哥微信: itpux-com。
FROM V$OB_SESSION
WHERE status = 'ACTIVE'
ORDER BY elapsed_time DESC
LIMIT 10;
+——+———-+——–+———————————-+————-+
| sid | username | status | sql_text | elapsed_time|
+——+———-+——–+———————————-+————-+
| 123 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE id > 10000 | 5000000 |
| 456 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE name LIKE ‘%test%’ | 3000000 |
+——+———-+——–+———————————-+————-+
| sid | username | status | sql_text | elapsed_time|
+——+———-+——–+———————————-+————-+
| 123 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE id > 10000 | 5000000 |
| 456 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE name LIKE ‘%test%’ | 3000000 |
+——+———-+——–+———————————-+————-+
2.3 V$OB_EVENT_HISTOGRAM使用
V$OB_EVENT_HISTOGRAM视图用于查看事件的等待情况,常用查询:
案例:查看事件等待情况
SELECT event, total_waits, time_waited
FROM V$OB_EVENT_HISTOGRAM
ORDER BY time_waited DESC
LIMIT 10;
+—————————+————+————-+
| event | total_waits| time_waited |
+—————————+————+————-+
| db file sequential read | 1000 | 5000000 |
| log file sync | 500 | 3000000 |
| buffer busy waits | 200 | 1000000 |
+—————————+————+————-+
| event | total_waits| time_waited |
+—————————+————+————-+
| db file sequential read | 1000 | 5000000 |
| log file sync | 500 | 3000000 |
| buffer busy waits | 200 | 1000000 |
+—————————+————+————-+
Part03-健康检查方法
3.1 集群健康检查
集群健康检查的主要内容:
,学习交流加群风哥QQ113257174。
- 集群状态:检查集群是否正常运行
- 节点状态:检查所有节点是否在线
- 服务状态:检查各种服务是否正常运行
- 数据一致性:检查数据是否一致
案例:检查集群状态
SHOW CLUSTER STATUS;
+——-+——–+—————-+———————+———————+
| Zone | Status | Leader Count | Leader Change Time | Checksum Time |
+——-+——–+—————-+———————+———————+
| zone1 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone2 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone3 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
+——-+——–+—————-+———————+———————+
| Zone | Status | Leader Count | Leader Change Time | Checksum Time |
+——-+——–+—————-+———————+———————+
| zone1 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone2 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone3 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
+——-+——–+—————-+———————+———————+
3.2 节点健康检查
节点健康检查的主要内容:
- 节点状态:检查节点是否在线
- 资源使用情况:检查CPU、内存、磁盘、网络等资源的使用情况
- 服务状态:检查节点上的各种服务是否正常运行
- 日志情况:检查节点日志是否有异常
案例:检查节点状态
SHOW SERVER STATUS;
+—————-+——–+———-+———————+———————+
| Server | Status | Zone | Start Time | Stop Time |
+—————-+——–+———-+———————+———————+
| 192.168.1.1:2882 | ACTIVE | zone1 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.2:2882 | ACTIVE | zone2 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.3:2882 | ACTIVE | zone3 | 2024-01-01 00:00:00 | NULL |,更多视频教程www.fgedu.net.cn。
+—————-+——–+———-+———————+———————+
| Server | Status | Zone | Start Time | Stop Time |
+—————-+——–+———-+———————+———————+
| 192.168.1.1:2882 | ACTIVE | zone1 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.2:2882 | ACTIVE | zone2 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.3:2882 | ACTIVE | zone3 | 2024-01-01 00:00:00 | NULL |,更多视频教程www.fgedu.net.cn。
+—————-+——–+———-+———————+———————+
3.3 租户健康检查
租户健康检查的主要内容:
- 租户状态:检查租户是否正常运行
- 资源使用情况:检查租户的CPU、内存、磁盘等资源的使用情况
- SQL执行情况:检查租户的SQL执行情况,是否有慢SQL
- 会话情况:检查租户的会话数量,是否有异常会话
案例:检查租户状态
SHOW TENANT STATUS;
+—————-+——–+———————+———————+
| Tenant | Status | Start Time | Stop Time |
+—————-+——–+———————+———————+
| fgedu_tenant | ACTIVE | 2024-01-01 00:00:00 | NULL |
| system | ACTIVE | 2024-01-01 00:00:00 | NULL |
+—————-+——–+———————+———————+
| Tenant | Status | Start Time | Stop Time |
+—————-+——–+———————+———————+
| fgedu_tenant | ACTIVE | 2024-01-01 00:00:00 | NULL |
| system | ACTIVE | 2024-01-01 00:00:00 | NULL |
+—————-+——–+———————+———————+
Part04-实战案例与优化
4.1 性能诊断实战案例
案例:分析系统性能问题
问题描述:系统响应缓慢,需要分析原因。
解决方案:使用性能诊断工具分析系统性能。
步骤:
- 查看系统资源使用情况:
- 查看活跃会话:
- 查看SQL执行计划:
- 创建索引:
- 验证优化效果:
- 再次查看系统资源使用情况:
- 创建健康检查脚本:
- 执行健康检查脚本:
- 系统资源使用率高:
- 分析慢SQL,优化查询
- 调整系统参数
- 增加系统资源
- 节点状态异常:
- 检查节点日志
- 重启节点服务
- 检查网络连接
- 数据不一致:
- 检查集群状态
- 执行数据校验
- 进行数据修复
- 慢SQL问题:
- 分析执行计划
- 创建合适的索引
- 优化SQL语句
- 定期诊断:定期进行性能诊断,及时发现问题
- 全面分析:从多个角度分析性能问题,如系统资源、SQL执行、事务处理等
- 数据驱动:基于实际数据进行分析,避免主观判断
- 持续优化:性能优化是一个持续的过程,需要不断调整和改进
- 建立基准:建立性能基准,便于比较和分析
- 定期检查:定期进行健康检查,确保系统正常运行
- 自动化检查:编写自动化脚本,定期执行健康检查
- 全面检查:从多个方面检查系统健康状态,如集群、节点、租户等
- 及时处理:发现问题及时处理,避免问题扩大
- 记录历史:记录健康检查的历史数据,便于分析趋势
- 系统资源使用率高:
- 使用top命令查看系统资源使用情况
- 使用V$OB_SYSSTAT查看数据库资源使用情况
- 分析慢SQL,优化查询
- 调整系统参数,如内存分配、并发数等
- 节点状态异常:
- 查看节点日志,分析异常原因
- 检查网络连接,确保节点间通信正常
- 重启节点服务,恢复正常状态
- 检查硬件状态,如磁盘、内存等
- 数据不一致:
- 使用OceanBase提供的工具进行数据校验
- 检查集群状态,确保所有节点正常运行
- 执行数据修复操作,恢复数据一致性
- 加强数据备份,防止数据丢失
- 慢SQL问题:
- 使用EXPLAIN分析执行计划
- 使用V$OB_SQL_AUDIT查看SQL执行情况
- 创建合适的索引,提高查询性能
- 优化SQL语句,减少不必要的操作
SELECT stat_name, value
FROM V$OB_SYSSTAT
,更多学习教程公众号风哥教程itpux_com。
WHERE stat_name LIKE '%cpu%' OR stat_name LIKE '%memory%'
ORDER BY stat_name;
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 90 |
| memory_usage_percent | 80 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 8192 |
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 90 |
| memory_usage_percent | 80 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 8192 |
+—————————+———+
SELECT sid, username, status, sql_text, elapsed_time
FROM V$OB_SESSION
WHERE status = 'ACTIVE'
ORDER BY elapsed_time DESC
LIMIT 10;
+——+———-+——–+———————————-+————-+
| sid | username | status | sql_text | elapsed_time|
+——+———-+——–+———————————-+————-+
| 123 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE id > 10000 | 5000000 |
| 456 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE name LIKE ‘%test%’ | 3000000 |
+——+———-+——–+———————————-+————-+
| sid | username | status | sql_text | elapsed_time|
+——+———-+——–+———————————-+————-+
| 123 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE id > 10000 | 5000000 |
| 456 | fgedu | ACTIVE | SELECT * FROM fgedu_table WHERE name LIKE ‘%test%’ | 3000000 |
+——+———-+——–+———————————-+————-+
EXPLAIN SELECT * FROM fgedu_table WHERE id > 10000;
+—————————————–+,from DB视频:www.itpux.com。
| Query Plan |
+—————————————–+
| ======================================= |
| |ID|OPERATOR |NAME|EST. ROWS|COST|
| ————————————— |
| |0 |TABLE SCAN |t1 |90000 |1000|
| | |PREDICATES |id > 10000|
| ======================================= |
| Query Plan |
+—————————————–+
| ======================================= |
| |ID|OPERATOR |NAME|EST. ROWS|COST|
| ————————————— |
| |0 |TABLE SCAN |t1 |90000 |1000|
| | |PREDICATES |id > 10000|
| ======================================= |
CREATE INDEX idx_id ON fgedu_table(id);
Query OK, 0 rows affected
EXPLAIN SELECT * FROM fgedu_table WHERE id > 10000;
+—————————————–+
| Query Plan |
+—————————————–+
| ======================================= |
| |ID|OPERATOR |NAME|EST. ROWS|COST|
| ————————————— |
| |0 |INDEX RANGE SCAN|idx_id|90000 |100 |
| | |PREDICATES |id > 10000|
| ======================================= |
| Query Plan |
+—————————————–+
| ======================================= |
| |ID|OPERATOR |NAME|EST. ROWS|COST|
| ————————————— |
| |0 |INDEX RANGE SCAN|idx_id|90000 |100 |
| | |PREDICATES |id > 10000|
| ======================================= |
SELECT stat_name, value
FROM V$OB_SYSSTAT
WHERE stat_name LIKE '%cpu%' OR stat_name LIKE '%memory%'
ORDER BY stat_name;
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 30 |
| memory_usage_percent | 50 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 8192 |
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 30 |
| memory_usage_percent | 50 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 8192 |
+—————————+———+
分析:创建索引后,CPU使用率从90%下降到30%,内存使用率从80%下降到50%,系统性能得到明显改善。
4.2 健康检查实战案例
案例:定期健康检查
问题描述:需要定期检查数据库系统的健康状态。
解决方案:编写健康检查脚本,定期执行。
步骤:
#!/bin/bash # health_check.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn echo "OceanBase健康检查报告" echo "检查时间:$(date)" echo "----------------------------------------" # 检查集群状态 echo "1. 集群状态:" obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Dfgedudb -e "SHOW CLUSTER STATUS;" echo "----------------------------------------" # 检查节点状态 echo "2. 节点状态:" obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Dfgedudb -e "SHOW SERVER STATUS;" echo "----------------------------------------" # 检查租户状态 echo "3. 租户状态:" obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Dfgedudb -e "SHOW TENANT STATUS;" echo "----------------------------------------" # 检查系统资源使用情况 echo "4. 系统资源使用情况:" obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Dfgedudb -e "SELECT stat_name, value FROM V$OB_SYSSTAT WHERE stat_name LIKE '%cpu%' OR stat_name LIKE '%memory%' ORDER BY stat_name;" echo "----------------------------------------" # 检查慢SQL echo "5. 慢SQL:" obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Dfgedudb -e "SELECT sql_id, sql_text, elapsed_time, executions FROM V$OB_SQL_AUDIT WHERE elapsed_time > 1000000 ORDER BY elapsed_time DESC LIMIT 5;" echo "----------------------------------------" echo "健康检查完成!"
bash health_check.sh
OceanBase健康检查报告
检查时间:2024-01-01 00:00:00
—————————————-
1. 集群状态:
+——-+——–+—————-+———————+———————+
| Zone | Status | Leader Count | Leader Change Time | Checksum Time |
+——-+——–+—————-+———————+———————+
| zone1 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone2 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone3 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
+——-+——–+—————-+———————+———————+
—————————————-
2. 节点状态:
+—————-+——–+———-+———————+———————+
| Server | Status | Zone | Start Time | Stop Time |
+—————-+——–+———-+———————+———————+
| 192.168.1.1:2882 | ACTIVE | zone1 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.2:2882 | ACTIVE | zone2 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.3:2882 | ACTIVE | zone3 | 2024-01-01 00:00:00 | NULL |
+—————-+——–+———-+———————+———————+
—————————————-
3. 租户状态:
+—————-+——–+———————+———————+
| Tenant | Status | Start Time | Stop Time |
+—————-+——–+———————+———————+
| fgedu_tenant | ACTIVE | 2024-01-01 00:00:00 | NULL |
| system | ACTIVE | 2024-01-01 00:00:00 | NULL |
+—————-+——–+———————+———————+
—————————————-
4. 系统资源使用情况:
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 30 |
| memory_usage_percent | 50 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 8192 |
+—————————+———+
—————————————-
5. 慢SQL:
Empty set (0.00 sec)
—————————————-
健康检查完成!
检查时间:2024-01-01 00:00:00
—————————————-
1. 集群状态:
+——-+——–+—————-+———————+———————+
| Zone | Status | Leader Count | Leader Change Time | Checksum Time |
+——-+——–+—————-+———————+———————+
| zone1 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone2 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
| zone3 | ACTIVE | 100 | 2024-01-01 00:00:00 | 2024-01-01 00:00:00 |
+——-+——–+—————-+———————+———————+
—————————————-
2. 节点状态:
+—————-+——–+———-+———————+———————+
| Server | Status | Zone | Start Time | Stop Time |
+—————-+——–+———-+———————+———————+
| 192.168.1.1:2882 | ACTIVE | zone1 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.2:2882 | ACTIVE | zone2 | 2024-01-01 00:00:00 | NULL |
| 192.168.1.3:2882 | ACTIVE | zone3 | 2024-01-01 00:00:00 | NULL |
+—————-+——–+———-+———————+———————+
—————————————-
3. 租户状态:
+—————-+——–+———————+———————+
| Tenant | Status | Start Time | Stop Time |
+—————-+——–+———————+———————+
| fgedu_tenant | ACTIVE | 2024-01-01 00:00:00 | NULL |
| system | ACTIVE | 2024-01-01 00:00:00 | NULL |
+—————-+——–+———————+———————+
—————————————-
4. 系统资源使用情况:
+—————————+———+
| stat_name | value |
+—————————+———+
| cpu_usage_percent | 30 |
| memory_usage_percent | 50 |
| total_cpu_time | 1000000 |
| total_memory_allocated | 8192 |
+—————————+———+
—————————————-
5. 慢SQL:
Empty set (0.00 sec)
—————————————-
健康检查完成!
4.3 常见问题与解决方案
性能诊断与健康检查的常见问题与解决方案:
Part05-风哥经验总结与分享
5.1 性能诊断最佳实践
性能诊断的最佳实践:
5.2 健康检查最佳实践
健康检查的最佳实践:
5.3 常见问题处理技巧
常见问题处理的技巧:
风哥提示:性能诊断与健康检查是数据库运维的重要组成部分,需要定期进行,及时发现和解决问题
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
