

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Consultas de larga duración
<a name="anti-pattern-long-running-queries"></a>

## Descripción general de
<a name="long-queries-overview"></a>

Long-running las consultas pueden provocar problemas de rendimiento en todo el clúster. Estas consultas pueden interferir con el proceso de recopilación de elementos no utilizados del Control de Multi-Version Concurrencia (MVCC) de Amazon DocumentDB, lo que provoca la acumulación de documentos con versiones antiguas y una degradación del rendimiento en todo el clúster. Amazon DocumentDB implementa un tiempo de espera de 2 horas en el servidor como mecanismo de seguridad para evitar que las consultas incontroladas consuman recursos de forma indefinida.

**Qué son las consultas de larga duración:**
+ Consultas que se ejecutan durante períodos prolongados (normalmente > 30 minutos)
+ Abre los cursores que permanecen activos durante horas (no se aplicará un tiempo de espera de 2 horas si el cursor está activo)

## Impacto en el clúster
<a name="long-queries-impact"></a>

**Las consultas de larga duración pueden interferir con el proceso de recolección de basura**
+ **Las versiones antiguas se acumulan**: el recolector de basura no puede recuperar versiones antiguas de documentos
+ Abundamiento de **colecciones e índices**: las entradas de recopilación e índice se acumulan con el tiempo, lo que aumenta y, por lo tanto, puede resultar en un mayor costo de almacenamiento.
+ Presión de **la CPU y la memoria: la presión** de la CPU y la memoria aumenta debido al procesamiento ineficiente del mayor número de versiones antiguas de documentos, entradas de índice e ID de transacciones.

Consulta de larga duración → Bloquea el GC → Crecimiento del almacenamiento → Presión de la CPU y la memoria → Consultas más largas

## Supervise y detecte
<a name="long-queries-monitoring"></a>

**1. Para buscar consultas de ejecución prolongada, utilice el comando CurrentOp.**

```
// To find a query running for more than 30 mins
db.adminCommand({
    aggregate: 1,
    pipeline: [
        {$currentOp: {}},
        {$match: 
            {$or: 
                [{secs_running: {$gt: 1800}},
                 {WaitState: {$exists: true}}]}}],
    cursor: {}
});
```

**2. Para buscar cursores que estén activos durante más de 30 minutos**

```
// To find cursor which is running more than 30 mins
db.adminCommand({
    "currentOp": true,
    "active": true,
    "$all": true
}).inprog.filter(function(op) {
    return op.desc == "Cursor" && 
           op.secs_running > 1800 && 
           op.active == true;
}).sort((a, b) => b.microsecs_running - a.microsecs_running)
```

**3. Monitorear el progreso del recolector de basura mediante CloudWatch**

`LongestRunningGCProcess`— Duración en segundos del proceso de recolección de basura activo más prolongado. Se actualiza cada minuto y realiza un seguimiento únicamente de las operaciones activas, excluyendo los procesos que se completan en el intervalo de un minuto.

`AvailableMVCCIds`-Un contador que muestra el número de operaciones de escritura restantes disponibles antes de llegar a cero. Cuando este contador llega a cero, el clúster pasa al modo de solo lectura hasta que se recuperen y reciclen los identificadores. El contador disminuye con cada operación de escritura y aumenta a medida que la recopilación de elementos no utilizados recicla los identificadores de MVCC antiguos.

**nota**  
Los ID de MVCC más bajos y la duración prolongada de la recolección de basura no se atribuyen exclusivamente a consultas de larga duración. Write-intensive Las cargas de trabajo en instancias con recursos limitados también pueden reducir la disponibilidad de los identificadores de MVCC y prolongar los ciclos de recolección de basura.

## Estrategias de remediación
<a name="long-queries-remediation"></a>
+ Implemente los tiempos de espera de las consultas en la aplicación
+ No mantenga los cursores activos durante períodos más largos
+ Optimice las consultas para obtener un mejor rendimiento.
+ Prefiera el procesamiento por lotes de las operaciones de escritura