sql >> Database >  >> RDS >> PostgreSQL

pgFincore 1.2, een PostgreSQL-extensie

pgFincore 1.2 is een PostgreSQL-extensie voor het controleren en manipuleren van de gegevenspaginacache van het besturingssysteem. De extensie heeft al een geschiedenis van 7 jaar gebruik, met evoluties die overeenkomen met de productiebehoeften.

Download hier de laatste versie 1.2, compatibel met PostgreSQL 9.6.

Gegevenscache

Het cachen van gegevenspagina's is een bewerking die "van nature" plaatsvindt op verschillende niveaus in gegevensbeheer. Het doel is eenvoudig:een veelvoud van lagen wordt gesuperponeerd tussen de gegevens die fysiek op schijf zijn vastgelegd en de teruggave aan de gebruiker. Momenteel heeft bijna elke datalaag een abstractie om lees- en schrijfcommando's sneller uit te voeren. De meeste harde schijven bieden dus een schrijfcache, die het fysieke schrijven vertraagt, en een leescache waarmee u kunt anticiperen op toekomstige verzoeken en sneller gegevens kunt verstrekken. Een gelijkwaardig systeem bestaat in SAN's, RAID-kaarten, besturingssystemen, software, enz.

PostgreSQL heeft natuurlijk een eigen beheersysteem voor schrijven en lezen, de gedeelde buffers , die kan worden gecontroleerd met de extensie pg_buffercache.

Het is mogelijk om de cache van het besturingssysteem te controleren met systeemtools en pgFincore port dit in PostgreSQL.

Vooruit lezen

De meeste besturingssystemen optimaliseren gegevenspaden door een vooruitleesvenster te bieden. cache en geef het dus sneller aan applicaties. PostgreSQL bevat verschillende optimalisaties om dit gedrag op systeemniveau te bevorderen, en heeft ook vergelijkbare functionaliteit met de effectieve_io_concurrency-optie.

Een oplossing om deze optimalisaties te vergemakkelijken, is het gebruik van POSIX_FADVISE-systeemaanroepen. Nogmaals pgFincore port deze oplossing in PostgreSQL.

pgFincore 1.2

Deze extensie maakt het dus mogelijk:

  • om nauwkeurige informatie te verkrijgen over de bezetting van een tabel of een index (en enkele andere bestanden die door PostgreSQL worden gebruikt) in de cache van het systeem dat POSIX ondersteunt (linux, BSD, ...),
  • om deze cache te manipuleren:maak er een kaart van en herstel deze later of op een andere server,
  • om paden te optimaliseren via posix_fadvise-aanroepen.

PgFincore ophalen

Debian- en Red Hat-pakketten beschikbaar in de distributies en voor elke versie van PostgreSQL op de Apt PGDG- en RPM PGDG-repositories.

En de bronnen op de pgfincore git-repository.

Hulp nodig?

Naast community-ondersteuning kunt u contact opnemen met 2ndQuadrant.

Gebruiksvoorbeelden

Instellen

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

Systeeminformatie

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

Optimaliseer de willekeurige wandeling (verklein het vooruitleesvenster)

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

Optimaliseer de sequentiële verplaatsing (vergroting van het vooruitleesvenster)

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

Cache-audit

# 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 | 

Een tabel in het geheugen laden

# 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

Wis de cache van een tafel

# 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

Pagina's in cache herstellen

Hier gebruiken we een parameter van het type bitstring die de pagina's vertegenwoordigt die moeten worden geladen en verwijderd uit het geheugen.

# 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

OPMERKING:voor de demo worden hierboven slechts 6 gegevenspagina's behandeld, 1 laadt de pagina, 0 verwijdert de pagina.


  1. sqlite:hoe voeg ik de totale tijd toe uu:mm:ss waarbij het kolomgegevenstype DATETIME is?

  2. Gegroepeerde aaneenschakeling :Duplicaten bestellen en verwijderen

  3. Haal de eerste, tweede, derde of vierde maandag van een maand in SQLite

  4. Groepeer DateTime in intervallen van 5,15,30 en 60 minuten