外观
OceanBase 内置诊断命令
核心概念
内置诊断命令是指OceanBase数据库提供的用于监控、分析和诊断数据库状态的命令,这些命令可以帮助运维人员快速了解数据库的运行状况,识别性能瓶颈和故障原因。内置诊断命令涵盖集群状态检查、性能分析、故障诊断等多个方面,是OceanBase运维的重要工具。
集群状态检查命令
1. 集群整体状态
1.1 SHOW CLUSTER STATUS
功能:查看OceanBase集群的整体状态 语法:
sql
SHOW CLUSTER STATUS;示例输出:
| Status | Value |
|---|---|
| cluster_id | 1 |
| cluster_name | obcluster |
| status | ACTIVE |
| zone_list | zone1,zone2,zone3 |
| server_list | 3 |
| tenant_list | 2 |
1.2 ADMIN_CMD('show cluster status')
功能:查看更详细的集群状态信息 语法:
sql
ADMIN_CMD('show cluster status');2. 节点状态
2.1 SHOW SERVER STATUS
功能:查看所有节点的状态 语法:
sql
SHOW SERVER STATUS;2.2 查询GV$OB_SERVERS视图
功能:查看节点的详细信息,包括IP、端口、状态、资源使用情况等 语法:
sql
SELECT * FROM oceanbase.GV$OB_SERVERS;常用字段说明:
svr_ip: 节点IP地址svr_port: 节点端口status: 节点状态(ACTIVE/INACTIVE)cpu_total: 总CPU核心数cpu_assigned: 已分配的CPU核心数mem_total: 总内存大小mem_assigned: 已分配的内存大小disk_total: 总磁盘大小disk_assigned: 已分配的磁盘大小
3. 副本状态
3.1 查询GV$OB_PARTITIONS视图
功能:查看分区和副本的状态 语法:
sql
SELECT * FROM oceanbase.GV$OB_PARTITIONS WHERE table_name = 'table_name';常用字段说明:
table_id: 表IDpartition_id: 分区IDpartition_name: 分区名称role: 副本角色(LEADER/FOLLOWER)status: 副本状态zone: 副本所在的zonesvr_ip: 副本所在的节点IP
3.2 查询GV$OB_REPLICA视图
功能:查看副本的详细信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_REPLICA;性能分析命令
1. 会话和连接
1.1 SHOW PROCESSLIST
功能:查看当前活跃的会话和连接 语法:
sql
SHOW PROCESSLIST;示例输出:
| Id | User | Host | db | Command | Time | State | Info |
|---|---|---|---|---|---|---|---|
| 1 | root | 192.168.1.100:54321 | test_db | Sleep | 10 | NULL | |
| 2 | app | 192.168.1.101:54322 | test_db | Query | 0 | init | SELECT * FROM t1 |
1.2 查询GV$OB_SESSIONS视图
功能:查看更详细的会话信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_SESSIONS;2. 慢SQL分析
2.1 查询GV$OB_SLOW_QUERY视图
功能:查看慢SQL日志 语法:
sql
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 10;常用字段说明:
query_id: 查询IDsql_id: SQL语句IDsql_text: SQL语句文本query_time: 查询执行时间parse_time: 解析时间execute_time: 执行时间rows_examined: 扫描的行数rows_returned: 返回的行数
2.2 ADMIN_CMD('trace session')
功能:跟踪指定会话的执行情况 语法:
sql
ADMIN_CMD('trace session <session_id> start');
-- 执行需要跟踪的操作
ADMIN_CMD('trace session <session_id> stop');
ADMIN_CMD('trace session <session_id> show');3. 执行计划分析
3.1 EXPLAIN
功能:查看SQL语句的执行计划 语法:
sql
EXPLAIN SELECT * FROM table_name WHERE condition;示例输出:
| ID | OPERATOR | NAME | EST. ROWS | COST |
|---|---|---|---|---|
| 0 | TABLE SCAN | t1 | 100000 | 100 |
Outputs & filters:
- 0 - output([t1.col1], [t1.col2]), filter(nil), rowset=200 access([t1.col1], [t1.col2]), partitions(p0)
3.2 EXPLAIN EXTENDED
功能:查看更详细的执行计划信息 语法:
sql
EXPLAIN EXTENDED SELECT * FROM table_name WHERE condition;4. 统计信息
4.1 ANALYZE TABLE
功能:收集表的统计信息 语法:
sql
ANALYZE TABLE table_name;4.2 SHOW STATS
功能:查看表的统计信息 语法:
sql
SHOW STATS FOR TABLE table_name;故障诊断命令
1. 日志查询
1.1 ADMIN_CMD('show log')
功能:查看OceanBase日志 语法:
sql
ADMIN_CMD('show log <log_type> <limit>');参数说明:
log_type: 日志类型,如error、warn、info等limit: 显示的日志条数
示例:
sql
ADMIN_CMD('show log error 10');1.2 查询GV$OB_ERRORS视图
功能:查看错误日志 语法:
sql
SELECT * FROM oceanbase.GV$OB_ERRORS ORDER BY timestamp DESC LIMIT 10;2. 锁和死锁
2.1 查询GV$OB_LOCKS视图
功能:查看当前的锁信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_LOCKS;常用字段说明:
lock_type: 锁类型lock_mode: 锁模式(S/X/IS/IX)table_id: 表IDpartition_id: 分区IDsession_id: 持有锁的会话IDblock_session_id: 被阻塞的会话ID
2.2 查询GV$OB_DEADLOCKS视图
功能:查看死锁信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_DEADLOCKS ORDER BY occur_time DESC;3. 网络诊断
3.1 ADMIN_CMD('ping server')
功能:测试节点间的网络连通性 语法:
sql
ADMIN_CMD('ping server <svr_ip> <svr_port>');示例:
sql
ADMIN_CMD('ping server 192.168.1.101 2882');3.2 查询GV$OB_NETWORK_STAT视图
功能:查看网络统计信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_NETWORK_STAT;4. 内存诊断
4.1 查询GV$OB_MEMORY视图
功能:查看内存使用情况 语法:
sql
SELECT * FROM oceanbase.GV$OB_MEMORY WHERE tenant_id = tenant_id();常用字段说明:
module: 内存使用模块total: 总分配内存used: 已使用内存peak: 峰值内存使用
4.2 ADMIN_CMD('show memory')
功能:查看更详细的内存使用信息 语法:
sql
ADMIN_CMD('show memory');存储诊断命令
1. 磁盘和存储
1.1 查询GV$OB_DISK_STAT视图
功能:查看磁盘使用情况 语法:
sql
SELECT * FROM oceanbase.GV$OB_DISK_STAT;常用字段说明:
path: 磁盘路径total_space: 总磁盘空间free_space: 剩余磁盘空间used_space: 已使用磁盘空间in_use: 是否正在使用
1.2 ADMIN_CMD('show disk usage')
功能:查看磁盘使用详情 语法:
sql
ADMIN_CMD('show disk usage');2. SSTable管理
2.1 查询GV$OB_SSTABLES视图
功能:查看SSTable的信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_SSTABLES WHERE table_id = (SELECT table_id FROM oceanbase.DBA_OB_TABLES WHERE table_name = 'table_name');2.2 ADMIN_CMD('merge status')
功能:查看合并状态 语法:
sql
ADMIN_CMD('merge status');3. 事务日志
3.1 查询GV$OB_ARCHIVELOG视图
功能:查看归档日志信息 语法:
sql
SELECT * FROM oceanbase.GV$OB_ARCHIVELOG;3.2 ADMIN_CMD('show clog status')
功能:查看事务日志(CLOG)的状态 语法:
sql
ADMIN_CMD('show clog status');诊断命令最佳实践
1. 定期执行诊断命令
- 定期执行集群状态检查命令,如
SHOW CLUSTER STATUS、SHOW SERVER STATUS等 - 定期查看慢SQL日志,分析性能瓶颈
- 定期检查节点资源使用情况,如CPU、内存、磁盘等
2. 故障诊断流程
当发生故障时,建议按照以下流程使用诊断命令:
- 使用集群状态检查命令,了解集群整体状态
- 使用节点状态命令,检查各节点是否正常
- 使用会话和连接命令,查看是否有异常连接或会话
- 使用慢SQL分析命令,查看是否有性能问题
- 使用锁和死锁命令,检查是否有锁冲突
- 使用日志查询命令,查看错误日志
- 根据诊断结果,定位故障原因并采取相应的修复措施
3. 结合监控系统
- 将诊断命令的输出集成到监控系统中
- 配置告警规则,当关键指标异常时自动执行诊断命令
- 定期保存诊断命令的输出,便于历史分析和对比
4. 权限管理
- 限制诊断命令的使用权限,只授予运维人员和DBA
- 使用只读用户执行诊断命令,避免误操作
- 定期审查诊断命令的使用记录
常见问题(FAQ)
Q1: 如何快速查看集群是否正常?
A1: 可以使用以下命令快速查看集群状态:
sql
SHOW CLUSTER STATUS;
SHOW SERVER STATUS;如果集群状态为ACTIVE,所有节点状态为ACTIVE,则说明集群正常运行。
Q2: 如何查看当前的慢SQL?
A2: 可以使用以下命令查看慢SQL:
sql
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 10;或者使用ADMIN_CMD命令:
sql
ADMIN_CMD('show log slow 10');Q3: 如何查看某个会话正在执行的SQL?
A3: 可以使用以下命令查看会话正在执行的SQL:
sql
SELECT p.id, p.user, p.host, p.db, p.command, p.time, p.state, p.info
FROM information_schema.processlist p
WHERE p.id = <session_id>;Q4: 如何查看锁和死锁信息?
A4: 查看锁信息:
sql
SELECT * FROM oceanbase.GV$OB_LOCKS;查看死锁信息:
sql
SELECT * FROM oceanbase.GV$OB_DEADLOCKS ORDER BY occur_time DESC;Q5: 如何查看节点的资源使用情况?
A5: 可以使用以下命令查看节点的资源使用情况:
sql
SELECT svr_ip, svr_port, cpu_total, cpu_assigned, mem_total, mem_assigned, disk_total, disk_assigned
FROM oceanbase.GV$OB_SERVERS;Q6: 如何收集表的统计信息?
A6: 可以使用以下命令收集表的统计信息:
sql
ANALYZE TABLE table_name;或者使用更详细的收集选项:
sql
ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL COLUMNS;Q7: 如何查看SQL语句的执行计划?
A7: 可以使用以下命令查看SQL语句的执行计划:
sql
EXPLAIN SELECT * FROM table_name WHERE condition;对于更详细的执行计划,可以使用:
sql
EXPLAIN EXTENDED SELECT * FROM table_name WHERE condition;