¿Existe algún software (preferiblemente de código abierto) que pueda analizar una EXPLICACIÓN de PostgreSQL y recomendar los índices necesarios que acelerarían la consulta?
¿Existe algún software (preferiblemente de código abierto) que pueda analizar una EXPLICACIÓN de PostgreSQL y recomendar los índices necesarios que acelerarían la consulta?
Respuestas:
Literalmente acabo de encontrar esto hace un par de minutos: http://explain.depesz.com/ . Pega los resultados de tu EXPLAIN ANALYZE y te muestra dónde puede haber problemas (incluso está codificado por colores).
De la sección de ayuda ...
explicar.depesz.com es una herramienta para encontrar la causa real de las consultas lentas. En general, uno usaría la consulta EXPLAIN ANALYZE; y lee la salida. El problema es que no todas las partes de la salida son fácilmente comprensibles por nadie, y no siempre es obvio si el nodo que se ejecuta en 17.3 ms es más rápido o más lento que el que se ejecuta en 100 ms, dado el hecho de que el primero se ejecuta 7 veces. Para usar el sitio, simplemente vaya a su primera página y pegue allí, explique la salida de análisis de su psql. Esta salida podría verse así. Después de subirlo, se lo dirigirá a la página que muestra analizada y muy bien (bueno, al menos agradable para mí :) coloreada para poner énfasis en las partes importantes. Esto podría verse así. Nota al margen: la url para la salida coloreada es persistente, así que simplemente puede usarlo para mostrarlo a otros, por ejemplo, para esos buenos chicos en el canal irc #postgresql en freenode. Este gráfico utiliza 4 colores para marcar cosas importantes: fondo blanco - todo es un fondo amarillo fino - el nodo dado es preocupante fondo marrón - el nodo dado es más preocupante fondo rojo - el nodo dado es muy preocupante Qué color se usa, se elige en función de qué modo utilizará: "Exclusivo", "Inclusivo" o "Filas X".
No conozco ninguna herramienta para Postgres que haga esto algorítmicamente, y en mi opinión, el cerebro humano (y a menudo un poco de experimentación en un entorno de desarrollo) es realmente la única herramienta apropiada aquí. Hay muchos factores involucrados, incluso si el planificador de consultas incluso pensará que vale la pena usar su índice, algo que se determina por la forma en que su instalación ha ajustado la configuración del planificador de consultas y el tamaño / estadísticas en la tabla involucrada ( s)
La mejor recomendación que puedo hacer es hacer un EXPLAIN ANALYZE
(lo que ANALYZE
es importante, le dará tiempos de consulta y subplan de ejecución), mirar los resultados usted mismo y atacar al mayor número que vea primero. Probablemente podría escribir un analizador para dividir la salida EXPLAIN (especialmente en 9.0 con salida JSON), pero no conozco a nadie que haya abordado esto todavía (esto es básicamente lo que hacen los optimizadores para MS-SQL ...)
Nada de grado de producción, pero para los curiosos, hay / hubo un proyecto de investigación para implementar algo así. Busque el "asesor de índices PostgreSQL".