2010-07-08 5 views
42

Estoy usando una base de datos SQLite y me gustaría acelerar mis consultas, quizás con índices o reestructurando por completo.¿Hay alguna herramienta para el perfil de las consultas de sqlite?

¿Existe alguna herramienta para las consultas de perfil que pueda ayudarme a decidir dónde se ralentiza?

Sé que podría simplemente ingresar consultas en una herramienta como Administrador de SQLite para cronometrarlas, pero estoy buscando algo un poco más sistemático que eso, tal vez algo que se sienta en segundo plano y vea todas las consultas que Ingresé durante un período, dando un desglose de los cuellos de botella.

+0

+1 para una buena pregunta. Me gustaría uno de esos también. Obviamente buscaste en Google antes de preguntar aquí, por lo que puede no ser probable. ¿También revisaste SOurceForge & FreshMeat? – Mawg

+1

Una búsqueda en google para el 'perfil sqlite' produce: http://katastrophos.net/andre/blog/2007/01/04/sqlite-simple-timing-profiler-patch/ pero este es un parche para el shell sqlite, que preferiría evitar, y no creo que haga lo que quiero.Sourceforge/FM no produjo nada de interés (no es que lo haya comprobado antes de hacer la pregunta original). – bryn

Respuesta

20

Tiene una combinación de preguntas aquí. Para ver qué consultas se ejecutan y cuánto tiempo tarda cada una, necesitará modificar sqlite3.dll si una aplicación está enlazando con eso o si es su propia aplicación, puede escribirla en su código más fácilmente (hacemos esto y luego todo consultas, transacciones, tiempos, etc.).

Para el análisis de consultas individuales, puede usar EXPLAIN. No le dirá el tiempo de los pasos individuales dentro de una consulta, pero le indicará cómo se ejecutó la consulta.

http://www.sqlite.org/lang_explain.html

Una sentencia de SQL puede ir precedido por la palabra clave "explicar" o la frase "EXPLIQUE plan de consulta". Cualquiera de las modificaciones hace que la instrucción SQL se comporte como una consulta y devuelva información sobre cómo habría funcionado la instrucción SQL si se hubiera omitido la palabra clave o frase EXPLAIN.

Cuando la palabra clave EXPLAIN aparece sola, hace que la instrucción se comporte como una consulta que devuelve la secuencia de instrucciones de la máquina virtual que habría utilizado para ejecutar el comando si la palabra clave EXPLAIN no estuviera presente. Cuando aparece la frase EXPLAIN QUERY PLAN, la declaración devuelve información de alto nivel sobre los índices que se habrían utilizado.

El resultado de EXPLAIN y EXPLAIN QUERY PLAN está destinado únicamente para el análisis interactivo y la resolución de problemas. Los detalles del formato de salida están sujetos a cambios de una versión de SQLite a la siguiente. Las aplicaciones no deben usar EXPLAIN o EXPLAIN QUERY PLAN ya que su comportamiento exacto es no documentado, no especificado y variable.

+0

Aceptaré esta respuesta, aunque no es la respuesta que quería escuchar. Esperaba una herramienta un poco más alta para el trabajo. – bryn

+1

@bryn, estoy de acuerdo contigo, SQLite generalmente no tiene buenas herramientas de alto nivel. En realidad es bastante sorprendente teniendo en cuenta lo extendido que es su uso. Tal vez la gran mayoría de sus usos esté aislado en pequeñas bases de datos (es decir, dispositivos integrados) con esquemas simples que no requieren buenas herramientas de administración o creación de perfiles. –

32

Esto solo responderá a una parte de la pregunta (la parte más inútil, desafortunadamente).

Lo busqué en Google porque estaba buscando algo para las consultas de tiempo y el cliente sqlite3 tiene un comando de temporizador meta.

sqlite> .Timer en

de allí en adelante, todos los resultados de la consulta tendrá estadísticas temporizador CPU adjuntas. Espero que esto ayude al menos un poco.

+6

+1 aunque esto no responde la pregunta, apuesto a que es lo que está buscando el 50% de las personas que vienen a esta página – tjb

+1

Esto es definitivamente por lo que vine aquí; ¡Gracias! –

2

Ahora SQLite tiene experimental sqlite3_trace y sqlite3_profile (ver https://www.sqlite.org/c3ref/profile.html para más detalles). Pueden ser útiles para tener estadísticas/investigar culpable durante pruebas largas.

Cuestiones relacionadas