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
Descripción general de
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
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
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
-
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