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
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?
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.
Trate de usar la extensión pg_stat_statements (http://www.postgresql.org/docs/9.2/static/pgstatstatements.html). Puede mostrar el número de llamada y el tiempo total de llamada para todas las declaraciones (incluidas las declaraciones secundarias dentro de los procedimientos de plpgsql).
Actualmente estamos buscando una mejor respuesta a esta pregunta, y hemos tropezado con esta herramienta: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ Alojado en: https://bitbucket.org/openscg/plprofiler
Pretende darle lo que busca, incluyendo el tiempo total gastado en cada línea de la función. No hemos investigado aún más, pero en base a las afirmaciones del autor, somos optimistas.
- 1. Cómo perfilar MySQL
- 2. función plpgsql vuelve mesa (..)
- 3. ¿Cómo perfilar una aplicación Silverlight?
- 4. MySQL: ¿Cómo modificar los procedimientos almacenados atómicamente?
- 5. ¿Cómo encontrar los procedimientos almacenados por nombre?
- 6. cuáles son las ventajas de usar plpgsql en postgresql
- 7. PostgreSQL error de 9,1 pg_restore respecto plpgsql
- 8. Cómo perfilar la tarea de Rake?
- 9. ¿Qué es perfilar?
- 10. ¿El SQL formado dinámicamente en los procedimientos almacenados niega el propósito mismo de los procedimientos almacenados?
- 11. Cómo perfilar (depurar) ExtJS EventPipe/Events
- 12. PostgreSQL: ¿Retirar una transacción dentro de una función plpgsql?
- 13. PLPGSQL array indexing start at 1?
- 14. ¿Cómo se depuran los procedimientos almacenados de MySQL?
- 15. ¿Cómo llamo a los procedimientos almacenados de MySQL desde Perl?
- 16. ¿Cómo puedo perfilar una aplicación con SQLAlchemy?
- 17. Cómo perfilar mi aplicación C++ en Linux
- 18. Cómo perfilar RSpec con perftools y bundler?
- 19. ¿Qué herramientas existen para perfilar procedimientos almacenados en el servidor SQL que no sean el perfilador de MS?
- 20. ERROR: debe ser dueño del plpgsql lenguaje
- 21. pseudo_encrypt() función en plpgsql que toma bigint
- 22. Cómo perfilar un comando de administración personalizada de Django exclusivamente
- 23. ¿Cuándo debo usar los procedimientos almacenados?
- 24. ¿los llama funciones, procedimientos o métodos?
- 25. ¿Los procedimientos almacenados bloquean las tablas/filas?
- 26. ¿Cómo migrar los procedimientos almacenados para probar db?
- 27. ¿Cómo y cuándo mysql compila los procedimientos almacenados?
- 28. ¿Cómo depurar los procedimientos almacenados en Sybase ASE?
- 29. Cómo usar los procedimientos almacenados con Symfony y Doctrine
- 30. Versiones de procedimientos almacenados
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
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. –
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