Domanda

Tenete presente che io sono un esordiente nel mondo di sql/database.

Io inserimento/aggiornamento migliaia di oggetti di ogni secondo.Tali oggetti sono attivamente interrogato per più intervalli di un secondo.

Che cosa sono alcune cose di base che dovrei fare per tune il mio (postgres) database?

È stato utile?

Soluzione

È un argomento molto vasto, così qui è un sacco di roba per voi a leggere.

  • SPIEGARE e SPIEGARE ANALIZZARE è estremamente utile per capire cosa sta succedendo nel vostro db-engine
  • Assicurarsi colonne rilevanti sono indicizzate
  • Assicurarsi irrilevante colonne sono non indicizzate (insert/update-prestazioni può andare giù per lo scarico, se troppi indici devono essere aggiornati)
  • Assicurati che il tuo postgres.conf è sintonizzato correttamente
  • Sapere cosa work_mem è, e come influenza la vostra query (principalmente utile per la query più grandi)
  • Assicurarsi che il database è correttamente normalizzata
  • VUOTO per cancellare i vecchi dati
  • ANALIZZARE per l'aggiornamento delle statistiche (statistiche di destinazione per la quantità di statistiche)
  • Le connessioni persistenti (si potrebbe utilizzare una connessione manager come pgpool o pgbouncer)
  • Comprendere come le query sono costruiti (join, sub-seleziona, cursori)
  • La memorizzazione nella cache di dati (es.memcached) è un'opzione

E quando sarete stanchi di queste opzioni:aggiungere più memoria, disco più veloce-sottosistema etc.Hardware questioni, in particolare su set di dati più grandi.

E, naturalmente, di leggere tutti gli altri thread su postgres/database.:)

Altri suggerimenti

In primo luogo, leggere il manuale ufficiale del Suggerimenti Per La Prestazione.

In esecuzione SPIEGARE su tutte le vostre domande e capire la sua uscita ti consente di sapere se le query sono veloci come potrebbero essere, e se si dovrebbe essere l'aggiunta di indici.

Una volta fatto questo, vorrei suggerire la lettura di oltre il Configurazione Del Server parte del manuale.Ci sono molte opzioni che possono essere sintonizzati per migliorare ulteriormente le prestazioni.Assicurarsi di comprendere le opzioni di impostazione, però, dal momento che potrebbe facilmente ridurre le prestazioni se sono state impostate in modo non corretto.

Ricordate che ogni volta si modifica di una query o di un'opzione, prova e benchmark in modo che si conoscono gli effetti di ogni variazione.

In realtà ci sono alcune semplici regole che vi consentiranno in molti casi sufficiente prestazioni:

  1. Gli indici sono la prima parte. Le chiavi primarie sono indicizzate automaticamente. Vi consiglio di mettere gli indici su tutte le chiavi esterne. Mettere ulteriormente indici su tutte le colonne che sono spesso interrogati, se vi sono domande molto utilizzati su un tavolo in cui viene richiesto più di una colonna, mettere un indice su tali colonne insieme.

  2. impostazioni della memoria nella propria installazione di PostgreSQL. Impostare i seguenti parametri più alto:

.

shared_buffers, work_mem, maintenance_work_mem, temp_buffers

Se si tratta di una macchina database dedicato è possibile impostare facilmente i primi 3 di questi a metà della ram (basta essere attenti sotto Linux con buffer condivisi, forse è necessario regolare il parametro shmmax), in tutti gli altri casi dipende la quantità di RAM che si desidera dare a PostgreSQL.

http://www.postgresql.org/docs /8.3/interactive/runtime-config-resource.html

Il minimo assoluto mi raccomando è la SPIEGARE ANALYZE comando . Mostrerà una ripartizione dei subquery, si unisce, et al., Tutto il tempo che mostra la quantità effettiva di tempo consumato nell'operazione. Sarà anche avvisare l'utente di scansioni sequenziali e altri problemi brutto.

È più modo per iniziare.

Mettere fsync = off nel vostro posgresql.conf, se vi fidate vostro filesystem, altrimenti ogni operazione PostgreSQL verrà scritto del sud subito al disco (con chiamata di sistema fsync). Abbiamo questa opzione disattivata su molti server di produzione dal bel 10 anni, e non abbiamo mai avuto corruzioni di dati.

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