Domanda

Sto configurando un'applicazione web con un back-end PostgreSQL FreeBSD.Sto cercando uno strumento/tecnica di ottimizzazione delle prestazioni del database.

È stato utile?

Soluzione

pgfouine funziona abbastanza bene per me.E sembra che ci sia un Porta FreeBSD per questo.

Altri suggerimenti

L'ottimizzazione del database è solitamente una combinazione di due cose

  1. Ridurre il numero di query al database
  2. Ridurre la quantità di dati da esaminare per rispondere alle domande

La riduzione della quantità di query viene solitamente eseguita memorizzando nella cache dati non volatili/meno importanti (ad es."Quali utenti sono online" o "Quali sono gli ultimi post di questo utente?") all'interno dell'applicazione (se possibile) o in un datastore esterno - più efficiente - (memcached, redis, ecc.).Se hai informazioni che richiedono molta scrittura (ad es.contatori di visite) e non è necessario ACIDO-semantica puoi anche pensare di spostarlo dal database Postgres ad archivi dati più efficienti.

Ottimizzare il runtime della query è più complicato: può equivalere a creare indici speciali (O gli indici in primo luogo), modificando (eventualmente denormalizzando) il modello dei dati o modificando l'approccio fondamentale adottato dall'applicazione quando si tratta di lavorare con il database.Vedi ad esempio il L'impaginazione è stata eseguita alla maniera di Postgres parlare da Markus Winand su come ripensare il concetto di impaginazione per renderlo più efficiente nel database

Misurare le query in modo lento

Ma per capire quali query dovrebbero essere esaminate per prime, è necessario sapere quanto spesso vengono eseguite e quanto tempo durano in media.

Un approccio a questo problema consiste nel registrare tutte le query (o "lente"), incluso il relativo runtime, e quindi nell'analizzare il registro delle query.Un buon strumento per questo è pgfouine che è già stato menzionato in precedenza in questa discussione, da allora è stato sostituito da pgbadger che è scritto in un linguaggio più amichevole, è molto più veloce e gestito in modo più attivo.

Entrambi pgfouine E pgbadger soffrono del fatto che hanno bisogno della registrazione delle query abilitata, il che può causare un notevole calo delle prestazioni del database o causare problemi di spazio su disco oltre al fatto che l'analisi del registro con lo strumento può richiedere parecchio tempo e non lo farà fornirti informazioni aggiornate su ciò che sta accadendo nel database.

Accelerarlo con le estensioni

Per risolvere queste carenze ora ci sono due estensioni che tengono traccia delle prestazioni delle query direttamente nel database: pg_stat_statements (che è utile solo nella versione 9.2 o successiva) e pg_stat_plans.Entrambe le estensioni offrono le stesse funzionalità di base: tenere traccia della frequenza con cui è stata eseguita una determinata "query normalizzata" (stringa di query meno tutti i valori letterali dell'espressione) e il tempo impiegato in totale.Dato che questa operazione viene eseguita mentre la query viene effettivamente eseguita, viene eseguita in modo molto efficiente, il sovraccarico misurabile è stato inferiore al 5% nei benchmark sintetici.

Dare un senso ai dati

L'elenco delle query in sé è molto "arido" dal punto di vista informativo.Si è lavorato su una terza estensione cercando di risolvere questo fatto e offrire una rappresentazione migliore dei dati chiamati pg_statsinfo (insieme a pg_stats_reporter), ma è un po' un'impresa metterlo in funzione.

Per offrire una soluzione più conveniente a questo problema ho iniziato a lavorare su un progetto commerciale incentrato su questo pg_stat_statements E pg_stat_plans e aumenta le informazioni raccolte da molti altri dati estratti dal database.È chiamato pganalyze e puoi trovarlo su https://pganalyze.com/.

Per offrire una panoramica concisa degli strumenti e dei progetti interessanti nell'area Monitoraggio Postgres ho anche iniziato a compilare un elenco sul sito Wiki di Postgres che viene aggiornato regolarmente.

Ho usato un po' pgtop.È piuttosto rozzo, ma almeno posso vedere quale query è in esecuzione per ciascun ID di processo.

Ho provato pgfouine, ma se ricordo bene, è uno strumento offline.

Inoltre accodo il file psql.log e imposto i criteri di registrazione a un livello in cui posso vedere le query problematiche.

#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this time.

Utilizzo anche EMS Postgres Manager per svolgere attività di amministrazione generale.Non fa nulla per te, ma semplifica la maggior parte delle attività e rende più semplice la revisione e l'impostazione dello schema.Trovo che quando utilizzo una GUI, è molto più facile per me individuare incoerenze (come un indice mancante, criteri di campo, ecc.).È solo uno dei due programmi che desidero utilizzare VMWare sul mio Mac.

Munin è abbastanza semplice ma efficace per ottenere tendenze su come il database si evolve e si comporta nel tempo.Nel kit standard di Munin puoi tra le altre cose monitorare la dimensione del database, il numero di blocchi, il numero di connessioni, le scansioni sequenziali, la dimensione del registro delle transazioni e le query a lunga esecuzione.

Facile da configurare e iniziare e, se necessario, puoi scrivere il tuo plugin abbastanza facilmente.

Dai un'occhiata agli ultimi plugin postgresql forniti con Munin qui:

http://munin-monitoring.org/browser/branches/1.4-stable/plugins/node.d/

Bene, la prima cosa da fare è provare tutte le tue query da psql usando "explain" e vedere se ci sono scansioni sequenziali che possono essere convertite in scansioni di indici aggiungendo indici o riscrivendo la query.

A parte questo, sono interessato quanto te alle risposte a questa domanda.

Dai un'occhiata a Lightning Admin, ha una GUI per l'acquisizione delle istruzioni di registro, non perfetta ma funziona benissimo per la maggior parte delle esigenze. http://www.amsoftwaredesign.com

DBTuna http://www.dbtuna.com/postgresql_monitor.php ha recentemente iniziato a supportare il monitoraggio PostgreSQL.Lo utilizziamo ampiamente per il monitoraggio MySQL, quindi se fornisce lo stesso per Postgres, dovrebbe essere adatto anche a te.

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