Ho una tabella DB con 25 milioni di righe, ~ 3K ciascuna (cioè ~ 75 GB), che insieme a più indici che uso (un ulteriore 15-20 GB) non sarà adatto interamente alla memoria (64 GB sulla macchina). Una query tipica individua 300 righe attraverso un indice, opzionalmente le filtra in ~ 50-300 righe usando altri indici, recuperando infine le righe corrispondenti. I tempi di risposta variano tra 20 ms su un DB caldo a 20 secondi su un DB freddo. Ho due domande correlate:Prestazioni di cache Postgresql (memoria) + Come riscaldare la cache
in un dato momento come posso controllare quale parte (%) di tabelle e indici specifici viene memorizzata nella cache in memoria?
Qual è il modo migliore per scaldare la cache prima di aprire il DB alle query? Per esempio. "select *" forza una scansione sequenziale (~ 15 minuti sul DB freddo) ma i tempi di risposta che seguono sono ancora scadenti. C'è un modo integrato per effettuare questa operazione invece che tramite query un
Grazie, si sente libero di rispondere anche per e-mail ([email protected]])
-? Shaul
Il problema è che non riesco a indovinare le query dell'utente, penso "Amazon" - quali saranno le prossime 10000 domande? Quindi mi sarebbe piaciuto eseguire qualcosa che estraesse tabelle e indici specifici nella cache. –
Non indovinare. Effettua un log effettivo dagli ultimi 5 minuti o dalle ultime 10.000 query. Ho lavorato su "un fornitore leader di motori di ricerca" e questo funziona alla grande. Oppure, se si dispone di server in esecuzione e si desidera riscaldarne uno nuovo, è possibile eseguire il mirroring delle query sul server che deve essere sottoposto a riscaldamento. – Thomas