# [OGG] Lentitud de replicat

*El artículo también se encuentra publicado en Ingles* [***English version***](https://dbaintheshadow.com/ogg-replicat-is-running-too-slowly)*.*

Hoy vamos a ver un caso sencillo de un proceso de replicat en OGG que corre demasiado lento.

La situación del OGG cuando me pidieron ayuda era la siguiente:

```bash
GGSCI 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     EXXX        00:00:06      00:00:09
REPLICAT    RUNNING     Rxxx        53:14:49      00:00:03
```

El proceso de replicat **RXXX** llevaba una semana donde el ***lag*** siempre estaba en constante crecimiento, nunca disminuyendo.

Antes de entra en faena, hay que decir que la versión del ogg es una 19.1.0.0.4.

Lo primero que vamos a ver son las estadísticas del proceso con la tasa de procesamiento en minutos a ver si nos da alguna pista:

```bash
GGSCI 4> stats replicat Rxxx, totalsonly *.*, reportrate min

Sending STATS request to REPLICAT Rxxx...

Start of Statistics at 2025-09-28 00:23:05.

DDL replication statistics:

*** Total statistics since replicat started     ***
        Operations                                       104.00
        Mapped operations                                  0.00
        Unmapped operations                              104.00
        Other operations                                   0.00
        Excluded operations                                0.00
        Errors                                             0.00
        Retried errors                                     0.00
        Discarded errors                                   0.00
        Ignored errors                                     0.00

Cumulative totals for specified table(s):

*** Total statistics since 2025-09-27 23:19:02 ***
        Total inserts/minute                       0.00
        Total updates/minute                       0.00
        Total deletes/minute                       0.00
        Total upserts/minute                       0.00
        Total discards/minute                  13497.48
        Total operations/minute                    0.00

*** Daily statistics since 2025-09-28 00:00:00 ***

        No database operations have been performed.

*** Hourly statistics since 2025-09-28 00:00:00 ***

        No database operations have been performed.

*** Latest statistics since 2025-09-27 23:19:02 ***
        Total inserts/minute                       0.00
        Total updates/minute                       0.00
        Total deletes/minute                       0.00
        Total upserts/minute                       0.00
        Total discards/minute                 864456.00
        Total operations/minute                    0.00

End of Statistics.
```

Ahí ya podemos ver algún problema de performance ya que el nº de ***operations*** es muy bajo al igual que apenas hay estadísticas en las operaciones **dml**.

Miramos las definición del proceso:

```bash
REPLICAT Rxxx

useridalias ogg_xxxx
assumetargetdefs

DDL INCLUDE ALL
DDLERROR DEFAULT IGNORE

discardfile ./dirrpt/Rxxx.dsc, Append,megabytes 4000
REPERROR (0001,discard)
REPERROR (1403,discard)

TABLE SCHEMA.TABLE , TARGET PDB.SCHEMA.TABLE;
```

Ahí podemos ver que el origen es un ***single instance*** y el destino es ***multitenant***, esto no tiene que tener percance en el performance, pero si es un dato que hay que tener en cuenta.

Mirando las distintas propiedades, hecho en falta el **HANDLECOLLISIONS**, este parámetro es muy útil para ayudar a resolver conflictos a la hora de replicar la información, estos conflictos son llamados **colisiones**.

Este parámetro ayuda a OGG a resolver esas **colisiones** más eficientemente como son:

* **Insert**: Se intenta realizar un *insert* cuando la fila ya existe en el destino.
    
* **Update**: Se intenta realiza una operación de *update* en el destino cuándo la fila aún no existe
    
* **Delete**: Se intentan hacer el borrado de un registro cuando la fila no existe en el destino.
    

Modificamos nuestro proceso para incluir el parámetro quedando de la siguiente manera:

```bash
REPLICAT Rxxx

useridalias ogg_xxxx
assumetargetdefs

DDL INCLUDE ALL
DDLERROR DEFAULT IGNORE
HANDLECOLLISIONS

discardfile ./dirrpt/Rxxx.dsc, Append,megabytes 4000
REPERROR (0001,discard)
REPERROR (1403,discard)

TABLE SCHEMA.TABLE , TARGET PDB.SCHEMA.TABLE;
```

Activamos y esperamos unas horas para ver si ya va mejor.

Efectivamente, el proceso de replicat va mucho mejor, cada vez el ***lag*** está más cerca del valor cero.

```bash
GGSCI 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     EXXX        00:00:02      00:00:07
REPLICAT    RUNNING     Rxxx        26:38:41      00:00:00
```

Vamos a ver de nuevo las estadísticas del proceso:

```bash
GGSCI 3>   stats replicat Rxxx, totalsonly *.*, reportrate min

Sending STATS request to REPLICAT Rxxx...

Start of Statistics at 2025-09-28 12:19:43.

DDL replication statistics:

*** Total statistics since replicat started     ***
        Operations                                      4804.00
        Mapped operations                                  5.00
        Unmapped operations                             4799.00
        Other operations                                   0.00
        Excluded operations                                0.00
        Errors                                             7.00
        Retried errors                                     0.00
        Discarded errors                                   0.00
        Ignored errors                                     6.00

Cumulative totals for specified table(s):

*** Total statistics since 2025-09-28 00:26:27 ***
        Total inserts/minute                   63670.08
        Total updates/minute                       0.00
        Total deletes/minute                   54358.40
        Total upserts/minute                       0.00
        Total discards/minute                      0.00
        Total operations/minute               118028.47
        Total insert collisions/minute         63670.08
        Total delete collisions/minute         31318.92

*** Daily statistics since 2025-09-28 00:26:27 ***
        Total inserts/minute                   63670.08
        Total updates/minute                       0.00
        Total deletes/minute                   54358.40
        Total upserts/minute                       0.00
        Total discards/minute                      0.00
        Total operations/minute               118028.47
        Total insert collisions/minute         63670.08
        Total delete collisions/minute         31318.92

*** Hourly statistics since 2025-09-28 12:00:00 ***
        Total inserts/minute                    7272.71
        Total updates/minute                       0.00
        Total deletes/minute                  421092.52
        Total upserts/minute                       0.00
        Total discards/minute                      0.00
        Total operations/minute               428365.24
        Total insert collisions/minute          7272.71
        Total delete collisions/minute        421092.52

*** Latest statistics since 2025-09-28 00:26:27 ***
        Total inserts/minute                45413289.00
        Total updates/minute                       0.00
        Total deletes/minute                38771646.00
        Total upserts/minute                       0.00
        Total discards/minute                      0.00
        Total operations/minute             84184935.00
        Total insert collisions/minute      45413289.00
        Total delete collisions/minute      22338520.00

End of Statistics.
```

El nº de ***operations*** ha pasado de 104, **a tener más de 4000** con un flujo de operaciones **dml** correcto.

El problema de performance se ha resuelto.

![Caso Cerrado Telemundo GIF by Universo (imagen GIF)](https://media1.giphy.com/media/v1.Y2lkPWZjZGU1NDk1aGI3OWphNTlja215bmxxa3N1MTlvMzUzeDdmZjl5cDlpYWxmNmRoZyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/UqvkuqTLBP8mfDgbEI/giphy.gif align="left")

 Espero que os sirva :)
