Quiero solucionar el aumento de mi DiskQueueDepth en Amazon Relational Database Service (Amazon RDS) para PostgreSQL.
Descripción corta
DiskQueueDepth es el número de solicitudes de entrada y salida (E/S) que envió la aplicación, pero que aún no se han enviado al dispositivo de almacenamiento. Las solicitudes están pendientes porque el disco o el almacenamiento están ocupados con otras solicitudes.
Un valor alto de DiskQueueDepth indica que las solicitudes de E/S han aumentado más rápido de lo que el sistema de almacenamiento puede procesar. Amazon RDS informa de esta métrica como un promedio en intervalos de un minuto. Se recomienda fijar como objetivo una longitud de cola de 1 por cada 1000 IOPS disponibles.
Nota: Para medir el rendimiento de E/S, comprueba el rendimiento y la cantidad de operaciones de E/S de la instancia.
Resolución
Para solucionar el problema del aumento de DiskQueueDepth en Amazon RDS para PostgreSQL, haz lo siguiente:
Identificación de un valor alto de DiskQueueDepth
Para identificar un valor alto de DiskQueueDepth, comprueba lo siguiente:
- Comprueba las métricas de Amazon CloudWatch cuando tengas problemas de rendimiento. Busca picos en la métrica DiskQueueDepth que sean más altos de lo normal. Si DiskQueueDepth permanece elevado durante un periodo de tiempo prolongado, las consultas esperarán más tiempo antes de ejecutarse.
- Comprueba los límites de tipo de instancia. Confirma si las métricas ReadIOPS, WriteIOPS, ReadThroughput y WriteThroughput alcanzan sus límites de tipo de instancia.
- Comprueba tus métricas ReadThroughput y WriteThroughput. CloudWatch presenta estos datos en bytes por segundo, por lo que, para una interpretación más clara, convierte estos valores en MB/s o GB/s. Para determinar si has alcanzado el límite de rendimiento asignado, suma ambas métricas para el mismo periodo de tiempo. Para obtener más información sobre el rendimiento asignado a tu instancia, consulta la documentación sobre los tipos de instancias de Amazon RDS.
- Comprueba tu métrica EBSByteBalance%. Si EBSByteBalance% está en cero o cerca de cero, la instancia consume un alto rendimiento. Además, un saldo de bytes de cero indica una limitación en el ancho de banda.
Comprobación del tipo y el tamaño de almacenamiento
Para comprobar el tipo y el tamaño de tu almacenamiento, realiza las siguientes acciones:
- Optimiza tu carga de trabajo. Explora las opciones disponibles para ajustar y mejorar la eficiencia de tu carga de trabajo.
- En el caso de las SSD de uso general (gp2), asegúrate de que el tamaño de almacenamiento tenga suficientes IOPS y rendimiento de referencia.
- Para obtener más IOPS o aprovisionar gp3, io1 e io2, ajusta tu carga de trabajo o escala a una instancia más grande con una mayor capacidad de CPU, memoria y E/S.
Comprobar si hay aumentos repentinos de tráfico
Los picos inesperados en la actividad de la base de datos pueden provocar un aumento de DiskQueueDepth. Para identificar los picos en tus conexiones, toma las siguientes medidas:
- Consulta el gráfico DatabaseConnections en tus métricas de Amazon CloudWatch. Demasiadas conexiones simultáneas pueden provocar operaciones de lectura y escritura pesadas.
- Logra una longitud de cola de 1 por cada 1000 IOPS disponibles. (Esta es la línea base para los volúmenes SSD de uso general y la cantidad aprovisionada para los volúmenes SSD de E/S por segundo aprovisionadas).
- Supervisa el rendimiento de tus aplicaciones y realiza ajustes en función de tus requisitos.
Comprobar si hay problemas de microrráfagas
Si tu instancia no alcanza su límite de rendimiento o de IOPS, pero experimenta una latencia y una longitud de cola altas, es posible que tengas microrráfagas en la instancia. Para resolver este problema, consulta ¿Cómo puedo identificar si mi volumen de Amazon EBS experimenta microrráfagas y asegurarme de que esto no afecte al rendimiento? Además, asegúrate de que la supervisión mejorada esté activada y, a continuación, establece la granularidad en 1 segundo para identificar si la microrráfaga es un problema.
Optimización de las consultas incorrectas
Para optimizar las consultas incorrectas, lleva a cabo las siguientes acciones:
- Para comprobar los tipos de consulta que se ejecutan en periodos de tiempo de un valor alto de DiskQueueDepth, utiliza Información de rendimiento.
- Para generar planes de ejecución de consultas, utiliza EXPLAIN para identificar las oportunidades de optimización. Para obtener más información, consulta EXPLAIN en el sitio web de PostgreSQL.
- Comprueba si hay análisis completos de tablas, uniones ineficientes o índices que faltan que puedan provocar un exceso de E/S.