LWLock:pg_stat_statements - Amazon Aurora

LWLock:pg_stat_statements

El evento de espera LWLock:pg_stat_statements se produce cuando la extensión pg_stat_statements toma un bloqueo exclusivo en la tabla hash que rastrea las instrucciones SQL. Esto ocurre en las siguientes situaciones:

  • Cuando el número de instrucciones rastreadas alcanza el valor del parámetro pg_stat_statements.max configurado y es necesario dejar espacio para más entradas, la extensión realiza una clasificación del número de llamadas, elimina el 5 % de las instrucciones menos ejecutadas y vuelve a rellenar el hash con las entradas restantes.

  • Cuando pg_stat_statements realiza una operación de garbage collection en el archivo pgss_query_texts.stat del disco y lo vuelve a escribir.

Versiones del motor admitidas

Esta información de eventos de espera es compatible con todas las versiones de Aurora PostgreSQL.

Contexto

Descripción de la extensión pg_stat_statements: la extensión pg_stat_statements rastrea las estadísticas de ejecución de instrucción SQL en una tabla hash. La extensión rastrea las instrucciones SQL hasta el límite definido por el parámetro pg_stat_statements.max. Este parámetro determina el número máximo de instrucciones que se pueden rastrear, lo que corresponde al número máximo de filas en la vista de pg_stat_statements.

Persistencia de las estadísticas de las instrucciones: la extensión mantiene las estadísticas de las instrucciones a través de reinicios de instancia mediante:

  • Escritura de datos en un archivo llamado pg_stat_statements.stat

  • Uso del parámetro pg_stat_statements.save para controlar el comportamiento de persistencia

Cuando pg_stat_statements.save se establece en:

  • activado (predeterminado): las estadísticas se guardan al apagar el servidor y se vuelven a cargar al iniciar el servidor

  • desactivado (predeterminado): las estadísticas no se guardan al apagar el servidor ni se vuelven a cargar al iniciar el servidor

Almacenamiento de texto de consulta: la extensión almacena el texto de las consultas rastreadas en un archivo denominado pgss_query_texts.stat. Este archivo puede crecer hasta duplicar el tamaño medio de todas las instrucciones SQL rastreadas antes de que se produzca la recopilación de elementos no utilizados. La extensión requiere un bloqueo exclusivo en la tabla de hash durante las operaciones de limpieza y reescritura del archivo pgss_query_texts.stat.

Proceso de desasignación de instrucciones: cuando el número de instrucciones rastreadas alcanza el límite pg_stat_statements.max y es necesario realizar un seguimiento de las nuevas, la extensión:

  • Toma un bloqueo exclusivo (LWLock:pg_stat_statements) en la tabla de hash.

  • Carga los datos existentes en la memoria local.

  • Realiza una clasificación rápida en función del número de llamadas.

  • Elimina las instrucciones menos solicitadas (el 5 % inferior).

  • Vuelve a rellenar la tabla hash con las entradas restantes.

Supervisión de la desasignación de instrucciones: en PostgreSQL 14 y versiones posteriores, puede supervisar la desasignación de las instrucciones mediante la vista pg_stat_statements_info. Esta vista incluye una columna dealloc que muestra cuántas veces se desasignaron las instrucciones para dejar espacio a otras nuevas

Si la desasignación de las instrucciones se produce con frecuencia, se realizará con más frecuencia la recopilación de elementos no utilizados del archivo pgss_query_texts.stat en el disco.

Causas probables del aumento del tiempo de espera

Entre las causas típicas del aumento de las esperas de LWLock:pg_stat_statements se incluyen las siguientes:

  • Un aumento en el número de consultas únicas utilizadas por la aplicación.

  • El valor del parámetro pg_stat_statements.max es pequeño en comparación con el número de consultas únicas que se utilizan.

Acciones

Recomendamos diferentes acciones en función de las causas del evento de espera. Puede identificar los eventos de LWLock:pg_stat_statements mediante Información de rendimiento de Amazon RDS o consultando la vista de pg_stat_activity.

Ajuste los siguientes parámetros pg_stat_statements para controlar el comportamiento de seguimiento y reducir los eventos de espera de las instrucciones LWLock:pg_stat_statements.

Desactivación del parámetro pg_stat_statements.track

Si el evento de espera de LWLock:pg_stat_statements está afectando negativamente al rendimiento de la base de datos y se requiere una solución rápida antes de continuar con el análisis de la vista de pg_stat_statements para identificar la causa raíz, el parámetro pg_stat_statements.track se puede desactivar configurándolo en none. Esto desactivará la recopilación de estadísticas de instrucciones.

Aumento del parámetro pg_stat_statements.max

Para reducir la desasignación y minimizar la recopilación de elementos no utilizados del archivo pgss_query_texts.stat en el disco, aumente el valor del parámetro pg_stat_statements.max. El valor predeterminado es 5,000.

nota

El parámetro pg_stat_statements.max está estático. Debe reiniciar la instancia de base de datos para aplicar los cambios a este parámetro.

Desactivación del parámetro pg_stat_statements.track_utility

Puede analizar la vista de pg_stat_statements para determinar qué comandos de utilidad consumen la mayor cantidad de recursos rastreados por pg_stat_statements.

El parámetro pg_stat_statements.track_utility controla si el módulo realiza un seguimiento de los comandos de utilidad, que incluyen todos los comandos excepto SELECT, INSERT, UPDATE, DELETE y MERGE. Este parámetro está establecido en on de forma predeterminada.

Por ejemplo, cuando la aplicación utiliza muchas consultas de puntos de guardado, que son intrínsecamente únicas, puede aumentar la desasignación de instrucciones. Para abordar este problema, puede desactivar el parámetro pg_stat_statements.track_utility para impedir que pg_stat_statements realice un seguimiento de las consultas de puntos de guardado.

nota

El parámetro pg_stat_statements.track_utility es un parámetro dinámico. Puede cambiar su valor sin necesidad de reiniciar la instancia de la base de datos.

ejemplo Ejemplo de consultas de punto de guardado únicas en pg_stat_statements
query | queryid -------------------------------------------------+--------------------- SAVEPOINT JDBC_SAVEPOINT_495701 | -7249565344517699703 SAVEPOINT JDBC_SAVEPOINT_1320 | -1572997038849006629 SAVEPOINT JDBC_SAVEPOINT_26739 | 54791337410474486 SAVEPOINT JDBC_SAVEPOINT_1294466 | 8170064357463507593 ROLLBACK TO SAVEPOINT JDBC_SAVEPOINT_65016 | -33608214779996400 SAVEPOINT JDBC_SAVEPOINT_14185 | -2175035613806809562 SAVEPOINT JDBC_SAVEPOINT_45837 | -6201592986750645383 SAVEPOINT JDBC_SAVEPOINT_1324 | 6388797791882029332

PostgreSQL 17 presenta varias mejoras para el seguimiento de comandos de utilidades:

  • Los nombres de los puntos de guardado ahora se muestran como constantes.

  • Los ID de transacción globales (GID) de los comandos de confirmación de dos fases ahora se muestran como constantes.

  • Los nombres de las instrucciones DEALLOCATE se muestran como constantes.

  • Los parámetros CALL ahora se muestran como constantes.