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

pgFincore 1.2, un'estensione PostgreSQL

pgFincore 1.2 è un'estensione PostgreSQL per il controllo e la manipolazione della cache della pagina dati del sistema operativo. L'estensione ha già una storia di 7 anni di utilizzo, con evoluzioni corrispondenti alle esigenze produttive.

Scarica qui l'ultima versione 1.2, compatibile con PostgreSQL 9.6.

Cache dati

Il caching delle pagine dati è un'operazione che avviene "naturalmente", a più livelli nella gestione dei dati. L'oggetto è semplice:una moltitudine di strati sono sovrapposti tra i dati registrati fisicamente su disco e la restituzione all'utente. Attualmente quasi tutti i livelli di dati hanno un'astrazione per servire i comandi di lettura e scrittura più velocemente. Pertanto, la maggior parte dei dischi rigidi offre una cache di scrittura, che ritarda la scrittura fisica, e una cache di lettura che consente di anticipare le richieste future e fornire i dati più rapidamente. Esiste un sistema equivalente in SAN, schede RAID, sistemi operativi, software, ecc.

PostgreSQL ha ovviamente un proprio sistema di gestione per scritture e letture, i buffer condivisi , che può essere controllato con l'estensione pg_buffercache.

È possibile controllare la cache del sistema operativo con gli strumenti di sistema e pgFincore portalo in PostgreSQL.

Leggi avanti

La maggior parte dei sistemi operativi ottimizza i percorsi dei dati fornendo una finestra read-ahead, che consente di precaricare i dati nel cache e quindi fornirlo più rapidamente alle applicazioni. PostgreSQL contiene diverse ottimizzazioni per favorire questo comportamento a livello di sistema e offre anche funzionalità simili con l'opzione Effective_io_concurrency.

Una soluzione per facilitare queste ottimizzazioni consiste nell'usare le chiamate di sistema POSIX_FADVISE. Ancora pgFincore porta questa soluzione in PostgreSQL.

pgFincore 1.2

Questa estensione consente quindi:

  • per ottenere informazioni precise sull'occupazione di una tabella o di un indice (e alcuni altri file utilizzati da PostgreSQL) nella cache del sistema che supporta POSIX (linux, BSD, …),
  • per manipolare questa cache:creane una mappa e ripristinala in un secondo momento o su un altro server,
  • per ottimizzare i percorsi tramite chiamate posix_fadvise.

Ottieni pgFincore

Pacchetti Debian e Red Hat disponibili nelle distribuzioni e per ogni versione di PostgreSQL sui repository Apt PGDG e RPM PGDG.

E i sorgenti sul repository git di pgfincore.

Hai bisogno di aiuto?

Oltre al supporto della community, puoi contattare 2ndQuadrant.

Esempi di utilizzo

Configurazione

$ sudo apt-get install postgresql-9.6-pgfincore
$ psql -c 'CREATE EXTENSION pgfincore;'

Informazioni di sistema

# select * from pgsysconf_pretty();
 os_page_size | os_pages_free | os_total_pages 
--------------+---------------+----------------
 4096 bytes   | 314 MB        | 16 GB

Ottimizza la passeggiata casuale (riduci la finestra di read-ahead)

# select * from pgfadvise_random('pgbench_accounts_pkey');
          relpath | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/24980 | 4096         | 2            | 1853808

Ottimizzazione dell'attraversamento sequenziale (aumento della finestra read-ahead)

# select * from pgfadvise_sequential('pgbench_accounts');
 relpath          | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/25676 | 4096         | 3176         | 1829288

Controllo della cache

# select * from pgfincore('pgbench_accounts');
      relpath       | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit 
--------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
 base/11874/16447   |       0 |         4096 |       262144 |         3 |         1 |        408444 | 
 base/11874/16447.1 |       1 |         4096 |        65726 |         0 |         0 |        408444 | 

Carica una tabella in memoria

# select * from pgfadvise_willneed('pgbench_accounts');
      relpath       | os_page_size | rel_os_pages | os_pages_free 
--------------------+--------------+--------------+---------------
 base/11874/16447   |         4096 |       262144 |         80650
 base/11874/16447.1 |         4096 |        65726 |         80650

Svuota la cache di una tabella

# select * from pgfadvise_dontneed('pgbench_accounts');
      relpath       | os_page_size | rel_os_pages | os_pages_free
--------------------+--------------+--------------+---------------
 base/11874/16447   |         4096 |       262144 |        342071
 base/11874/16447.1 |         4096 |        65726 |        408103

Ripristina le pagine memorizzate nella cache

Qui utilizziamo un parametro di tipo stringa di bit che rappresenta le pagine da caricare e scaricare dalla memoria.

# select * 
  from pgfadvise_loader('pgbench_accounts', 0, true, true, 
                       B'101001'); -- Varbit décrivant les pages à manipuler
     relpath      | os_page_size | os_pages_free | pages_loaded | pages_unloaded 
------------------+--------------+---------------+--------------+----------------
 base/11874/16447 |         4096 |        408376 |            3 |              3

NOTA:per la demo vengono gestite solo 6 pagine dati sopra, 1 carica la pagina, 0 scarica la pagina.