可能原因
排查步骤
解决方案:
3 个赞
- 可能原因:
- 合并(Major Compaction)触发,IO 抢占,读多路归并开销大。
- 大表无索引,全表扫描,IO/CPU 飙升。
- 长事务未提交,持锁久,阻塞其他事务,锁等待堆积。
- 副本同步延迟大,备副本追日志,IO 压力高。
- 分区不均衡,热点分区压力集中。
- 硬件故障(磁盘坏道、网卡异常)。
- 排查步骤:
- 看 OCP 监控:磁盘 IO util/await、合并状态、SSTable 数量、副本延迟、CPU / 内存。
- 查慢查询日志:定位慢 SQL,分析执行计划(是否全表扫描、无索引)。
- 查事务状态:
select * from __all_virtual_trans_stat,找长事务、锁等待。 - 查分区分布:
select * from __all_virtual_partition,看是否热点分区。 - 查硬件状态:磁盘健康、网卡流量、系统日志(dmesg)。
- 解决方案:
- 合并导致:紧急手动触发合并(避开高峰)、调整合并阈值、增加 IO 资源。
- 无索引:立即加索引,优化 SQL,避免全表扫描。
- 长事务:定位并 kill 长事务,优化业务减少长事务。
- 副本延迟:检查网络、调整同步批量大小,必要时重建副本。
- 热点分区:分区拆分、调整分区键,分散压力。
- 硬件故障:更换磁盘 / 网卡,修复硬件。
这是在做财产转移啊 ![]()
财产转移正解
我的妈呀 学到了
可能原因
- SQL 查询导致的异常:复杂的查询或低效的执行计划导致数据库性能下降。(参考文档:19775)
- 磁盘 IO 故障:磁盘性能问题或磁盘利用率过高导致 IO 操作变慢。(参考文档:29, 279)
- 租户请求队列积压:高并发请求导致租户请求队列积压,SQL 响应时间变长。(参考文档:19759)
- 集群资源不足:如 CPU、内存、网络等资源不足导致性能下降。(参考文档:19716)
- 执行计划变差:由于数据分布变化或初始参数选择不当,导致执行计划变差。(参考文档:19264)
排查步骤
-
快速基础排查:
- 检查 NTP 时钟是否同步。
- 检查服务器是否宕机。
- 检查日志磁盘、数据磁盘空间是否满。
- 检查机房网络是否抖动。
- 检查负载均衡设备/组件(如 F5/LVS 等)是否故障。(参考文档:19723)
-
确认异常期间业务是否有流量冲高:
- 检查业务请求量是否比平时有明显升高。(参考文档:19723)
-
从应用层分析数据库相关报错或异常:
- 检查应用连接池是否满。
- 检查应用请求是否超时。
- 检查应用建连是否失败。
- 检查应用写入是否失败。
- 检查应用锁冲突。(参考文档:19723)
-
分析 SQL 性能问题:
- 使用
oceanbase.gv$ob_sql_audit表分析 SQL 执行情况。 - 检查是否存在 buffer 表、大小账号、硬解析等问题。
- 使用
explain extended查看执行计划,检查优化器的估行和真实行数是否有巨大差距。 - 考虑创建更合适的索引、通过 hint 调整计划形态、调整并行度等。(参考文档:271)
- 使用
-
检查磁盘状态:
- 使用系统性能监控工具 tsar 或 vsar 查看磁盘的状态。
- 使用 fio 测试磁盘性能。(参考文档:29)
解决方案
-
优化 SQL 查询:
- 绑定正确的执行计划,避免全表扫描。
- 创建合适的索引,优化查询性能。(参考文档:19264, 271)
-
缓解磁盘 IO 压力:
- 临时调小
log_disk_utilization_threshold,降低磁盘利用率。 - 调整
log_disk_size参数,确保磁盘有足够的空间。(参考文档:28, 26)
- 临时调小
-
处理租户请求队列积压:
- 增加 CPU 资源,提升处理能力。
- 优化复杂查询,减少队列积压。(参考文档:19759)
-
扩展集群资源:
- 增加节点,提高集群的整体资源。
- 调整集群参数,优化资源利用。(参考文档:19716)
-
紧急处理:
- 如果上述方法无法立即解决问题,可以考虑重启受影响的节点,恢复服务。(参考文档:4)
详情请参考:
- SQL 查询导致的异常
- 磁盘报错[errcode=-4392] disk is hung
- SQL 性能问题的典型场景和排查思路
- 租户请求队列积压
- 数据库应急概述
- SQL 调优典型场景和案例
- 分析诊断&决策流程
- oceanbase clog盘如何瘦身
- oceanbase数据库运行过程中手动删除clog日志
- get_tenant 失败后重试无法退出
关于SQL的讨论很有价值,特别是在磁盘场景下,合理使用CPU是关键。
具体的原因呢