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

pgFincore 1.2, en PostgreSQL-udvidelse

pgFincore 1.2 er en PostgreSQL-udvidelse til revision og manipulation af operativsystemets datasidecache. Udvidelsen har allerede en historie på 7 års brug, med udviklinger svarende til produktionsbehov.

Download her den seneste version 1.2, kompatibel med PostgreSQL 9.6.

Datacache

Dataside-caching er en operation, der sker "naturligt", på flere niveauer i datahåndtering. Formålet er enkelt:et væld af lag er overlejret mellem de data, der fysisk er registreret på disken, og tilbageleveringen til brugeren. I øjeblikket har næsten alle datalag en abstraktion til at betjene læse- og skrivekommandoer hurtigere. De fleste harddiske tilbyder således en skrivecache, som forsinker fysisk skrivning, og en læsecache, som giver dig mulighed for at forudse fremtidige anmodninger og servere data hurtigere. Et tilsvarende system findes i SAN'er, RAID-kort, operativsystemer, software osv.

PostgreSQL har naturligvis sit eget styringssystem til skrivning og læsning, de delte buffere , som kan revideres med pg_buffercache-udvidelsen.

Det er muligt at revidere cachen i operativsystemet med systemværktøjer og pgFincore porter dette i PostgreSQL.

Læs videre

De fleste operativsystemer optimerer datastier ved at give et read-ahead-vindue, hvilket gør det muligt at forudindlæse data i cache og dermed give det hurtigere til applikationer. PostgreSQL indeholder adskillige optimeringer for at favorisere denne adfærd på systemniveau og har også lignende funktionalitet med muligheden effective_io_concurrency.

En løsning til at lette disse optimeringer er at bruge POSIX_FADVISE systemkald. Igen pgFincore portér denne løsning i PostgreSQL.

pgFincore 1.2

Denne udvidelse tillader derfor:

  • for at få præcise oplysninger om besættelsen af ​​en tabel eller et indeks (og nogle andre filer, der bruges af PostgreSQL) i cachen på systemet, der understøtter POSIX (linux, BSD, …),
  • for at manipulere denne cache:lav et kort over den og gendan den senere eller på en anden server,
  • for at optimere stier via posix_fadvise-kald.

Hent pgFincore

Debian- og Red Hat-pakker tilgængelige i distributionerne og for hver version af PostgreSQL på Apt PGDG- og RPM PGDG-lagrene.

Og kilderne på pgfincore git repository.

Har du brug for hjælp?

Ud over fællesskabsstøtte kan du kontakte 2ndQuadrant.

Eksempler på brug

Opsætning

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

Systemoplysninger

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

Optimer den tilfældige gåtur (reducer vinduet med fremlæsning)

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

Optimer den sekventielle traversal (øgning af fremlæsningsvinduet)

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

Cache-revision

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

Indlæs en tabel i hukommelsen

# 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

Ryd cachen for en tabel

# 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

Gendan cachelagrede sider

Her bruger vi en bit-streng type parameter, der repræsenterer siderne, der skal indlæses og fjernes fra hukommelsen.

# 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

BEMÆRK:til demoen håndteres kun 6 datasider ovenfor, 1 indlæser siden, 0 aflæser siden.


  1. Henter kommentarer fra en PostgreSQL DB

  2. Dynamisk datamaskering i SQL Server for begyndere

  3. Datatype uoverensstemmelse (kode 20) under indsættelse

  4. Sådan overføres et array til en lagret SQL Server-procedure