2011-02-08 15 views
6

Estoy tratando de mejorar el rendimiento de un procedimiento almacenado plpgsql de larga ejecución, pero no tengo idea de qué herramientas de generación de perfiles, si las hay, están disponibles. ¿Alguien puede ofrecer sugerencias sobre cómo hacer para perfilar tal procedimiento?Cómo perfilar los procedimientos de plpgsql

Respuesta

5

Levante un poco notices del procedimiento que incluye el clock_timestamp() para ver dónde pasa la base de datos. Y haz que los procedimientos sean lo más simples posible.

¿Podría mostrarnos un ejemplo?

+0

Estaba esperando un método que no requiera cambios en el procedimiento, pero que probablemente sea mejor que nada. http://www.depesz.com/index.php/2010/03/18/profiling-stored-proceduresfunctions/ documenta un procedimiento similar, pero parece demasiado complicado obtener datos utilizables. El procedimiento es un conjunto de bucles anidados utilizados para crear documentos para una consulta de manejador de importación de datos Solr, si eso ayuda a alguno (probablemente no). – Aneurysm9

+0

No es una gran manera de hacerlo, pero es la única manera. Es también por eso que es importante mantener las cosas cortas y simples: los procedimientos cortos son mucho más fáciles de depurar y perfilar, al igual que otros códigos. –

+0

Desafortunadamente, el procedimiento es casi tan simple como puede ser. Recorre un grupo de relaciones 1: n seleccionando algunos datos, iterando sobre n, seleccionando más datos, iterando sobre relaciones 1: n anidadas, luego RETORNA SIGUIENTE desde el bucle interno una vez que está lista la fila completa. Todo lo que es más complejo que SELECT o FOR ya ha sido puesto en otros procedimientos. – Aneurysm9

1

Para empezar, puede activar logging of all statements en el archivo de registro de Postgres. El registro contendrá el tiempo de ejecución para cada declaración. De esta forma puede identificar las consultas más lentas e intentar optimizarlas.

Pero leyendo su comentario a la publicación de Frank, supongo que su problema es el looping. Intente deshacerse del bucle y hacer todo en una sola consulta. Una afirmación que lee muchas filas generalmente es más eficiente que muchas declaraciones que solo leen unas pocas filas.

Cuestiones relacionadas