PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ottimizzazione di PostgreSQL:elementi chiave per migliorare le prestazioni

PostgreSQL e prestazioni

Le prestazioni sono uno dei requisiti chiave nella progettazione dell'architettura software ed è stato al centro degli sviluppatori PostgreSQL sin dai suoi inizi, come mostrato anche nel seguente commit dei sorgenti Git di PostgreSQL:

commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <[email protected]>
Date:   Tue Jul 9 06:22:35 1996 +0000

   Postgres95 1.01 Distribution - Virgin Sources

[...]

diff --git a/src/backend/access/heap/stats.c b/src/backend/access/heap/stats.c
new file mode 100644
index 0000000000..d41d01ac1b
--- /dev/null
+++ b/src/backend/access/heap/stats.c
@@ -0,0 +1,329 @@
+/*-------------------------------------------------------------------------
+ *
+ * stats.c--
+ *    heap access method debugging statistic collection routines
+ *
+ * Copyright (c) 1994, Regents of the University of California

[...]

+ * Also note that this routine probably shouldn't have to exist, and does
+ * screw up the call graph rather badly, but we are wasting so much time and
+ * system resources being massively general that we are losing badly in our
+ * performance benchmarks.
+ */

PostgreSQL ottiene prestazioni implementando varie funzionalità:

  • Diversi tipi di indici
  • Pianificatore e ottimizzatore di query in grado di sfruttare i sistemi multiprocessore
  • MVCC
  • Partizionamento delle tabelle

Selezione dell'ambiente

Con le molte opzioni disponibili oggi arrivano altrettante domande:

  • On premise o nel cloud?
  • Bare metal o virtualizzato?
  • Hardware marchiato o costruito da te?
  • In che modo le funzioni di basso livello di PostgreSQL o fsync influiscono sulle prestazioni hardware?
  • Disco locale o memoria condivisa?
  • Quali impostazioni del sistema operativo devono essere impostate?

Anche in questo caso, il wiki di PostgreSQL è un ottimo punto di partenza per tutte le prestazioni.

Quali sono le cose chiave da cercare?

Dal momento che c'è molta letteratura là fuori che tocca vari aspetti dell'ottimizzazione delle prestazioni di PostgreSQL e della progettazione del sistema (suggerimento:cerca xfs nella pagina), questo blog non vuole essere un tuffo in nessuno di quegli argomenti già discussi, ma piuttosto un Il punto di vista dell'amministratore di sistema su da dove iniziare quando l'obiettivo principale è evitare la contesa di risorse. Indicherò anche molti riferimenti che affrontano questioni specifiche in modo più dettagliato. La consulenza di esperti in tutte le aree critiche per le prestazioni di PostgreSQL è disponibile tramite le numerose aziende che offrono servizi professionali.

Iniziamo!

Raccolta di informazioni

Supponendo un'installazione predefinita e sapendo che PostgreSQL non cerca di essere ottimizzato immediatamente e che potrebbero esserci anche alcune stranezze, questo passaggio implica l'impostazione degli strumenti di monitoraggio necessari.

Un buon monitoraggio è fondamentale per comprendere l'applicazione ed essere in grado di rintracciare rapidamente le risorse interessate, e questo è particolarmente vero per i fornitori di servizi cloud in cui l'accesso all'host del database potrebbe non essere disponibile per eseguire benchmark per CPU o I/O:

Fig.1 — SlideShare, Jignesh Shah, Best Practices with Managed PostgreSQL nel cloud

Reagire agli avvisi sulle prestazioni del sistema

Gli strumenti di monitoraggio visualizzeranno grafici e avviseranno gli indicatori delle prestazioni del sistema:

CPU:

  • Avviso:un utilizzo elevato indica una query di lunga durata.
    • Impatto:tempo di risposta dell'applicazione.
    • Azione:esamina le metriche delle statistiche del database per identificare le query che devono essere ottimizzate.

I/O:

  • Avviso:numero o letture elevate.
    • Impatto:tempo di risposta dell'applicazione.
    • Azione:aggiungere un'altra replica di lettura. Esamina le metriche delle statistiche del database per identificare le query di lunga durata.
  • Avviso:numero elevato di scritture.
    • Impatto:tempo di risposta dell'applicazione.
    • Azione — Ottimizza i parametri GUC shared_buffers, work_mem e Maintenance_work_mem. Sintonizza il checkpoint e assicurati che l'autovacuum sia regolato correttamente. Se PostgreSQL è installato sul proprio hardware, configura i tablespace e/o considera lo sharding, ma comprendi le avvertenze sullo sharding.

Memoria:

  • Avviso:utilizzo elevato della memoria.
    • Impatto:prestazioni I/O.
    • Azione:esamina le metriche delle statistiche del database per identificare le query che devono essere ottimizzate.

Rete:

  • Avviso:latenza elevata. Di solito si tratta di un problema DBaaS.
    • Impatto:client, replica.
    • Azione:sposta gli host di database più vicino ai server frontend.
  • Avviso — Numero elevato di connessioni.
    • Impatto — Clienti.
    • Azione:valuta la possibilità di utilizzare il polling della connessione.

Indicatori di performance interni del database

Le viste pg_* sono la finestra per le prestazioni del motore di database e le applicazioni di gestione PostgreSQL sono state scritte per aiutare a correlare la ricchezza di informazioni altrimenti disponibili tramite varie query SQL. Esistono estensioni aggiuntive e sono spesso integrate o disponibili come plug-in.

L'utilizzo di tali strumenti semplifica l'attività DBA e garantisce che vengano seguite le migliori pratiche durante l'impostazione e la configurazione del cluster di database.

Statistiche del database

Strumenti di monitoraggio come ClusterControl utilizzano le statistiche sull'attività del database per aiutare il DBA con l'ottimizzazione delle prestazioni:

Fig.2 — Diversi, elementi chiave da monitorare in PostgreSQL — Analisi del carico di lavoroScarica oggi il whitepaper Gestione e automazione di PostgreSQL con ClusterControlScopri cosa devi sapere per distribuire, monitorare, gestire e ridimensionare PostgreSQLScarica il whitepaper

Ottimizzazione query

A partire dalla versione 9.5, PostgreSQL include notevoli miglioramenti delle prestazioni delle query come indici BRIN e query parallele:

Fig.3 — 2ndQuadrant, Thomas Vondra, miglioramenti delle prestazioni in PostgreSQL 9.5 (e oltre)

Blocco

Concurrency Control è dedicato un intero capitolo nella documentazione di PostgreSQL. Utilizza gli strumenti di monitoraggio per essere avvisato quando il numero di blocchi o la durata del blocco supera la soglia e risolvi il problema cercando indici mancanti, rivedendo il codice dell'applicazione o passando al polling della connessione.

Carico collettivo

synchronous_commit può essere disattivato durante l'importazione di dati di grandi dimensioni. Altre opzioni sono discusse nella sezione della documentazione di PostgreSQL Popolamento di un database.

Conclusione

L'ottimizzazione delle prestazioni di PostgreSQL è un compito complesso. La complessità deriva dai molti sintonizzabili resi disponibili, che è un forte argomento a favore di PostgreSQL. Non esiste un proiettile d'argento per risolvere i problemi di prestazioni, piuttosto sono le specifiche dell'applicazione che in definitiva determinano i requisiti di ottimizzazione. Pertanto gli strumenti di monitoraggio possono aiutare a ottenere informazioni dettagliate sulle prestazioni relative alle prestazioni del sistema e consentono inoltre di identificare le aree specifiche di PostgreSQL che necessitano di ottimizzazione, nonché le query SQL che richiedono l'ottimizzazione. Inoltre, i sistemi di gestione del database possono aiutare con la configurazione e l'amministrazione di PostgreSQL al fine di garantire che vengano seguite le migliori pratiche.