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 degarbage collection
en el archivopgss_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.
Temas
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.