暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

OGG复制进程延迟高,别怕,我来告诉你怎么解决!

原创 szrsu 2025-01-03
821

在OGG日常运维过程中,如果发现OGG同步进程延迟很高,该如何解决呢?通过本文的案例,让你知道如何分析和处理复制进程的延迟问题!

查看延迟情况

使用下列命令,查看进程延迟情况:

GGSCI (coredb01) 3> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                              
REPLICAT    RUNNING     REPCRE      15:28:21      05:48:19

从上面的输出结果可以看到:

(1)Time Since Chkpt 延迟时间为5个多小时,该延迟时间指replicat进程产生最近的一个检查点到目前为止有多长时间没有更新了,即最近一个检查点与当前系统时间的时间差。长时间未更新,说明有大事务执行时间较长,尚未执行成功。

(2)Lag at Chkpt 延迟时间为15个多小时,该延迟时间指replicat进程处理最后一条记录的操作系统时间和此条记录在trail文件中记录的时间戳的差值,需要注意的是lag延迟只有在检查点更新时才会更新,所以这个值不是实时更新的。

查看事务的提交情况:

GGSCI (coredb01) 93> send repcre,status

Sending STATUS request to REPLICAT REPCRE ...
  Current status: Processing data
  Sequence #: 224
  RBA: 230,877,725
  1,504 records in current transaction.

通过send repcre,status查看事务提交的记录非常慢

从上面的分析可知,目前OGG进程再执行一个大事务,且没有及时提交导致延迟,那如何找到当前是在执行什么样的语句呢?

查找当前执行的SQL

我们需要分析一下,当前的复制进程再执行什么样的语句,有什么等待事件,通过以下命令进行查看:

col username for a15
col sql_text for a100
set linesize 400
select a.inst_id, a.username, a.sid, a.serial#, a.status, a.sql_id,b.sql_text, a.event
  from gv$session a,gv$sql b
 where a.status = 'ACTIVE'
   AND a.program like 'replicat%'
   AND a.inst_id=b.inst_id
   AND a.sql_id=b.sql_id;

image.png

可以看到,当前正在执行的一条delete语句和它相关等待事件。

查看语句的执行计划

需要执行这么久,是不是它的SQL效率执行太差了?需要看一下它的执行计划:

set linesize 400;
select plan_table_output
 from table(dbms_xplan.display_cursor('6c6jxcn11ab52')); 

image.png

虽然看到这条语句有走了一个索引,但发现该索引列的选择性太差了,创建了另外一个选择性更好的列来做索引

image.png

对比一下,可以看到使用新创建的索引,它的消耗更少,执行效率更高!

当然,造成复制延迟高的问题,不止这么一种,具体问题具体分析了,本文只是提供了一种解题思路!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论