Domanda

Ho un data warehouse basato su PostgreSQL.

Fino ad ora, ho cercato di eseguire query su un database che contiene solo una frazione del mio vero database. Una volta ho scritto le query in un modo che li rende efficiente per questo piccolo database di prova ho eseguito le query su quello reale.

Il problema è che una volta ho eseguito le query sul database vero e proprio, il database vero e proprio esaurisce la memoria e inizia a scrivere le cose come gli indici e tabelle temporanee su disco. Ciò significa che potrebbe essere che query diverse sarebbe ottimale per per il database di prova e il database vero e proprio. Questo vuol dire che ho davvero per eseguire query che richiedono diversi minuti per completare al fine di conoscere, che query è quella ottimale.

È stato utile?

Soluzione

Scopri come interpretare il EXPLAIN uscita, quindi controllare che gli spettacoli di uscita EXPLAIN che il piano di query scelto nel vostro database di grandi dimensioni è simile a quello che ci si aspetta, prima di eseguire la query.

Altri suggerimenti

Tre domande:

1) Come complesso sono le domande? La generazione di indici e tabelle temporanee suggerisce il server deve generare queste cose a causa di operazioni complesse su colonne non indicizzati. Quante probabilità è questo? Da quello che si segnala, a quanto pare la risposta probabile è "complesso"

2) Quanto sono grandi i rendimenti set? È il risultato finale di 100 righe o 1 milione? Da quello che si segnala, la risposta potrebbe essere qualsiasi cosa. Ho il sospetto che questa domanda non è così importante, ma è importante, almeno per sapere.

3) Riprendendo la domanda 1 in un modo diverso, anche se gli insiemi restituiti sono piccole, ci sono enormi risultati intermedi che devono essere compilati sulla strada per il piccolo risultato? Anche in questo caso, ho il sospetto che la risposta qui è grandi risultati intermedi complessi vengono generati.

Questo sembra indicare che a meno alcune cose devono essere indicizzati, e forse i dati necessari ad essere strutturato sulla strada per essere più vicino a quello che si sta cercando di query.

Un'ultima domanda, questo è un problema diffuso per la maggior parte dei vostri più importanti domande, oppure solo per uno o due?

Modifica in risposta al commento: che faccio data warehouse interroga tutto il giorno, e alcuni di loro richiedere 10 minuti o giù di lì. Alcune ore take, e li spingono fuori in un processo in background e li rompono in fasi per evitare bogging tutto giù. Questa è la natura di gestire grandi insiemi di dati.

Le mie domande a risposta originale mirano a capire se le vostre domande problema sarà mai finitura. E 'possibile scrivere involontariamente una query che produce dati così tanto intermedi che si può camminare via, tornare 2 giorni più tardi, ed è ancora in esecuzione. Quindi mi sento di ribadire il mio originale tre domande, sono infatti l'unico modo per rispondere completamente alla tua domanda.

Recap: Sì, alcune query prendono molto più tempo, è la natura della bestia. Il meglio che puoi sperare è lineare sulle prestazioni per la quantità di dati da leggere, e se non vi 100 milioni di righe da elaborare, che si terrà minuti invece di secondi. Ma, soprattutto, se una query viene eseguito in 4 secondi su 1 milione di righe, ma su 100 milioni di righe prende >> 400 secondi (come un'ora) poi quelle domande originali ho chiesto vi aiuterà a capire il motivo per cui, con l'obiettivo di ottimizzare quelle domande.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top