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

在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

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

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

关注我,学习更多的数据库知识!
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值