【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.1.4
【问题描述】数据库出现很多latch: default spin rwlock wait和latch: default bucket lock wait等待事件,对于ash中这些事件占的比较多的sql要怎么处理,这块的资料比较缺乏
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
          
          
            论坛小助手
            
          
          
          
              
              
          #3
          
         
        
          从您的描述来看,您在使用 OceanBase 4.2.1.4 版本的过程中遇到了大量的 latch 等待事件,这通常表明存在较高的锁竞争情况。这类问题可能会影响系统的整体性能,尤其是在 Application Support History (ASH) 报告中显示这些等待事件占比很高时,说明它们对 SQL 查询的执行效率产生了显著影响。
针对这种情况,我们可以先通过 obdiag 工具来采集一些必要的诊断信息,以便进一步分析问题的原因。不过,根据现有的 obdiag 支持的场景,这里更适合进行日志采集而非直接进行根因分析,因为 obdiag 目前还没有直接针对 latch 竞争问题的根因分析场景。
日志采集场景: 内存问题
日志采集命令:
obdiag gather scene run --scene=observer.memory
该命令会收集与内存相关的信息,包括但不限于锁竞争的情况,这对于理解 latch 等待事件的上下文非常有帮助。
推荐步骤:
- 
执行上述命令,并等待命令执行完毕。这将生成一个包含诊断信息的压缩文件。
- 
上传压缩文件,您可以将这个文件发送给我们,我们将进一步分析这些 latch 等待事件的具体原因。
为了更准确地定位问题,请您提供以下信息:
- 
SQL执行频率和并发度: 您能否提供这些 SQL 的执行频率和并发度信息?这有助于了解是否存在某些特定 SQL 导致了锁的竞争。
- 
数据库负载: 当前数据库的负载情况如何?是否有其他操作或任务正在运行,可能会导致锁竞争加剧?
- 
配置信息: 您是否对数据库进行了任何特殊配置调整?例如,与锁相关的参数设置。
- 
业务场景: 您能否简单描述一下业务场景?这有助于我们理解 SQL 的执行背景及其重要性。
附上敏捷诊断工具 obdiag 使用帮助链接
         
        
        
           
           
           
         
         
            
            
          
       
      
        
          
          
            淇铭
            
          
          
          
              
              
          #4
          
         
        
          
通过查询DBA_WR_SYSTEM_EVENT表来查看系统级别的等待事件统计情况。以下是一个示例查询结果:
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_WR_SYSTEM_EVENT LIMIT 10;
±--------±---------------±---------±---------±------------------------------------------±--------------±------------±------------±---------------±------------------+
| SNAP_ID | SVR_IP         | SVR_PORT | EVENT_ID | EVENT_NAME                                | WAIT_CLASS_ID | WAIT_CLASS  | TOTAL_WAITS | TOTAL_TIMEOUTS | TIME_WAITED_MICRO |
±--------±---------------±---------±---------±------------------------------------------±--------------±------------±------------±---------------±------------------+
|       1 | 172.xx.xxx.xxx |     2882 |        2 | latch: default spin rwlock wait           |           104 | CONCURRENCY |           7 |              0 |            113693 |
|       1 | 172.xx.xxx.xxx |     2882 |        3 | latch: default mutex wait                 |           104 | CONCURRENCY |         517 |              0 |             29687 |
|       1 | 172.xx.xxx.xxx |     2882 |        8 | latch: trans ctx latch wait               |           104 | CONCURRENCY |          84 |              0 |             68001 |
|       1 | 172.xx.xxx.xxx |     2882 |       33 | latch: ls latch wait                      |           104 | CONCURRENCY |           2 |              0 |              9829 |
|       1 | 172.xx.xxx.xxx |     2882 |       40 | latch: config lock wait                   |           104 | CONCURRENCY |          20 |              0 |            358460 |
|       1 | 172.xx.xxx.xxx |     2882 |       47 | latch: rs bootstrap lock wait             |           104 | CONCURRENCY |           1 |              0 |          29706546 |
|       1 | 172.xx.xxx.xxx |     2882 |       55 | latch: unit manager lock wait             |           104 | CONCURRENCY |           2 |              0 |              2965 |
|       1 | 172.xx.xxx.xxx |     2882 |       92 | latch: block manager lock wait            |           104 | CONCURRENCY |           1 |              0 |                 5 |
|       1 | 172.xx.xxx.xxx |     2882 |       99 | latch: tablet bucket lock wait            |           104 | CONCURRENCY |           3 |              0 |              2684 |
|       1 | 172.xx.xxx.xxx |     2882 |      202 | latch: zone merge manager write lock wait |           104 | CONCURRENCY |           1 |              0 |               554 |
±--------±---------------±---------±---------±------------------------------------------±--------------±------------±------------±---------------±------------------+
10 rows in set
从这个查询结果中我们可以看到,确实存在latch: default spin rwlock wait等待事件,但是没有直接提到latch: default bucket lock wait这一特定类型的等待事件。
针对latch: default spin rwlock wait这类等待事件,我们可以观察到它属于CONCURRENCY等待类别,并且在这个例子中有7次等待记录,总等待时间为113,693微秒。这表明数据库中可能存在一些并发操作导致了这些等待的发生。
通常来说,latch等待事件的发生可能是因为数据库内部的一些资源竞争,例如并发的事务处理或数据结构访问等。具体原因可能包括但不限于:
多个事务同时访问同一资源。
数据库内部的缓存管理机制。
并发控制策略。
为了进一步诊断问题,您可以考虑以下步骤:
分析具体的等待事件:检查DBA_WR_SYSTEM_EVENT表中与latch相关的其他等待事件,了解是否有特定的模式或趋势。
监控SQL执行:使用DBA_HIST_SQLTEXT等视图来查看是否有某些SQL语句频繁触发这些等待事件。
调整并发设置:根据具体情况调整数据库的并发控制参数,比如事务隔离级别等。
优化SQL语句:如果发现某些SQL语句是问题的根源,尝试优化这些语句以减少对共享资源的竞争。
具体信息可参考以下文档:
oceanbase.DBA_WR_SYSTEM_EVENT