Esiste un software (preferibilmente open source) in grado di analizzare un EXPLAIN PostgreSQL e raccomandare gli indici necessari che accelererebbero la query?
Esiste un software (preferibilmente open source) in grado di analizzare un EXPLAIN PostgreSQL e raccomandare gli indici necessari che accelererebbero la query?
Risposte:
L'ho appena trovato un paio di minuti fa: http://explain.depesz.com/ . Incollare i risultati del tuo EXPLAIN ANALYZE e ti mostra dove potrebbero esserci dei problemi (è persino codificato a colori).
Dalla sezione di aiuto ...
spiegato.depesz.com è lo strumento per trovare la vera causa di domande lente. Generalmente, si usa la query EXPLAIN ANALYZE; e leggi l'output. Il problema è che non tutte le parti dell'output sono facilmente comprensibili da nessuno, e non è sempre ovvio se il nodo che viene eseguito in 17,3 ms sia più veloce o più lento di quello che gira in 100 ms - dato che il primo viene eseguito 7 volte. Per utilizzare il sito, basta andare alla sua prima pagina e incollare lì spiegare analizzare l'output dal tuo psql. Questo output potrebbe apparire così. Dopo il caricamento verrai indirizzato alla pagina che mostra analizzata e ben (beh, almeno piacevole per me :) colorata per mettere l'accento su parti importanti. Questo potrebbe apparire così. Nota a margine: l'URL per l'output colorato è persistente, quindi puoi semplicemente usarlo per mostrarlo ad altri - per esempio - per quei bravi ragazzi sul canale irc #postgresql su freenode. Questo grafico utilizza 4 colori per contrassegnare le cose importanti: sfondo bianco - tutto è finemente sfondo giallo - il nodo dato è preoccupante sfondo marrone - il nodo dato è più preoccupante sfondo rosso - il nodo dato è molto preoccupante Quale colore viene utilizzato, viene scelto in base a quale modalità userete: "Esclusivo", "Incluso" o "Righe X".
Non sono a conoscenza di alcuno strumento per Postgres che lo faccia in modo algoritmico, e secondo me il cervello umano (e spesso un po 'di sperimentazione in un ambiente di sviluppo) è davvero l'unico strumento appropriato qui. Ci sono molti fattori coinvolti, incluso il fatto che il pianificatore di query possa anche pensare che valga la pena utilizzare il tuo indice, qualcosa che è determinato dal modo in cui la tua installazione ha ottimizzato le impostazioni del pianificatore di query e le dimensioni / statistiche sulla tabella interessata ( S).
La migliore raccomandazione che posso fare è fare un EXPLAIN ANALYZE
( ANALYZE
è importante: ti fornirà i tempi di esecuzione delle query e dei piani secondari), guarda tu stesso i risultati e attacca il numero più grande che vedi per primo. Probabilmente potresti scrivere un parser per interrompere l'output EXPLAIN (specialmente in 9.0 con l'output JSON), ma non conosco nessuno che lo abbia ancora affrontato (questo è fondamentalmente ciò che fanno gli ottimizzatori per MS-SQL ...)
Niente di grado produttivo, ma per i curiosi, esiste un progetto di ricerca per implementare qualcosa del genere. Cerca "Consigliere indice PostgreSQL".