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.