2010-07-08 8 views
42

Sto utilizzando un database SQLite e vorrei velocizzare le mie query, magari con indici o ristrutturandole del tutto.C'è uno strumento per profilare query sqlite?

C'è uno strumento per le query del profilo, che potrebbe aiutarmi a decidere dove rallentare le cose?

So che potrei inserire query in uno strumento come SQLite Administrator per cronometrare, ma sto cercando qualcosa di un po 'più sistematico di quello - forse qualcosa che si trova in background e guarda tutte le query che Entro per un periodo, dando una rottura di eventuali colli di bottiglia.

+0

+1 per una buona domanda. Mi piacerebbe anche uno di quelli. Ovviamente hai cercato su Google prima di chiedere qui, quindi potrebbe non essere probabile. Hai controllato anche su SOurceForge e FreshMeat? – Mawg

+1

Una ricerca su google per 'sqlite profile' produce: http://katastrophos.net/andre/blog/2007/01/04/sqlite-simple-timing-profiler-patch/ ma questa è una patch per la shell sqlite, che preferirei evitare, e non penso che faccia ciò che voglio.Sourceforge/FM non ha prodotto alcun interesse (non che io abbia controllato lì prima di porre la domanda originale). – bryn

risposta

20

Hai un mix di domande qui. Per visualizzare quali query vengono eseguite e per quanto tempo ciascuna richiede, è necessario modificare sqlite3.dll se un'applicazione si collega a questa o se è la propria applicazione, è possibile scriverla nel codice più facilmente (lo facciamo e per molto tempo domande, transazioni, tempistiche, ecc.).

Per l'analisi delle singole query, è possibile utilizzare EXPLAIN. Non ti dirà i tempi dei singoli passaggi all'interno di una query, ma ti comunicherà come è stata eseguita la query.

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

Un'istruzione SQL può essere preceduto dalla parola chiave "spiegare" o con la frase "spiegano QUERY PIANO". Qualsiasi modifica fa sì che l'istruzione SQL si comporti come una query e restituisca informazioni su come l'istruzione SQL avrebbe funzionato se la parola chiave o la frase EXPLAIN fosse stata omessa.

Quando la parola chiave EXPLAIN appare da sola, l'istruzione si comporta come una query che restituisce la sequenza di istruzioni della macchina virtuale che avrebbe utilizzato per eseguire il comando se la parola chiave EXPLAIN non era presente. Quando viene visualizzata la frase EXPLAIN QUERY PLAN, l'istruzione restituisce informazioni di alto livello su quali indici sarebbero stati utilizzati.

L'output da EXPLAIN e EXPLAIN QUERY PLAN è destinato esclusivamente all'analisi interattiva e alla risoluzione dei problemi. I dettagli del formato di output sono soggetti a modifiche da una versione di SQLite alla successiva. Le applicazioni non dovrebbero usare EXPLAIN o EXPLAIN QUERY PLAN poiché il loro comportamento esatto è non documentato, non specificato e variabile.

+0

Accetterò questa risposta anche se non è la risposta che volevo sentire. Speravo in uno strumento leggermente più alto per il lavoro. – bryn

+1

@bryn, sono d'accordo con te, SQLite è generalmente privo di buoni strumenti di alto livello. In realtà è piuttosto sorprendente considerando quanto sia diffuso il suo utilizzo. Forse la stragrande maggioranza dei suoi usi è isolata da piccoli database (cioè dispositivi incorporati) con schemi semplici che non richiedono strumenti di gestione o di profilazione validi. –

32

Questo risponderà solo a una parte della domanda (la parte più inutile, purtroppo).

Ho cercato su google perché stavo cercando qualcosa per le interrogazioni temporali e il client sqlite3 ha un meta comando del timer.

sqlite> .Timer su

da lì in poi, tutti i risultati della query avrà statistiche timer cpu annesse. Spero che questo aiuti almeno un po '.

+6

+1 anche se questo non risponde alla domanda, scommetto che cosa sta cercando il 50% delle persone che vengono a questa pagina – tjb

+1

Questo è sicuramente ciò per cui sono venuto qui; Grazie! –

2

Ora SQLite ha sperimentale sqlite3_trace e sqlite3_profile (vedere https://www.sqlite.org/c3ref/profile.html per dettagli). Possono tornare utili per avere statistiche/investigare colpevoli durante lunghi test.

Problemi correlati